Skip to content

Commit fdec406

Browse files
committed
APICall oAuth hotfix. Conversation manager ToolCall status. support skill status message in the SDK
1 parent 5307537 commit fdec406

File tree

7 files changed

+22
-7
lines changed

7 files changed

+22
-7
lines changed

examples/03-agent-workflow-components/01-workflow.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ async function main() {
1616
const mdSkill = agent.addSkill({
1717
name: 'MarketData',
1818
description: 'Use this skill to get comprehensive market data and statistics for a cryptocurrency',
19+
status_message: 'Getting market data...',
1920
});
2021

2122
//Defining the inputs of the skill
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +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":""}}
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","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":""}}

packages/core/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@smythos/sre",
3-
"version": "1.5.63",
3+
"version": "1.5.64",
44
"description": "Smyth Runtime Environment",
55
"author": "Alaa-eddine KADDOURI",
66
"license": "MIT",

packages/core/src/Components/APICall/APICall.class.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,8 @@ export class APICall extends Component {
117117
// To support both old and new OAuth configuration, we check for both oauth_con_id and oauthService.
118118
logger.debug('checking oauth config', config?.data?.oauth_con_id, config?.data?.oauthService);
119119
if (
120-
(config?.data?.oauth_con_id !== undefined && config?.data?.oauth_con_id !== '' && config?.data?.oauth_con_id !== 'None') ||
121-
(config?.data?.oauthService !== '' && config.data.oauthService !== 'None')
120+
(config?.data?.oauth_con_id && config.data.oauth_con_id !== 'None') ||
121+
(config?.data?.oauthService && config.data.oauthService !== 'None')
122122
) {
123123
const additionalParams = extractAdditionalParamsForOAuth1(reqConfig);
124124
const oauthHeaders = await generateOAuthHeaders(agent, config, reqConfig, logger, additionalParams);

packages/core/src/helpers/Conversation.helper.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ export class Conversation extends EventEmitter {
5252

5353
private _reqMethods;
5454
private _toolsConfig;
55+
private _toolStatusMap: Record<string, string> = {};
5556
private _endpoints;
5657
private _baseUrl;
5758

@@ -459,7 +460,9 @@ export class Conversation extends EventEmitter {
459460
//await beforeFunctionCall(llmMessage, toolsData[tool.index]);
460461
// TODO [Forhad]: Make sure toolsData[tool.index] and tool do the same thing
461462
this.emit('beforeToolCall', { tool, args }, llmMessage); //deprecated
462-
this.emit(TLLMEvent.ToolCall, { tool, _llmRequest: llmMessage });
463+
464+
const status = tool.name ? this._toolStatusMap?.[tool.name] : undefined;
465+
this.emit(TLLMEvent.ToolCall, { tool, status, _llmRequest: llmMessage });
463466

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

987+
this._toolStatusMap = agentData?.data?.components
988+
?.filter((component) => component.name === 'APIEndpoint')
989+
.reduce((map, component) => {
990+
if (component?.data?.endpoint) {
991+
map[component.data.endpoint] =
992+
component?.data?.status_message || `Calling ${component?.data?.endpointLabel || component.data.endpoint}`;
993+
}
994+
return map;
995+
}, {});
996+
984997
const spec = await agentDataConnector.getOpenAPIJSON(agentData, 'http://localhost/', this._agentVersion, true).catch((error) => null);
985998
return this.patchSpec(spec);
986999
}

packages/sdk/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@smythos/sdk",
3-
"version": "1.1.5",
3+
"version": "1.1.6",
44
"description": "SRE SDK",
55
"keywords": [
66
"smythos",

packages/sdk/src/Components/Skill.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ function normalizeEndpointName(name: string) {
77
return name.replace(/[^a-zA-Z0-9]/g, '_');
88
}
99

10-
1110
export type TSkillSettings = {
1211
name: string;
1312
endpoint?: string;
13+
status_message?: string;
1414
ai_exposed?: boolean;
1515
description?: string;
1616
method?: 'GET' | 'POST' | 'PUT' | 'DELETE';
@@ -30,6 +30,7 @@ export function Skill(settings?: TSkillSettings, agent?: Agent) {
3030
settings: {
3131
...settingsWithoutName,
3232
endpoint: normalizeEndpointName(settings?.endpoint || settings?.name),
33+
status_message: settings?.status_message || '',
3334
ai_exposed: settings?.ai_exposed || true,
3435
method: settings?.method || 'POST',
3536
},

0 commit comments

Comments
 (0)