From e448a26f80c1d0edd37c751829b44c1fd30303fd Mon Sep 17 00:00:00 2001 From: Abhi Aiyer Date: Fri, 14 Feb 2025 12:54:21 -0800 Subject: [PATCH] pass down run id (#1913) - Pass down run id - Fix some major mistakes - Add changeset - Address @abhiaiyer91 PR comment - Fix tests --------- Co-authored-by: umgefahren <55623006+umgefahren@users.noreply.github.com> --- .changeset/rotten-planets-confess.md | 5 +++++ packages/core/src/agent/index.ts | 6 ++++-- packages/core/src/llm/model/model.test.ts | 16 ++++++++-------- packages/core/src/llm/model/model.ts | 16 ++++++++++------ 4 files changed, 27 insertions(+), 16 deletions(-) create mode 100644 .changeset/rotten-planets-confess.md diff --git a/.changeset/rotten-planets-confess.md b/.changeset/rotten-planets-confess.md new file mode 100644 index 000000000..b88535667 --- /dev/null +++ b/.changeset/rotten-planets-confess.md @@ -0,0 +1,5 @@ +--- +'@mastra/core': patch +--- + +Correctly pass down runId to called tools diff --git a/packages/core/src/agent/index.ts b/packages/core/src/agent/index.ts index 6a1671a6f..b47a27df9 100644 --- a/packages/core/src/agent/index.ts +++ b/packages/core/src/agent/index.ts @@ -460,6 +460,7 @@ export class Agent< return tool.execute({ context: args, mastra: this.#mastra, + runId, }); } catch (err) { this.logger.error(`[Agent:${this.name}] - Failed execution`, { @@ -520,6 +521,7 @@ export class Agent< }); return toolObj.execute!({ context: args, + runId, }); } catch (err) { this.logger.error(`[Agent:${this.name}] - Failed toolset execution`, { @@ -884,7 +886,7 @@ export class Agent< onFinish?.(result); }, maxSteps, - runId, + runId: runIdToUse, toolChoice, }) as unknown as StreamReturn; } @@ -913,7 +915,7 @@ export class Agent< onFinish?.(result); }, maxSteps, - runId, + runId: runIdToUse, toolChoice, }) as unknown as StreamReturn; } diff --git a/packages/core/src/llm/model/model.test.ts b/packages/core/src/llm/model/model.test.ts index d96fe379b..9b020df89 100644 --- a/packages/core/src/llm/model/model.test.ts +++ b/packages/core/src/llm/model/model.test.ts @@ -70,7 +70,7 @@ describe('MastraLLM', () => { describe('convertTools', () => { it('should convert tools correctly', () => { - const converted = aisdkText.convertTools(mockTools); + const converted = aisdkText.convertTools({ tools: mockTools }); expect(converted).toHaveProperty('testTool'); @@ -83,22 +83,22 @@ describe('MastraLLM', () => { }); it('should handle empty tools input', () => { - const converted = aisdkText.convertTools(); + const converted = aisdkText.convertTools({ tools: {} }); expect(converted).toEqual({}); }); it('should log debug messages during tool conversion', () => { - aisdkText.convertTools(); + aisdkText.convertTools({ tools: mockTools }); expect(mockMastra.logger.debug).toHaveBeenCalledWith('Starting tool conversion for LLM'); expect(mockMastra.logger.debug).toHaveBeenCalledWith('Converted tools for LLM'); }); it('should execute tool with correct context', async () => { - const converted = aisdkText.convertTools(mockTools); + const converted = aisdkText.convertTools({ tools: mockTools }); expect(converted).toBeDefined(); expect(converted.testTool).toBeDefined(); if (converted.testTool.execute) { - await converted.testTool.execute({ test: 'value' }, {} as any); + await converted.testTool.execute({ test: 'value' }); } expect(mockToolExecute).toHaveBeenCalledWith({ test: 'value' }); @@ -323,7 +323,7 @@ describe('MastraLLM', () => { it('should handle pre-converted tools', async () => { const messages: CoreMessage[] = [{ role: 'user', content: 'test message' }]; - const convertedTools = aisdkText.convertTools(mockTools); + const convertedTools = aisdkText.convertTools({ tools: mockTools }); await aisdkText.__text({ messages, @@ -435,7 +435,7 @@ describe('MastraLLM', () => { it('should handle pre-converted tools', async () => { const messages: CoreMessage[] = [{ role: 'user', content: 'test message' }]; - const convertedTools = aisdkText.convertTools(mockTools); + const convertedTools = aisdkText.convertTools({ tools: mockTools }); await aisdkText.__stream({ messages, @@ -674,7 +674,7 @@ describe('MastraLLM', () => { const schema = z.object({ content: z.string(), }); - const convertedTools = aisdkObject.convertTools(mockTools); + const convertedTools = aisdkObject.convertTools({ tools: mockTools }); await aisdkObject.__streamObject({ messages, diff --git a/packages/core/src/llm/model/model.ts b/packages/core/src/llm/model/model.ts index f27709c7a..8487aa077 100644 --- a/packages/core/src/llm/model/model.ts +++ b/packages/core/src/llm/model/model.ts @@ -23,6 +23,7 @@ import { } from '../'; import { type MastraPrimitives } from '../../action'; import { type ToolsInput } from '../../agent/types'; +import type { CoreTool } from '../../tools'; import { delay } from '../../utils'; import { MastraLLMBase } from './base'; @@ -68,7 +69,7 @@ export class MastraLLM extends MastraLLMBase { return this.#model; } - convertTools(tools?: ToolsInput): Record { + convertTools({ tools, runId }: { tools?: ToolsInput; runId?: string } = {}): Record { this.logger.debug('Starting tool conversion for LLM'); const converted = Object.entries(tools || {}).reduce( (memo, value) => { @@ -88,6 +89,7 @@ export class MastraLLM extends MastraLLMBase { return tool.execute({ context: props, mastra: this.#mastra, + runId, }); } catch (error) { this.logger.error('Error executing tool', { @@ -103,9 +105,11 @@ export class MastraLLM extends MastraLLMBase { return memo; }, - {} as Record, + {} as Record, ); + this.logger.debug(`Converted tools for LLM`); + return converted; } @@ -128,7 +132,7 @@ export class MastraLLM extends MastraLLMBase { tools: Object.keys(tools || convertedTools || {}), }); - const finalTools = convertedTools || this.convertTools(tools); + const finalTools = convertedTools || this.convertTools({ tools, runId }); const argsForExecute = { model, @@ -182,7 +186,7 @@ export class MastraLLM extends MastraLLMBase { this.logger.debug(`[LLM] - Generating a text object`, { runId }); - const finalTools = convertedTools || this.convertTools(tools); + const finalTools = convertedTools || this.convertTools({ tools, runId }); const argsForExecute = { model, @@ -255,7 +259,7 @@ export class MastraLLM extends MastraLLMBase { tools: Object.keys(tools || convertedTools || {}), }); - const finalTools = convertedTools || this.convertTools(tools); + const finalTools = convertedTools || this.convertTools({ tools, runId }); const argsForExecute = { model, @@ -326,7 +330,7 @@ export class MastraLLM extends MastraLLMBase { tools: Object.keys(tools || convertedTools || {}), }); - const finalTools = convertedTools || this.convertTools(tools); + const finalTools = convertedTools || this.convertTools({ tools, runId }); const argsForExecute = { model,