From 959dd01be5d18e30f80d1edd3a7c530f2c5c309e Mon Sep 17 00:00:00 2001 From: liuguanghui <2285190803@qq.com> Date: Tue, 15 Sep 2026 07:33:44 +0800 Subject: [PATCH] fix: handle pipes without tools --- .../core/src/pipes/pipes.issue-155.test.ts | 36 +++++++++++++++++++ packages/core/src/pipes/pipes.ts | 2 +- 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 packages/core/src/pipes/pipes.issue-155.test.ts diff --git a/packages/core/src/pipes/pipes.issue-155.test.ts b/packages/core/src/pipes/pipes.issue-155.test.ts new file mode 100644 index 00000000..57b40b53 --- /dev/null +++ b/packages/core/src/pipes/pipes.issue-155.test.ts @@ -0,0 +1,36 @@ +import {describe, expect, it, vi} from 'vitest'; +import {Pipe, type RunResponse} from './pipes'; + +describe('Pipe without tools', () => { + it('runs when the pipe omits the optional tools array', async () => { + const pipe = new Pipe({ + apiKey: 'test-api-key', + model: 'openai:gpt-4o-mini', + name: 'without-tools', + prod: true, + tools: undefined, + } as any); + const response: RunResponse = { + completion: 'done', + id: 'response-id', + object: 'chat.completion', + created: 0, + model: 'gpt-4o-mini', + choices: [ + { + index: 0, + message: {role: 'assistant', content: 'done'}, + logprobs: null, + finish_reason: 'stop', + }, + ], + usage: {prompt_tokens: 1, completion_tokens: 1, total_tokens: 2}, + system_fingerprint: null, + }; + const post = vi.fn().mockResolvedValue(response); + (pipe as any).request = {post}; + + await expect(pipe.run({messages: []})).resolves.toEqual(response); + expect(post).toHaveBeenCalledOnce(); + }); +}); diff --git a/packages/core/src/pipes/pipes.ts b/packages/core/src/pipes/pipes.ts index 410d74d4..f3e0721e 100644 --- a/packages/core/src/pipes/pipes.ts +++ b/packages/core/src/pipes/pipes.ts @@ -261,7 +261,7 @@ export class Pipe { const providerString = this.pipe.model.split(':')[0]; const modelProvider = getProvider(providerString); const isAnthropic = modelProvider === ANTHROPIC; - const hasTools = this.pipe.tools.length > 0; + const hasTools = this.hasTools; // For SDK // Run the given pipe name