Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion examples/01-agent-code-skill/04.1-chat-planner-coder.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Agent, Chat, Component, Model, TAgentMode, TLLMEvent } from '@smythos/sdk';
import chalk from 'chalk';
import * as readline from 'readline';
import { EmitUnit, PluginAPI, PluginBase, TokenLoom } from 'tokenloom';
import { EmitUnit, PluginBase, TokenLoom } from 'tokenloom';

//Show the tasks list and status to the user at every step before performing the tasks, and also give a tasks status summary after tasks.
//When you display the tasks list to a user show it in a concise way with a summary and checkboxes for each task.
Expand Down
1 change: 1 addition & 0 deletions examples/03-agent-workflow-components/01-workflow.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ async function main() {
const mdSkill = agent.addSkill({
name: 'MarketData',
description: 'Use this skill to get comprehensive market data and statistics for a cryptocurrency',
status_message: 'Getting market data...',
});

//Defining the inputs of the skill
Expand Down
2 changes: 1 addition & 1 deletion examples/agents-data/crypto-info-agent.smyth
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"version":"1.0.0","id":"cmbhu1l6c2qgv12er6xei99vz","name":"Crypto Info Agent","teamId":"9","parentTeamId":"9","components":[{"id":"CS001","name":"APIEndpoint","outputs":[{"name":"headers","color":"#3C89F9","index":0,"default":true},{"name":"body","color":"#3C89F9","index":1,"default":true},{"name":"query","color":"#3C89F9","index":2,"default":true},{"name":"query.query","color":"#3C89F9","index":3,"default":false}],"inputs":[{"name":"query","type":"String","friendlyInputType":"","coreInputType":"","color":"#F35063","optional":false,"index":0,"default":false}],"data":{"endpoint":"search_coins","description":"Search for cryptocurrencies by name or symbol","method":"GET","ai_exposed":true,"advancedModeEnabled":true,"endpointLabel":"","summary":""},"top":"0px","left":"50px","width":"","height":"","displayName":"APIEndpoint","title":"Search Coins","aiTitle":"","description":"Search for coins by name or symbol"},{"id":"CS002","name":"APICall","outputs":[{"name":"Response","color":"#3C89F9","index":0,"default":true},{"name":"Headers","color":"#3C89F9","index":1,"default":true},{"name":"Response.coins","color":"#3C89F9","index":2,"default":false}],"inputs":[{"name":"search_query","type":"String","friendlyInputType":"","coreInputType":"","color":"#F35063","optional":false,"index":0,"default":false}],"data":{"method":"GET","url":"https://api.coingecko.com/api/v3/search?query={{search_query}}","contentType":"application/json","oauthService":"None","scope":"","authorizationURL":"","tokenURL":"","clientID":"","clientSecret":"","requestTokenURL":"","accessTokenURL":"","userAuthorizationURL":"","consumerKey":"","consumerSecret":""},"top":"0px","left":"500px","width":"","height":"","displayName":"APICall","title":"CoinGecko Search","aiTitle":"","description":"Call CoinGecko search API"},{"id":"CS003","name":"APIOutput","outputs":[{"name":"Output","color":"#3C89F9","index":0,"default":true}],"inputs":[{"name":"coins","type":"Any","friendlyInputType":"","coreInputType":"","color":"#F35063","optional":false,"index":0,"default":false}],"data":{"format":"minimal"},"top":"0px","left":"950px","width":"","height":"","displayName":"APIOutput","title":"Search Results","aiTitle":"","description":"Format search results"},{"id":"CP001","name":"APIEndpoint","outputs":[{"name":"headers","color":"#3C89F9","index":0,"default":true},{"name":"body","color":"#3C89F9","index":1,"default":true},{"name":"query","color":"#3C89F9","index":2,"default":true},{"name":"query.coin_id","color":"#3C89F9","index":3,"default":false}],"inputs":[{"name":"coin_id","type":"String","friendlyInputType":"","coreInputType":"","color":"#F35063","optional":false,"index":0,"default":false}],"data":{"endpoint":"get_price","description":"Get the current price of a cryptocurrency in USD","method":"GET","ai_exposed":true,"advancedModeEnabled":true,"endpointLabel":"","summary":""},"top":"387px","left":"50px","width":"","height":"","displayName":"APIEndpoint","title":"Get Price","aiTitle":"","description":"Get current price in USD"},{"id":"CP002","name":"APICall","outputs":[{"name":"Response","color":"#3C89F9","index":0,"default":true},{"name":"Headers","color":"#3C89F9","index":1,"default":true}],"inputs":[{"name":"coin_id","type":"String","friendlyInputType":"","coreInputType":"","color":"#F35063","optional":false,"index":0,"default":false}],"data":{"method":"GET","url":"https://api.coingecko.com/api/v3/simple/price?ids={{coin_id}}&vs_currencies=usd","contentType":"application/json","oauthService":"None","scope":"","authorizationURL":"","tokenURL":"","clientID":"","clientSecret":"","requestTokenURL":"","accessTokenURL":"","userAuthorizationURL":"","consumerKey":"","consumerSecret":""},"top":"387px","left":"500px","width":"","height":"","displayName":"APICall","title":"CoinGecko Price","aiTitle":"","description":"Call CoinGecko price API"},{"id":"CP003","name":"APIOutput","outputs":[{"name":"Output","color":"#3C89F9","index":0,"default":true}],"inputs":[{"name":"price_data","type":"Any","friendlyInputType":"","coreInputType":"","color":"#F35063","optional":false,"index":0,"default":false}],"data":{"format":"minimal"},"top":"387px","left":"950px","width":"","height":"","displayName":"APIOutput","title":"Price Data","aiTitle":"","description":"Format price data"},{"id":"CM001","name":"APIEndpoint","outputs":[{"name":"headers","color":"#3C89F9","index":0,"default":true},{"name":"body","color":"#3C89F9","index":1,"default":true},{"name":"query","color":"#3C89F9","index":2,"default":true},{"name":"query.coin_id","color":"#3C89F9","index":3,"default":false}],"inputs":[{"name":"coin_id","type":"String","friendlyInputType":"","coreInputType":"","color":"#F35063","optional":false,"index":0,"default":false}],"data":{"endpoint":"get_market_info","description":"Get detailed market information for a cryptocurrency","method":"GET","ai_exposed":true,"advancedModeEnabled":true,"endpointLabel":"","summary":""},"top":"774px","left":"50px","width":"","height":"","displayName":"APIEndpoint","title":"Market Info","aiTitle":"","description":"Get market information"},{"id":"CM002","name":"APICall","outputs":[{"name":"Response","color":"#3C89F9","index":0,"default":true},{"name":"Headers","color":"#3C89F9","index":1,"default":true},{"name":"Response.market_data","color":"#3C89F9","index":2,"default":false}],"inputs":[{"name":"coin_id","type":"String","friendlyInputType":"","coreInputType":"","color":"#F35063","optional":false,"index":0,"default":false}],"data":{"method":"GET","url":"https://api.coingecko.com/api/v3/coins/{{coin_id}}?localization=false&tickers=false&market_data=true&community_data=false&developer_data=false&sparkline=false","contentType":"application/json","oauthService":"None","scope":"","authorizationURL":"","tokenURL":"","clientID":"","clientSecret":"","requestTokenURL":"","accessTokenURL":"","userAuthorizationURL":"","consumerKey":"","consumerSecret":""},"top":"774px","left":"500px","width":"","height":"","displayName":"APICall","title":"CoinGecko Market","aiTitle":"","description":"Call CoinGecko market data API"},{"id":"CM003","name":"APIOutput","outputs":[{"name":"Output","color":"#3C89F9","index":0,"default":true}],"inputs":[{"name":"market_data","type":"Any","friendlyInputType":"","coreInputType":"","color":"#F35063","optional":false,"index":0,"default":false}],"data":{"format":"minimal"},"top":"774px","left":"950px","width":"","height":"","displayName":"APIOutput","title":"Market Data","aiTitle":"","description":"Format market data"}],"connections":[{"sourceId":"CS001","sourceIndex":3,"targetId":"CS002","targetIndex":0},{"sourceId":"CS002","sourceIndex":2,"targetId":"CS003","targetIndex":0},{"sourceId":"CP001","sourceIndex":3,"targetId":"CP002","targetIndex":0},{"sourceId":"CP002","sourceIndex":0,"targetId":"CP003","targetIndex":0},{"sourceId":"CM001","sourceIndex":3,"targetId":"CM002","targetIndex":0},{"sourceId":"CM002","sourceIndex":2,"targetId":"CM003","targetIndex":0}],"description":"","shortDescription":"","behavior":"I am a cryptocurrency information assistant that uses the CoinGecko API. I can help you search for cryptocurrencies by name or symbol, check current prices in USD, and get detailed market information for specific coins. I will provide accurate and up-to-date information from CoinGecko's database. If you're looking for crypto market data, just ask me about any coin and I'll retrieve the information for you.","ui":{"panzoom":{"currentPan":{"x":378.032470703125,"y":-260.9026702880859},"currentZoom":0.5},"agentCard":{"left":"-745px","top":"112px"}},"introMessage":"Hi, I'm Crypto Info Agent. How can I help you today?","templateInfo":{"id":"crypto-info-agent-mbhwct4hp","name":"Crypto Info Agent","description":"","icon":"","category":"","publish":false,"color":"#000000","imageUrl":"","docLink":"","videoLink":"","valueProposition":""}}
{"version":"1.0.0","id":"cmbhu1l6c2qgv12er6xei99vz","name":"Crypto Info Agent","teamId":"9","parentTeamId":"9","components":[{"id":"CS001","name":"APIEndpoint","outputs":[{"name":"headers","color":"#3C89F9","index":0,"default":true},{"name":"body","color":"#3C89F9","index":1,"default":true},{"name":"query","color":"#3C89F9","index":2,"default":true},{"name":"query.query","color":"#3C89F9","index":3,"default":false}],"inputs":[{"name":"query","type":"String","friendlyInputType":"","coreInputType":"","color":"#F35063","optional":false,"index":0,"default":false}],"data":{"endpoint":"search_coins","status_message":"Coin search ...", "description":"Search for cryptocurrencies by name or symbol","method":"GET","ai_exposed":true,"advancedModeEnabled":true,"endpointLabel":"","summary":""},"top":"0px","left":"50px","width":"","height":"","displayName":"APIEndpoint","title":"Search Coins","aiTitle":"","description":"Search for coins by name or symbol"},{"id":"CS002","name":"APICall","outputs":[{"name":"Response","color":"#3C89F9","index":0,"default":true},{"name":"Headers","color":"#3C89F9","index":1,"default":true},{"name":"Response.coins","color":"#3C89F9","index":2,"default":false}],"inputs":[{"name":"search_query","type":"String","friendlyInputType":"","coreInputType":"","color":"#F35063","optional":false,"index":0,"default":false}],"data":{"method":"GET","url":"https://api.coingecko.com/api/v3/search?query={{search_query}}","contentType":"application/json","oauthService":"None","scope":"","authorizationURL":"","tokenURL":"","clientID":"","clientSecret":"","requestTokenURL":"","accessTokenURL":"","userAuthorizationURL":"","consumerKey":"","consumerSecret":""},"top":"0px","left":"500px","width":"","height":"","displayName":"APICall","title":"CoinGecko Search","aiTitle":"","description":"Call CoinGecko search API"},{"id":"CS003","name":"APIOutput","outputs":[{"name":"Output","color":"#3C89F9","index":0,"default":true}],"inputs":[{"name":"coins","type":"Any","friendlyInputType":"","coreInputType":"","color":"#F35063","optional":false,"index":0,"default":false}],"data":{"format":"minimal"},"top":"0px","left":"950px","width":"","height":"","displayName":"APIOutput","title":"Search Results","aiTitle":"","description":"Format search results"},{"id":"CP001","name":"APIEndpoint","outputs":[{"name":"headers","color":"#3C89F9","index":0,"default":true},{"name":"body","color":"#3C89F9","index":1,"default":true},{"name":"query","color":"#3C89F9","index":2,"default":true},{"name":"query.coin_id","color":"#3C89F9","index":3,"default":false}],"inputs":[{"name":"coin_id","type":"String","friendlyInputType":"","coreInputType":"","color":"#F35063","optional":false,"index":0,"default":false}],"data":{"endpoint":"get_price","status_message":"Getting Price ...","description":"Get the current price of a cryptocurrency in USD","method":"GET","ai_exposed":true,"advancedModeEnabled":true,"endpointLabel":"","summary":""},"top":"387px","left":"50px","width":"","height":"","displayName":"APIEndpoint","title":"Get Price","aiTitle":"","description":"Get current price in USD"},{"id":"CP002","name":"APICall","outputs":[{"name":"Response","color":"#3C89F9","index":0,"default":true},{"name":"Headers","color":"#3C89F9","index":1,"default":true}],"inputs":[{"name":"coin_id","type":"String","friendlyInputType":"","coreInputType":"","color":"#F35063","optional":false,"index":0,"default":false}],"data":{"method":"GET","url":"https://api.coingecko.com/api/v3/simple/price?ids={{coin_id}}&vs_currencies=usd","contentType":"application/json","oauthService":"None","scope":"","authorizationURL":"","tokenURL":"","clientID":"","clientSecret":"","requestTokenURL":"","accessTokenURL":"","userAuthorizationURL":"","consumerKey":"","consumerSecret":""},"top":"387px","left":"500px","width":"","height":"","displayName":"APICall","title":"CoinGecko Price","aiTitle":"","description":"Call CoinGecko price API"},{"id":"CP003","name":"APIOutput","outputs":[{"name":"Output","color":"#3C89F9","index":0,"default":true}],"inputs":[{"name":"price_data","type":"Any","friendlyInputType":"","coreInputType":"","color":"#F35063","optional":false,"index":0,"default":false}],"data":{"format":"minimal"},"top":"387px","left":"950px","width":"","height":"","displayName":"APIOutput","title":"Price Data","aiTitle":"","description":"Format price data"},{"id":"CM001","name":"APIEndpoint","outputs":[{"name":"headers","color":"#3C89F9","index":0,"default":true},{"name":"body","color":"#3C89F9","index":1,"default":true},{"name":"query","color":"#3C89F9","index":2,"default":true},{"name":"query.coin_id","color":"#3C89F9","index":3,"default":false}],"inputs":[{"name":"coin_id","type":"String","friendlyInputType":"","coreInputType":"","color":"#F35063","optional":false,"index":0,"default":false}],"data":{"endpoint":"get_market_info","description":"Get detailed market information for a cryptocurrency","method":"GET","ai_exposed":true,"advancedModeEnabled":true,"endpointLabel":"","summary":""},"top":"774px","left":"50px","width":"","height":"","displayName":"APIEndpoint","title":"Market Info","aiTitle":"","description":"Get market information"},{"id":"CM002","name":"APICall","outputs":[{"name":"Response","color":"#3C89F9","index":0,"default":true},{"name":"Headers","color":"#3C89F9","index":1,"default":true},{"name":"Response.market_data","color":"#3C89F9","index":2,"default":false}],"inputs":[{"name":"coin_id","type":"String","friendlyInputType":"","coreInputType":"","color":"#F35063","optional":false,"index":0,"default":false}],"data":{"method":"GET","url":"https://api.coingecko.com/api/v3/coins/{{coin_id}}?localization=false&tickers=false&market_data=true&community_data=false&developer_data=false&sparkline=false","contentType":"application/json","oauthService":"None","scope":"","authorizationURL":"","tokenURL":"","clientID":"","clientSecret":"","requestTokenURL":"","accessTokenURL":"","userAuthorizationURL":"","consumerKey":"","consumerSecret":""},"top":"774px","left":"500px","width":"","height":"","displayName":"APICall","title":"CoinGecko Market","aiTitle":"","description":"Call CoinGecko market data API"},{"id":"CM003","name":"APIOutput","outputs":[{"name":"Output","color":"#3C89F9","index":0,"default":true}],"inputs":[{"name":"market_data","type":"Any","friendlyInputType":"","coreInputType":"","color":"#F35063","optional":false,"index":0,"default":false}],"data":{"format":"minimal"},"top":"774px","left":"950px","width":"","height":"","displayName":"APIOutput","title":"Market Data","aiTitle":"","description":"Format market data"}],"connections":[{"sourceId":"CS001","sourceIndex":3,"targetId":"CS002","targetIndex":0},{"sourceId":"CS002","sourceIndex":2,"targetId":"CS003","targetIndex":0},{"sourceId":"CP001","sourceIndex":3,"targetId":"CP002","targetIndex":0},{"sourceId":"CP002","sourceIndex":0,"targetId":"CP003","targetIndex":0},{"sourceId":"CM001","sourceIndex":3,"targetId":"CM002","targetIndex":0},{"sourceId":"CM002","sourceIndex":2,"targetId":"CM003","targetIndex":0}],"description":"","shortDescription":"","behavior":"I am a cryptocurrency information assistant that uses the CoinGecko API. I can help you search for cryptocurrencies by name or symbol, check current prices in USD, and get detailed market information for specific coins. I will provide accurate and up-to-date information from CoinGecko's database. If you're looking for crypto market data, just ask me about any coin and I'll retrieve the information for you.","ui":{"panzoom":{"currentPan":{"x":378.032470703125,"y":-260.9026702880859},"currentZoom":0.5},"agentCard":{"left":"-745px","top":"112px"}},"introMessage":"Hi, I'm Crypto Info Agent. How can I help you today?","templateInfo":{"id":"crypto-info-agent-mbhwct4hp","name":"Crypto Info Agent","description":"","icon":"","category":"","publish":false,"color":"#000000","imageUrl":"","docLink":"","videoLink":"","valueProposition":""}}
2 changes: 1 addition & 1 deletion packages/core/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@smythos/sre",
"version": "1.5.63",
"version": "1.5.64",
"description": "Smyth Runtime Environment",
"author": "Alaa-eddine KADDOURI",
"license": "MIT",
Expand Down
4 changes: 2 additions & 2 deletions packages/core/src/Components/APICall/APICall.class.ts
Original file line number Diff line number Diff line change
Expand Up @@ -117,8 +117,8 @@ export class APICall extends Component {
// To support both old and new OAuth configuration, we check for both oauth_con_id and oauthService.
logger.debug('checking oauth config', config?.data?.oauth_con_id, config?.data?.oauthService);
if (
(config?.data?.oauth_con_id !== undefined && config?.data?.oauth_con_id !== '' && config?.data?.oauth_con_id !== 'None') ||
(config?.data?.oauthService !== '' && config.data.oauthService !== 'None')
(config?.data?.oauth_con_id && config.data.oauth_con_id !== 'None') ||
(config?.data?.oauthService && config.data.oauthService !== 'None')
) {
const additionalParams = extractAdditionalParamsForOAuth1(reqConfig);
const oauthHeaders = await generateOAuthHeaders(agent, config, reqConfig, logger, additionalParams);
Expand Down
15 changes: 14 additions & 1 deletion packages/core/src/helpers/Conversation.helper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ export class Conversation extends EventEmitter {

private _reqMethods;
private _toolsConfig;
private _toolStatusMap: Record<string, string> = {};
private _endpoints;
private _baseUrl;

Expand Down Expand Up @@ -459,7 +460,9 @@ export class Conversation extends EventEmitter {
//await beforeFunctionCall(llmMessage, toolsData[tool.index]);
// TODO [Forhad]: Make sure toolsData[tool.index] and tool do the same thing
this.emit('beforeToolCall', { tool, args }, llmMessage); //deprecated
this.emit(TLLMEvent.ToolCall, { tool, _llmRequest: llmMessage });

const status = tool.name ? this._toolStatusMap?.[tool.name] : undefined;
this.emit(TLLMEvent.ToolCall, { tool, status, _llmRequest: llmMessage });

const toolArgs = {
type: tool?.type,
Expand Down Expand Up @@ -981,6 +984,16 @@ export class Conversation extends EventEmitter {
this.systemPrompt = `Assistant Name : ${this.assistantName}\n\n${this.systemPrompt}`;
}

this._toolStatusMap = agentData?.data?.components
?.filter((component) => component.name === 'APIEndpoint')
.reduce((map, component) => {
if (component?.data?.endpoint) {
map[component.data.endpoint] =
component?.data?.status_message || `Calling ${component?.data?.endpointLabel || component.data.endpoint}`;
}
return map;
}, {});

const spec = await agentDataConnector.getOpenAPIJSON(agentData, 'http://localhost/', this._agentVersion, true).catch((error) => null);
return this.patchSpec(spec);
}
Expand Down
2 changes: 1 addition & 1 deletion packages/sdk/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@smythos/sdk",
"version": "1.1.4",
"version": "1.1.6",
"description": "SRE SDK",
"keywords": [
"smythos",
Expand Down
1 change: 1 addition & 0 deletions packages/sdk/src/Agent/Agent.class.ts
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,7 @@ class AgentCommand {

conversation.on(TLLMEvent.ToolCall, toolCallHandler);
conversation.on(TLLMEvent.ToolResult, toolResultHandler);
conversation.on(TLLMEvent.Usage, usageHandler);
conversation.on(TLLMEvent.End, endHandler);
conversation.on(TLLMEvent.Error, errorHandler);
conversation.on(TLLMEvent.Content, contentHandler);
Expand Down
Loading