@rudderjs/ai 1.17.3 → 1.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -1274
- package/dist/budget-orm/index.d.ts +1 -95
- package/dist/budget-orm/index.d.ts.map +1 -1
- package/dist/budget-orm/index.js +4 -176
- package/dist/budget-orm/index.js.map +1 -1
- package/dist/chat-mentions.d.ts +1 -58
- package/dist/chat-mentions.d.ts.map +1 -1
- package/dist/chat-mentions.js +4 -80
- package/dist/chat-mentions.js.map +1 -1
- package/dist/commands/ai-eval.d.ts +1 -92
- package/dist/commands/ai-eval.d.ts.map +1 -1
- package/dist/commands/ai-eval.js +4 -377
- package/dist/commands/ai-eval.js.map +1 -1
- package/dist/commands/make-agent.d.ts +1 -2
- package/dist/commands/make-agent.d.ts.map +1 -1
- package/dist/commands/make-agent.js +4 -22
- package/dist/commands/make-agent.js.map +1 -1
- package/dist/computer-use/index.d.ts +1 -52
- package/dist/computer-use/index.d.ts.map +1 -1
- package/dist/computer-use/index.js +4 -50
- package/dist/computer-use/index.js.map +1 -1
- package/dist/conversation-orm/index.d.ts +1 -108
- package/dist/conversation-orm/index.d.ts.map +1 -1
- package/dist/conversation-orm/index.js +4 -214
- package/dist/conversation-orm/index.js.map +1 -1
- package/dist/doctor.d.ts +1 -1
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +4 -65
- package/dist/doctor.js.map +1 -1
- package/dist/eval/index.d.ts +1 -270
- package/dist/eval/index.d.ts.map +1 -1
- package/dist/eval/index.js +4 -509
- package/dist/eval/index.js.map +1 -1
- package/dist/gateway/index.d.ts +1 -10
- package/dist/gateway/index.d.ts.map +1 -1
- package/dist/gateway/index.js +4 -10
- package/dist/gateway/index.js.map +1 -1
- package/dist/index.d.ts +1 -66
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -78
- package/dist/index.js.map +1 -1
- package/dist/mcp/index.d.ts +1 -15
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +4 -14
- package/dist/mcp/index.js.map +1 -1
- package/dist/memory-embedding/index.d.ts +1 -120
- package/dist/memory-embedding/index.d.ts.map +1 -1
- package/dist/memory-embedding/index.js +4 -228
- package/dist/memory-embedding/index.js.map +1 -1
- package/dist/memory-orm/index.d.ts +1 -117
- package/dist/memory-orm/index.d.ts.map +1 -1
- package/dist/memory-orm/index.js +4 -186
- package/dist/memory-orm/index.js.map +1 -1
- package/dist/node/index.d.ts +1 -2
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +4 -2
- package/dist/node/index.js.map +1 -1
- package/dist/observers.d.ts +1 -129
- package/dist/observers.d.ts.map +1 -1
- package/dist/observers.js +4 -39
- package/dist/observers.js.map +1 -1
- package/dist/react/index.d.ts +1 -15
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +4 -15
- package/dist/react/index.js.map +1 -1
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +4 -1
- package/dist/server/index.js.map +1 -1
- package/package.json +9 -13
- package/boost/guidelines.md +0 -260
- package/boost/skills/ai-agents/SKILL.md +0 -240
- package/boost/skills/ai-tools/SKILL.md +0 -260
- package/dist/agent-run-store.d.ts +0 -161
- package/dist/agent-run-store.d.ts.map +0 -1
- package/dist/agent-run-store.js +0 -98
- package/dist/agent-run-store.js.map +0 -1
- package/dist/agent-sse.d.ts +0 -153
- package/dist/agent-sse.d.ts.map +0 -1
- package/dist/agent-sse.js +0 -282
- package/dist/agent-sse.js.map +0 -1
- package/dist/agent.d.ts +0 -508
- package/dist/agent.d.ts.map +0 -1
- package/dist/agent.js +0 -1538
- package/dist/agent.js.map +0 -1
- package/dist/attachment.d.ts +0 -31
- package/dist/attachment.d.ts.map +0 -1
- package/dist/attachment.js +0 -89
- package/dist/attachment.js.map +0 -1
- package/dist/audio.d.ts +0 -45
- package/dist/audio.d.ts.map +0 -1
- package/dist/audio.js +0 -93
- package/dist/audio.js.map +0 -1
- package/dist/base64.d.ts +0 -7
- package/dist/base64.d.ts.map +0 -1
- package/dist/base64.js +0 -39
- package/dist/base64.js.map +0 -1
- package/dist/budget/pricing.d.ts +0 -124
- package/dist/budget/pricing.d.ts.map +0 -1
- package/dist/budget/pricing.js +0 -175
- package/dist/budget/pricing.js.map +0 -1
- package/dist/budget/storage.d.ts +0 -104
- package/dist/budget/storage.d.ts.map +0 -1
- package/dist/budget/storage.js +0 -0
- package/dist/budget/storage.js.map +0 -1
- package/dist/budget/with-budget.d.ts +0 -119
- package/dist/budget/with-budget.d.ts.map +0 -1
- package/dist/budget/with-budget.js +0 -175
- package/dist/budget/with-budget.js.map +0 -1
- package/dist/cached-embedding.d.ts +0 -14
- package/dist/cached-embedding.d.ts.map +0 -1
- package/dist/cached-embedding.js +0 -44
- package/dist/cached-embedding.js.map +0 -1
- package/dist/computer-use/actions.d.ts +0 -214
- package/dist/computer-use/actions.d.ts.map +0 -1
- package/dist/computer-use/actions.js +0 -48
- package/dist/computer-use/actions.js.map +0 -1
- package/dist/computer-use/errors.d.ts +0 -57
- package/dist/computer-use/errors.d.ts.map +0 -1
- package/dist/computer-use/errors.js +0 -76
- package/dist/computer-use/errors.js.map +0 -1
- package/dist/computer-use/playwright.d.ts +0 -76
- package/dist/computer-use/playwright.d.ts.map +0 -1
- package/dist/computer-use/playwright.js +0 -270
- package/dist/computer-use/playwright.js.map +0 -1
- package/dist/computer-use/tool.d.ts +0 -154
- package/dist/computer-use/tool.d.ts.map +0 -1
- package/dist/computer-use/tool.js +0 -210
- package/dist/computer-use/tool.js.map +0 -1
- package/dist/continuation-validation.d.ts +0 -85
- package/dist/continuation-validation.d.ts.map +0 -1
- package/dist/continuation-validation.js +0 -166
- package/dist/continuation-validation.js.map +0 -1
- package/dist/conversation-persistence.d.ts +0 -46
- package/dist/conversation-persistence.d.ts.map +0 -1
- package/dist/conversation-persistence.js +0 -176
- package/dist/conversation-persistence.js.map +0 -1
- package/dist/conversation.d.ts +0 -11
- package/dist/conversation.d.ts.map +0 -1
- package/dist/conversation.js +0 -55
- package/dist/conversation.js.map +0 -1
- package/dist/eval/fixtures.d.ts +0 -65
- package/dist/eval/fixtures.d.ts.map +0 -1
- package/dist/eval/fixtures.js +0 -110
- package/dist/eval/fixtures.js.map +0 -1
- package/dist/eval/html-reporter.d.ts +0 -25
- package/dist/eval/html-reporter.d.ts.map +0 -1
- package/dist/eval/html-reporter.js +0 -209
- package/dist/eval/html-reporter.js.map +0 -1
- package/dist/eval/json-reporter.d.ts +0 -43
- package/dist/eval/json-reporter.d.ts.map +0 -1
- package/dist/eval/json-reporter.js +0 -40
- package/dist/eval/json-reporter.js.map +0 -1
- package/dist/facade.d.ts +0 -96
- package/dist/facade.d.ts.map +0 -1
- package/dist/facade.js +0 -146
- package/dist/facade.js.map +0 -1
- package/dist/fake.d.ts +0 -201
- package/dist/fake.d.ts.map +0 -1
- package/dist/fake.js +0 -428
- package/dist/fake.js.map +0 -1
- package/dist/file-search.d.ts +0 -168
- package/dist/file-search.d.ts.map +0 -1
- package/dist/file-search.js +0 -158
- package/dist/file-search.js.map +0 -1
- package/dist/files.d.ts +0 -27
- package/dist/files.d.ts.map +0 -1
- package/dist/files.js +0 -44
- package/dist/files.js.map +0 -1
- package/dist/gateway/http-gateway-adapter.d.ts +0 -94
- package/dist/gateway/http-gateway-adapter.d.ts.map +0 -1
- package/dist/gateway/http-gateway-adapter.js +0 -106
- package/dist/gateway/http-gateway-adapter.js.map +0 -1
- package/dist/gateway/sse.d.ts +0 -28
- package/dist/gateway/sse.d.ts.map +0 -1
- package/dist/gateway/sse.js +0 -78
- package/dist/gateway/sse.js.map +0 -1
- package/dist/handoff.d.ts +0 -95
- package/dist/handoff.d.ts.map +0 -1
- package/dist/handoff.js +0 -78
- package/dist/handoff.js.map +0 -1
- package/dist/handoffs-driver.d.ts +0 -58
- package/dist/handoffs-driver.d.ts.map +0 -1
- package/dist/handoffs-driver.js +0 -103
- package/dist/handoffs-driver.js.map +0 -1
- package/dist/image.d.ts +0 -40
- package/dist/image.d.ts.map +0 -1
- package/dist/image.js +0 -109
- package/dist/image.js.map +0 -1
- package/dist/mcp/client-tools.d.ts +0 -39
- package/dist/mcp/client-tools.d.ts.map +0 -1
- package/dist/mcp/client-tools.js +0 -147
- package/dist/mcp/client-tools.js.map +0 -1
- package/dist/mcp/server-from-agent.d.ts +0 -24
- package/dist/mcp/server-from-agent.d.ts.map +0 -1
- package/dist/mcp/server-from-agent.js +0 -113
- package/dist/mcp/server-from-agent.js.map +0 -1
- package/dist/mcp/types.d.ts +0 -64
- package/dist/mcp/types.d.ts.map +0 -1
- package/dist/mcp/types.js +0 -6
- package/dist/mcp/types.js.map +0 -1
- package/dist/memory-extract.d.ts +0 -60
- package/dist/memory-extract.d.ts.map +0 -1
- package/dist/memory-extract.js +0 -163
- package/dist/memory-extract.js.map +0 -1
- package/dist/memory-inject.d.ts +0 -39
- package/dist/memory-inject.d.ts.map +0 -1
- package/dist/memory-inject.js +0 -135
- package/dist/memory-inject.js.map +0 -1
- package/dist/memory.d.ts +0 -55
- package/dist/memory.d.ts.map +0 -1
- package/dist/memory.js +0 -132
- package/dist/memory.js.map +0 -1
- package/dist/middleware.d.ts +0 -18
- package/dist/middleware.d.ts.map +0 -1
- package/dist/middleware.js +0 -72
- package/dist/middleware.js.map +0 -1
- package/dist/node/attachment.d.ts +0 -6
- package/dist/node/attachment.d.ts.map +0 -1
- package/dist/node/attachment.js +0 -35
- package/dist/node/attachment.js.map +0 -1
- package/dist/node/transcription.d.ts +0 -4
- package/dist/node/transcription.d.ts.map +0 -1
- package/dist/node/transcription.js +0 -8
- package/dist/node/transcription.js.map +0 -1
- package/dist/output.d.ts +0 -22
- package/dist/output.d.ts.map +0 -1
- package/dist/output.js +0 -60
- package/dist/output.js.map +0 -1
- package/dist/provider-tools.d.ts +0 -87
- package/dist/provider-tools.d.ts.map +0 -1
- package/dist/provider-tools.js +0 -189
- package/dist/provider-tools.js.map +0 -1
- package/dist/providers/anthropic.d.ts +0 -24
- package/dist/providers/anthropic.d.ts.map +0 -1
- package/dist/providers/anthropic.js +0 -405
- package/dist/providers/anthropic.js.map +0 -1
- package/dist/providers/azure.d.ts +0 -13
- package/dist/providers/azure.d.ts.map +0 -1
- package/dist/providers/azure.js +0 -15
- package/dist/providers/azure.js.map +0 -1
- package/dist/providers/bedrock.d.ts +0 -75
- package/dist/providers/bedrock.d.ts.map +0 -1
- package/dist/providers/bedrock.js +0 -181
- package/dist/providers/bedrock.js.map +0 -1
- package/dist/providers/cohere.d.ts +0 -13
- package/dist/providers/cohere.d.ts.map +0 -1
- package/dist/providers/cohere.js +0 -87
- package/dist/providers/cohere.js.map +0 -1
- package/dist/providers/deepseek.d.ts +0 -12
- package/dist/providers/deepseek.d.ts.map +0 -1
- package/dist/providers/deepseek.js +0 -15
- package/dist/providers/deepseek.js.map +0 -1
- package/dist/providers/elevenlabs.d.ts +0 -98
- package/dist/providers/elevenlabs.d.ts.map +0 -1
- package/dist/providers/elevenlabs.js +0 -229
- package/dist/providers/elevenlabs.js.map +0 -1
- package/dist/providers/google-cache-registry.d.ts +0 -132
- package/dist/providers/google-cache-registry.d.ts.map +0 -1
- package/dist/providers/google-cache-registry.js +0 -209
- package/dist/providers/google-cache-registry.js.map +0 -1
- package/dist/providers/google.d.ts +0 -38
- package/dist/providers/google.d.ts.map +0 -1
- package/dist/providers/google.js +0 -903
- package/dist/providers/google.js.map +0 -1
- package/dist/providers/groq.d.ts +0 -12
- package/dist/providers/groq.d.ts.map +0 -1
- package/dist/providers/groq.js +0 -15
- package/dist/providers/groq.js.map +0 -1
- package/dist/providers/jina.d.ts +0 -13
- package/dist/providers/jina.d.ts.map +0 -1
- package/dist/providers/jina.js +0 -90
- package/dist/providers/jina.js.map +0 -1
- package/dist/providers/mistral.d.ts +0 -13
- package/dist/providers/mistral.d.ts.map +0 -1
- package/dist/providers/mistral.js +0 -46
- package/dist/providers/mistral.js.map +0 -1
- package/dist/providers/ollama.d.ts +0 -11
- package/dist/providers/ollama.d.ts.map +0 -1
- package/dist/providers/ollama.js +0 -15
- package/dist/providers/ollama.js.map +0 -1
- package/dist/providers/openai.d.ts +0 -79
- package/dist/providers/openai.d.ts.map +0 -1
- package/dist/providers/openai.js +0 -792
- package/dist/providers/openai.js.map +0 -1
- package/dist/providers/openrouter.d.ts +0 -43
- package/dist/providers/openrouter.d.ts.map +0 -1
- package/dist/providers/openrouter.js +0 -21
- package/dist/providers/openrouter.js.map +0 -1
- package/dist/providers/voyage.d.ts +0 -91
- package/dist/providers/voyage.d.ts.map +0 -1
- package/dist/providers/voyage.js +0 -166
- package/dist/providers/voyage.js.map +0 -1
- package/dist/providers/xai.d.ts +0 -12
- package/dist/providers/xai.d.ts.map +0 -1
- package/dist/providers/xai.js +0 -15
- package/dist/providers/xai.js.map +0 -1
- package/dist/queue-job.d.ts +0 -100
- package/dist/queue-job.d.ts.map +0 -1
- package/dist/queue-job.js +0 -185
- package/dist/queue-job.js.map +0 -1
- package/dist/react/agent-run.d.ts +0 -111
- package/dist/react/agent-run.d.ts.map +0 -1
- package/dist/react/agent-run.js +0 -107
- package/dist/react/agent-run.js.map +0 -1
- package/dist/react/useAgentRun.d.ts +0 -68
- package/dist/react/useAgentRun.d.ts.map +0 -1
- package/dist/react/useAgentRun.js +0 -125
- package/dist/react/useAgentRun.js.map +0 -1
- package/dist/registry.d.ts +0 -45
- package/dist/registry.d.ts.map +0 -1
- package/dist/registry.js +0 -131
- package/dist/registry.js.map +0 -1
- package/dist/rerank.d.ts +0 -20
- package/dist/rerank.d.ts.map +0 -1
- package/dist/rerank.js +0 -40
- package/dist/rerank.js.map +0 -1
- package/dist/resume-approval.d.ts +0 -30
- package/dist/resume-approval.d.ts.map +0 -1
- package/dist/resume-approval.js +0 -147
- package/dist/resume-approval.js.map +0 -1
- package/dist/sanitize-conversation.d.ts +0 -43
- package/dist/sanitize-conversation.d.ts.map +0 -1
- package/dist/sanitize-conversation.js +0 -85
- package/dist/sanitize-conversation.js.map +0 -1
- package/dist/scoped-tool.d.ts +0 -98
- package/dist/scoped-tool.d.ts.map +0 -1
- package/dist/scoped-tool.js +0 -174
- package/dist/scoped-tool.js.map +0 -1
- package/dist/server/provider.d.ts +0 -22
- package/dist/server/provider.d.ts.map +0 -1
- package/dist/server/provider.js +0 -194
- package/dist/server/provider.js.map +0 -1
- package/dist/similarity-search.d.ts +0 -163
- package/dist/similarity-search.d.ts.map +0 -1
- package/dist/similarity-search.js +0 -147
- package/dist/similarity-search.js.map +0 -1
- package/dist/sub-agent-run-store.d.ts +0 -157
- package/dist/sub-agent-run-store.d.ts.map +0 -1
- package/dist/sub-agent-run-store.js +0 -87
- package/dist/sub-agent-run-store.js.map +0 -1
- package/dist/tool-execution.d.ts +0 -16
- package/dist/tool-execution.d.ts.map +0 -1
- package/dist/tool-execution.js +0 -498
- package/dist/tool-execution.js.map +0 -1
- package/dist/tool-helpers.d.ts +0 -77
- package/dist/tool-helpers.d.ts.map +0 -1
- package/dist/tool-helpers.js +0 -117
- package/dist/tool-helpers.js.map +0 -1
- package/dist/tool.d.ts +0 -216
- package/dist/tool.d.ts.map +0 -1
- package/dist/tool.js +0 -175
- package/dist/tool.js.map +0 -1
- package/dist/transcription.d.ts +0 -42
- package/dist/transcription.d.ts.map +0 -1
- package/dist/transcription.js +0 -77
- package/dist/transcription.js.map +0 -1
- package/dist/types.d.ts +0 -1020
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
- package/dist/util/hash.d.ts +0 -11
- package/dist/util/hash.d.ts.map +0 -1
- package/dist/util/hash.js +0 -23
- package/dist/util/hash.js.map +0 -1
- package/dist/vector-stores/index.d.ts +0 -96
- package/dist/vector-stores/index.d.ts.map +0 -1
- package/dist/vector-stores/index.js +0 -153
- package/dist/vector-stores/index.js.map +0 -1
- package/dist/vercel-protocol.d.ts +0 -18
- package/dist/vercel-protocol.d.ts.map +0 -1
- package/dist/vercel-protocol.js +0 -75
- package/dist/vercel-protocol.js.map +0 -1
- package/dist/zod-to-json-schema.d.ts +0 -16
- package/dist/zod-to-json-schema.d.ts.map +0 -1
- package/dist/zod-to-json-schema.js +0 -17
- package/dist/zod-to-json-schema.js.map +0 -1
package/dist/fake.js
DELETED
|
@@ -1,428 +0,0 @@
|
|
|
1
|
-
import { AiRegistry } from './registry.js';
|
|
2
|
-
/**
|
|
3
|
-
* Testing fake for @rudderjs/ai.
|
|
4
|
-
*
|
|
5
|
-
* @example Single-response shorthand
|
|
6
|
-
* const fake = AiFake.fake()
|
|
7
|
-
* fake.respondWith('Mocked response')
|
|
8
|
-
*
|
|
9
|
-
* const response = await AI.prompt('Hello')
|
|
10
|
-
* assert.strictEqual(response.text, 'Mocked response')
|
|
11
|
-
*
|
|
12
|
-
* fake.assertPrompted(input => input.includes('Hello'))
|
|
13
|
-
* fake.restore()
|
|
14
|
-
*
|
|
15
|
-
* @example Multi-step sequence
|
|
16
|
-
* const fake = AiFake.fake()
|
|
17
|
-
* fake.respondWithSequence([
|
|
18
|
-
* { toolCalls: [{ id: 't1', name: 'lookup', arguments: { q: 'a' } }] },
|
|
19
|
-
* { text: 'Done.' },
|
|
20
|
-
* ])
|
|
21
|
-
*
|
|
22
|
-
* @example Forced failure
|
|
23
|
-
* const fake = AiFake.fake()
|
|
24
|
-
* fake.failOnStep(0, new Error('Rate limited'))
|
|
25
|
-
* // first provider call throws; useful for testing onError middleware
|
|
26
|
-
*/
|
|
27
|
-
export class AiFake {
|
|
28
|
-
calls = [];
|
|
29
|
-
imageCalls = [];
|
|
30
|
-
ttsCalls = [];
|
|
31
|
-
sttCalls = [];
|
|
32
|
-
embedCalls = [];
|
|
33
|
-
rerankCalls = [];
|
|
34
|
-
fileCalls = [];
|
|
35
|
-
_response = 'fake response';
|
|
36
|
-
_sequence = [];
|
|
37
|
-
_failures = new Map();
|
|
38
|
-
_preventStray = false;
|
|
39
|
-
_imageResponse = 'ZmFrZS1pbWFnZQ=='; // base64 of 'fake-image'
|
|
40
|
-
_ttsResponse = Buffer.from('fake-audio');
|
|
41
|
-
_sttResponse = 'fake transcription';
|
|
42
|
-
_embedResponse = [[0.1, 0.2, 0.3]];
|
|
43
|
-
_rerankResponse = { results: [] };
|
|
44
|
-
_fileUploadResponse = { id: 'fake-file-id', filename: 'fake.txt', bytes: 0 };
|
|
45
|
-
/** Set the text response the fake will return */
|
|
46
|
-
respondWith(text) {
|
|
47
|
-
this._response = text;
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Strict mode — throw when the agent makes a prompt the fake doesn't have a
|
|
51
|
-
* scripted response for.
|
|
52
|
-
*
|
|
53
|
-
* Without this, an unscripted prompt silently falls back to the ambient
|
|
54
|
-
* `respondWith` default (`'fake response'` if untouched). That behavior
|
|
55
|
-
* makes tests pass even when they accidentally trigger an extra prompt the
|
|
56
|
-
* test never asserted on.
|
|
57
|
-
*
|
|
58
|
-
* Under strict mode, only entries from {@link respondWithSequence} count
|
|
59
|
-
* as valid responses; the ambient `respondWith` default is **not used**.
|
|
60
|
-
* Force a single-step script via `respondWithSequence([{ text: '...' }])`
|
|
61
|
-
* if you need an exact-one-prompt test that still returns content.
|
|
62
|
-
*
|
|
63
|
-
* @example
|
|
64
|
-
* const fake = AiFake.fake().preventStrayPrompts()
|
|
65
|
-
* fake.respondWithSequence([{ text: 'expected reply' }])
|
|
66
|
-
*
|
|
67
|
-
* await new ChatAgent().prompt('hello') // OK
|
|
68
|
-
* await new ChatAgent().prompt('again') // throws — no second script entry
|
|
69
|
-
*/
|
|
70
|
-
preventStrayPrompts() {
|
|
71
|
-
this._preventStray = true;
|
|
72
|
-
return this;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Script a multi-step provider response. Each entry in `steps` corresponds
|
|
76
|
-
* to one provider call (the Nth `generate`/`stream` invocation consumes
|
|
77
|
-
* `steps[N]`). When the sequence is exhausted, subsequent calls fall back
|
|
78
|
-
* to {@link respondWith} (default: `'fake response'`).
|
|
79
|
-
*
|
|
80
|
-
* Pair with `tools` on an agent to drive a complete tool-call loop:
|
|
81
|
-
* step 0 emits `toolCalls`, step 1 returns the final assistant text.
|
|
82
|
-
*
|
|
83
|
-
* Calling this resets the sequence and the provider-call counter so
|
|
84
|
-
* scripted step indices are relative to this call. Registered failures
|
|
85
|
-
* (see {@link failOnStep}) are left intact, so the order in which you
|
|
86
|
-
* call `respondWithSequence` and `failOnStep` does not matter.
|
|
87
|
-
*/
|
|
88
|
-
respondWithSequence(steps) {
|
|
89
|
-
this._sequence = [...steps];
|
|
90
|
-
this.calls.length = 0;
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Force the Nth provider call to throw. Useful for testing failover
|
|
94
|
-
* (paired with multiple registered factories), error middleware, and
|
|
95
|
-
* `onError` hooks without a real network failure.
|
|
96
|
-
*
|
|
97
|
-
* The step index is 0-based and counts every `generate`/`stream` call
|
|
98
|
-
* the fake adapter receives. Failures take precedence over any scripted
|
|
99
|
-
* sequence at the same index — the sequence step is NOT consumed.
|
|
100
|
-
*/
|
|
101
|
-
failOnStep(stepIndex, error) {
|
|
102
|
-
this._failures.set(stepIndex, error);
|
|
103
|
-
}
|
|
104
|
-
/** Set the base64 image the fake will return */
|
|
105
|
-
respondWithImage(base64) {
|
|
106
|
-
this._imageResponse = base64;
|
|
107
|
-
}
|
|
108
|
-
/** Set the audio buffer the TTS fake will return */
|
|
109
|
-
respondWithAudio(audio) {
|
|
110
|
-
this._ttsResponse = audio;
|
|
111
|
-
}
|
|
112
|
-
/** Set the transcription text the STT fake will return */
|
|
113
|
-
respondWithTranscription(text) {
|
|
114
|
-
this._sttResponse = text;
|
|
115
|
-
}
|
|
116
|
-
/** Set the embeddings the fake will return */
|
|
117
|
-
respondWithEmbedding(embeddings) {
|
|
118
|
-
this._embedResponse = embeddings;
|
|
119
|
-
}
|
|
120
|
-
/** Set the reranking results the fake will return */
|
|
121
|
-
respondWithRanking(results) {
|
|
122
|
-
this._rerankResponse = { results };
|
|
123
|
-
}
|
|
124
|
-
/** Set the file upload result the fake will return */
|
|
125
|
-
respondWithFileUpload(result) {
|
|
126
|
-
this._fileUploadResponse = result;
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Stub a `fileSearch` interaction. The hosted-OpenAI path runs the
|
|
130
|
-
* search server-side and the result lands in the assistant message —
|
|
131
|
-
* no agent-loop tool round-trip — so the simplest fake is a single
|
|
132
|
-
* scripted response carrying the synthesized text.
|
|
133
|
-
*
|
|
134
|
-
* Pass `hits` to auto-format the text or pass `text` to control the
|
|
135
|
-
* exact assistant reply. `usage` flows through to budget middleware.
|
|
136
|
-
*
|
|
137
|
-
* @example
|
|
138
|
-
* fake.respondWithFileSearchResults({ text: 'The policy expires in 2027.' })
|
|
139
|
-
*
|
|
140
|
-
* @example
|
|
141
|
-
* fake.respondWithFileSearchResults({
|
|
142
|
-
* hits: [
|
|
143
|
-
* { text: 'Policies are reviewed annually.', source: 'policy.pdf', score: 0.92 },
|
|
144
|
-
* { text: 'The renewal date is March 1st.', source: 'renewal.pdf', score: 0.88 },
|
|
145
|
-
* ],
|
|
146
|
-
* })
|
|
147
|
-
*/
|
|
148
|
-
respondWithFileSearchResults(opts) {
|
|
149
|
-
const text = opts.text ?? formatFileSearchHits(opts.hits ?? []);
|
|
150
|
-
const step = { text };
|
|
151
|
-
if (opts.usage)
|
|
152
|
-
step.usage = opts.usage;
|
|
153
|
-
this.respondWithSequence([step]);
|
|
154
|
-
}
|
|
155
|
-
/** Install the fake — replaces all registered providers with a mock */
|
|
156
|
-
static fake() {
|
|
157
|
-
const fake = new AiFake();
|
|
158
|
-
const strayError = (stepIndex) => new Error(`[Rudder AI] Stray prompt: no scripted response at step ${stepIndex}. ` +
|
|
159
|
-
`Add an entry via respondWithSequence([...]) or remove preventStrayPrompts().`);
|
|
160
|
-
const adapter = {
|
|
161
|
-
async generate(opts) {
|
|
162
|
-
const stepIndex = fake.calls.length;
|
|
163
|
-
fake.calls.push(opts);
|
|
164
|
-
const failure = fake._failures.get(stepIndex);
|
|
165
|
-
if (failure)
|
|
166
|
-
throw failure;
|
|
167
|
-
const next = fake._sequence[stepIndex];
|
|
168
|
-
if (next) {
|
|
169
|
-
return {
|
|
170
|
-
message: {
|
|
171
|
-
role: 'assistant',
|
|
172
|
-
content: next.text ?? '',
|
|
173
|
-
...(next.toolCalls ? { toolCalls: next.toolCalls } : {}),
|
|
174
|
-
},
|
|
175
|
-
usage: next.usage ?? { promptTokens: 0, completionTokens: 0, totalTokens: 0 },
|
|
176
|
-
finishReason: next.finishReason ?? (next.toolCalls ? 'tool_calls' : 'stop'),
|
|
177
|
-
};
|
|
178
|
-
}
|
|
179
|
-
if (fake._preventStray)
|
|
180
|
-
throw strayError(stepIndex);
|
|
181
|
-
return {
|
|
182
|
-
message: { role: 'assistant', content: fake._response },
|
|
183
|
-
usage: { promptTokens: 0, completionTokens: 0, totalTokens: 0 },
|
|
184
|
-
finishReason: 'stop',
|
|
185
|
-
};
|
|
186
|
-
},
|
|
187
|
-
async *stream(opts) {
|
|
188
|
-
const stepIndex = fake.calls.length;
|
|
189
|
-
fake.calls.push(opts);
|
|
190
|
-
const failure = fake._failures.get(stepIndex);
|
|
191
|
-
if (failure)
|
|
192
|
-
throw failure;
|
|
193
|
-
const next = fake._sequence[stepIndex];
|
|
194
|
-
if (next) {
|
|
195
|
-
if (next.text)
|
|
196
|
-
yield { type: 'text-delta', text: next.text };
|
|
197
|
-
if (next.toolCalls) {
|
|
198
|
-
for (const tc of next.toolCalls)
|
|
199
|
-
yield { type: 'tool-call', toolCall: tc };
|
|
200
|
-
}
|
|
201
|
-
yield {
|
|
202
|
-
type: 'finish',
|
|
203
|
-
finishReason: next.finishReason ?? (next.toolCalls ? 'tool_calls' : 'stop'),
|
|
204
|
-
usage: next.usage ?? { promptTokens: 0, completionTokens: 0, totalTokens: 0 },
|
|
205
|
-
};
|
|
206
|
-
return;
|
|
207
|
-
}
|
|
208
|
-
if (fake._preventStray)
|
|
209
|
-
throw strayError(stepIndex);
|
|
210
|
-
yield { type: 'text-delta', text: fake._response };
|
|
211
|
-
yield { type: 'finish', finishReason: 'stop', usage: { promptTokens: 0, completionTokens: 0, totalTokens: 0 } };
|
|
212
|
-
},
|
|
213
|
-
};
|
|
214
|
-
const imageAdapter = {
|
|
215
|
-
async generate(opts) {
|
|
216
|
-
fake.imageCalls.push(opts);
|
|
217
|
-
return {
|
|
218
|
-
images: [{ base64: fake._imageResponse }],
|
|
219
|
-
model: opts.model ?? 'fake-image',
|
|
220
|
-
};
|
|
221
|
-
},
|
|
222
|
-
};
|
|
223
|
-
const ttsAdapter = {
|
|
224
|
-
async generate(opts) {
|
|
225
|
-
fake.ttsCalls.push(opts);
|
|
226
|
-
return {
|
|
227
|
-
audio: fake._ttsResponse,
|
|
228
|
-
format: opts.format ?? 'mp3',
|
|
229
|
-
model: opts.model ?? 'fake-tts',
|
|
230
|
-
};
|
|
231
|
-
},
|
|
232
|
-
};
|
|
233
|
-
const sttAdapter = {
|
|
234
|
-
async transcribe(opts) {
|
|
235
|
-
fake.sttCalls.push(opts);
|
|
236
|
-
return {
|
|
237
|
-
text: fake._sttResponse,
|
|
238
|
-
language: opts.language,
|
|
239
|
-
model: opts.model ?? 'fake-stt',
|
|
240
|
-
};
|
|
241
|
-
},
|
|
242
|
-
};
|
|
243
|
-
const embeddingAdapter = {
|
|
244
|
-
async embed(input, model) {
|
|
245
|
-
fake.embedCalls.push({ input, model });
|
|
246
|
-
const inputs = Array.isArray(input) ? input : [input];
|
|
247
|
-
const embeddings = inputs.map((_, i) => fake._embedResponse[i % fake._embedResponse.length]);
|
|
248
|
-
return {
|
|
249
|
-
embeddings,
|
|
250
|
-
usage: { promptTokens: 0, totalTokens: 0 },
|
|
251
|
-
};
|
|
252
|
-
},
|
|
253
|
-
};
|
|
254
|
-
const rerankingAdapter = {
|
|
255
|
-
async rerank(opts) {
|
|
256
|
-
fake.rerankCalls.push(opts);
|
|
257
|
-
return fake._rerankResponse;
|
|
258
|
-
},
|
|
259
|
-
};
|
|
260
|
-
const fileAdapter = {
|
|
261
|
-
async upload(opts) {
|
|
262
|
-
fake.fileCalls.push({ method: 'upload', args: opts });
|
|
263
|
-
return { ...fake._fileUploadResponse, filename: opts.filePath.split('/').pop() ?? fake._fileUploadResponse.filename };
|
|
264
|
-
},
|
|
265
|
-
async list() {
|
|
266
|
-
fake.fileCalls.push({ method: 'list', args: {} });
|
|
267
|
-
return { files: [fake._fileUploadResponse] };
|
|
268
|
-
},
|
|
269
|
-
async delete(fileId) {
|
|
270
|
-
fake.fileCalls.push({ method: 'delete', args: fileId });
|
|
271
|
-
},
|
|
272
|
-
async retrieve(fileId) {
|
|
273
|
-
fake.fileCalls.push({ method: 'retrieve', args: fileId });
|
|
274
|
-
return { data: Buffer.from('fake-content'), mimeType: 'application/octet-stream' };
|
|
275
|
-
},
|
|
276
|
-
};
|
|
277
|
-
const factory = {
|
|
278
|
-
name: '__fake__',
|
|
279
|
-
create: () => adapter,
|
|
280
|
-
createEmbedding: () => embeddingAdapter,
|
|
281
|
-
createImage: () => imageAdapter,
|
|
282
|
-
createTts: () => ttsAdapter,
|
|
283
|
-
createStt: () => sttAdapter,
|
|
284
|
-
createReranking: () => rerankingAdapter,
|
|
285
|
-
createFiles: () => fileAdapter,
|
|
286
|
-
};
|
|
287
|
-
AiRegistry.reset();
|
|
288
|
-
AiRegistry.register(factory);
|
|
289
|
-
AiRegistry.setDefault('__fake__/default');
|
|
290
|
-
return fake;
|
|
291
|
-
}
|
|
292
|
-
/** Assert at least one prompt was sent, optionally matching a predicate */
|
|
293
|
-
assertPrompted(predicate) {
|
|
294
|
-
if (this.calls.length === 0)
|
|
295
|
-
throw new Error('[Rudder AI] Expected at least one prompt, but none were sent.');
|
|
296
|
-
if (predicate) {
|
|
297
|
-
const match = this.calls.some(c => {
|
|
298
|
-
const userMsg = c.messages.find(m => m.role === 'user');
|
|
299
|
-
if (!userMsg)
|
|
300
|
-
return false;
|
|
301
|
-
const text = typeof userMsg.content === 'string' ? userMsg.content : userMsg.content.filter(p => p.type === 'text').map(p => p.text).join('');
|
|
302
|
-
return predicate(text);
|
|
303
|
-
});
|
|
304
|
-
if (!match)
|
|
305
|
-
throw new Error('[Rudder AI] No prompt matched the predicate.');
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
/** Assert no prompts were sent */
|
|
309
|
-
assertNothingPrompted() {
|
|
310
|
-
if (this.calls.length > 0) {
|
|
311
|
-
throw new Error(`[Rudder AI] Expected no prompts, but ${this.calls.length} were sent.`);
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
/** Assert at least one image generation was made */
|
|
315
|
-
assertImageGenerated(predicate) {
|
|
316
|
-
if (this.imageCalls.length === 0)
|
|
317
|
-
throw new Error('[Rudder AI] Expected at least one image generation, but none were made.');
|
|
318
|
-
if (predicate) {
|
|
319
|
-
const match = this.imageCalls.some(c => predicate(c.prompt));
|
|
320
|
-
if (!match)
|
|
321
|
-
throw new Error('[Rudder AI] No image generation matched the predicate.');
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
/** Assert at least one TTS generation was made */
|
|
325
|
-
assertAudioGenerated(predicate) {
|
|
326
|
-
if (this.ttsCalls.length === 0)
|
|
327
|
-
throw new Error('[Rudder AI] Expected at least one audio generation, but none were made.');
|
|
328
|
-
if (predicate) {
|
|
329
|
-
const match = this.ttsCalls.some(c => predicate(c.text));
|
|
330
|
-
if (!match)
|
|
331
|
-
throw new Error('[Rudder AI] No audio generation matched the predicate.');
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
/** Assert at least one transcription was made */
|
|
335
|
-
assertTranscribed(predicate) {
|
|
336
|
-
if (this.sttCalls.length === 0)
|
|
337
|
-
throw new Error('[Rudder AI] Expected at least one transcription, but none were made.');
|
|
338
|
-
if (predicate) {
|
|
339
|
-
const match = this.sttCalls.some(c => predicate(c));
|
|
340
|
-
if (!match)
|
|
341
|
-
throw new Error('[Rudder AI] No transcription matched the predicate.');
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
/** Get all recorded provider calls */
|
|
345
|
-
getCalls() {
|
|
346
|
-
return [...this.calls];
|
|
347
|
-
}
|
|
348
|
-
/** Get all recorded image generation calls */
|
|
349
|
-
getImageCalls() {
|
|
350
|
-
return [...this.imageCalls];
|
|
351
|
-
}
|
|
352
|
-
/** Get all recorded TTS calls */
|
|
353
|
-
getTtsCalls() {
|
|
354
|
-
return [...this.ttsCalls];
|
|
355
|
-
}
|
|
356
|
-
/** Get all recorded STT calls */
|
|
357
|
-
getSttCalls() {
|
|
358
|
-
return [...this.sttCalls];
|
|
359
|
-
}
|
|
360
|
-
/** Assert at least one embedding was made */
|
|
361
|
-
assertEmbedded(predicate) {
|
|
362
|
-
if (this.embedCalls.length === 0)
|
|
363
|
-
throw new Error('[Rudder AI] Expected at least one embedding, but none were made.');
|
|
364
|
-
if (predicate) {
|
|
365
|
-
const match = this.embedCalls.some(c => predicate(c.input));
|
|
366
|
-
if (!match)
|
|
367
|
-
throw new Error('[Rudder AI] No embedding matched the predicate.');
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
/** Assert at least one reranking was made */
|
|
371
|
-
assertReranked(predicate) {
|
|
372
|
-
if (this.rerankCalls.length === 0)
|
|
373
|
-
throw new Error('[Rudder AI] Expected at least one reranking, but none were made.');
|
|
374
|
-
if (predicate) {
|
|
375
|
-
const match = this.rerankCalls.some(c => predicate(c));
|
|
376
|
-
if (!match)
|
|
377
|
-
throw new Error('[Rudder AI] No reranking matched the predicate.');
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
/** Get all recorded embedding calls */
|
|
381
|
-
getEmbedCalls() {
|
|
382
|
-
return [...this.embedCalls];
|
|
383
|
-
}
|
|
384
|
-
/** Get all recorded reranking calls */
|
|
385
|
-
getRerankCalls() {
|
|
386
|
-
return [...this.rerankCalls];
|
|
387
|
-
}
|
|
388
|
-
/** Assert at least one file upload was made */
|
|
389
|
-
assertFileUploaded(predicate) {
|
|
390
|
-
const uploads = this.fileCalls.filter(c => c.method === 'upload');
|
|
391
|
-
if (uploads.length === 0)
|
|
392
|
-
throw new Error('[Rudder AI] Expected at least one file upload, but none were made.');
|
|
393
|
-
if (predicate) {
|
|
394
|
-
const match = uploads.some(c => predicate(c.args.filePath));
|
|
395
|
-
if (!match)
|
|
396
|
-
throw new Error('[Rudder AI] No file upload matched the predicate.');
|
|
397
|
-
}
|
|
398
|
-
}
|
|
399
|
-
/** Get all recorded file operation calls */
|
|
400
|
-
getFileCalls() {
|
|
401
|
-
return [...this.fileCalls];
|
|
402
|
-
}
|
|
403
|
-
/** Restore — clears the fake (user must re-register real providers) */
|
|
404
|
-
restore() {
|
|
405
|
-
AiRegistry.reset();
|
|
406
|
-
}
|
|
407
|
-
}
|
|
408
|
-
/**
|
|
409
|
-
* Render canned file-search hits into a prose assistant reply for
|
|
410
|
-
* {@link AiFake.respondWithFileSearchResults}. Keeps tests readable
|
|
411
|
-
* without each app having to ad-hoc its own formatter.
|
|
412
|
-
*/
|
|
413
|
-
function formatFileSearchHits(hits) {
|
|
414
|
-
if (hits.length === 0)
|
|
415
|
-
return 'No relevant documents found.';
|
|
416
|
-
return hits
|
|
417
|
-
.map(h => {
|
|
418
|
-
const parts = [];
|
|
419
|
-
if (h.score !== undefined)
|
|
420
|
-
parts.push(`(${h.score.toFixed(2)})`);
|
|
421
|
-
parts.push(h.text);
|
|
422
|
-
if (h.source)
|
|
423
|
-
parts.push(`— ${h.source}`);
|
|
424
|
-
return parts.join(' ');
|
|
425
|
-
})
|
|
426
|
-
.join('\n');
|
|
427
|
-
}
|
|
428
|
-
//# sourceMappingURL=fake.js.map
|
package/dist/fake.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fake.js","sourceRoot":"","sources":["../src/fake.ts"],"names":[],"mappings":"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"}
|
package/dist/file-search.d.ts
DELETED
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `fileSearch({ stores, where?, maxResults?, name?, description? })` — agent
|
|
3
|
-
* tool factory for hosted vector-store retrieval (#B8 Phase 2).
|
|
4
|
-
*
|
|
5
|
-
* Wraps OpenAI's native `file_search` tool. The tool object is tagged with
|
|
6
|
-
* `providerHint: { type: 'file-search', ... }`; the OpenAI adapter's
|
|
7
|
-
* `toOpenAITools` recognizes the hint and emits the native
|
|
8
|
-
* `{ type: 'file_search', vector_store_ids, filters, max_num_results }`
|
|
9
|
-
* block instead of a generic function-call shape. The model runs the search
|
|
10
|
-
* server-side and the results land in the assistant message — no agent-loop
|
|
11
|
-
* tool round-trip on the hosted path.
|
|
12
|
-
*
|
|
13
|
-
* # Hosted on OpenAI today
|
|
14
|
-
*
|
|
15
|
-
* Other providers see the tool as a regular function-call tool with the
|
|
16
|
-
* placeholder `{ query: string }` schema — without an `execute` they pause
|
|
17
|
-
* for client tools, which is degraded. Phase 3 will add a `fallback` opt
|
|
18
|
-
* that installs an `execute` delegating to `similaritySearch` over a local
|
|
19
|
-
* pgvector model.
|
|
20
|
-
*
|
|
21
|
-
* # Wiring
|
|
22
|
-
*
|
|
23
|
-
* ```ts
|
|
24
|
-
* import { Agent, fileSearch, VectorStores } from '@rudderjs/ai'
|
|
25
|
-
*
|
|
26
|
-
* const kb = await VectorStores.get('vs_abc123')
|
|
27
|
-
*
|
|
28
|
-
* class SupportAgent extends Agent {
|
|
29
|
-
* model() { return 'openai/gpt-4o' }
|
|
30
|
-
* tools() {
|
|
31
|
-
* return [
|
|
32
|
-
* fileSearch({
|
|
33
|
-
* stores: [kb.id],
|
|
34
|
-
* where: { author: 'Alice', year: 2026 },
|
|
35
|
-
* maxResults: 10,
|
|
36
|
-
* }),
|
|
37
|
-
* ]
|
|
38
|
-
* }
|
|
39
|
-
* }
|
|
40
|
-
* ```
|
|
41
|
-
*
|
|
42
|
-
* # Metadata filter sugar
|
|
43
|
-
*
|
|
44
|
-
* `where: { author: 'Alice', year: 2026 }` is shorthand for the typed
|
|
45
|
-
* OpenAI filter shape `{ type: 'and', filters: [{ type: 'eq', key: 'author',
|
|
46
|
-
* value: 'Alice' }, { type: 'eq', key: 'year', value: 2026 }] }`. Either
|
|
47
|
-
* shape works — pass the typed object form for `gt` / `lt` / `or`.
|
|
48
|
-
*/
|
|
49
|
-
import type { SimilaritySearchOptions } from './similarity-search.js';
|
|
50
|
-
import type { Tool, ToolDefinitionOptions, ToolDefinitionSchema } from './types.js';
|
|
51
|
-
/**
|
|
52
|
-
* Symbol-tagged marker identifying a file-search tool. Mirrors the
|
|
53
|
-
* `COMPUTER_USE_MARKER` pattern — `Symbol.for(...)` so cross-bundle /
|
|
54
|
-
* cross-realm checks succeed even when `@rudderjs/ai` loads twice.
|
|
55
|
-
*/
|
|
56
|
-
export declare const FILE_SEARCH_MARKER: unique symbol;
|
|
57
|
-
/**
|
|
58
|
-
* Default tool name. OpenAI's native `file_search` tool expects calls to
|
|
59
|
-
* land on a tool literally named `file_search` — the model is trained on
|
|
60
|
-
* that identifier. Apps can override via `opts.name` but usually shouldn't.
|
|
61
|
-
*/
|
|
62
|
-
export declare const FILE_SEARCH_TOOL_NAME = "file_search";
|
|
63
|
-
/** OpenAI vector-store metadata filter, typed form. */
|
|
64
|
-
export type FileSearchFilter = {
|
|
65
|
-
type: 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte';
|
|
66
|
-
key: string;
|
|
67
|
-
value: string | number | boolean;
|
|
68
|
-
} | {
|
|
69
|
-
type: 'and' | 'or';
|
|
70
|
-
filters: FileSearchFilter[];
|
|
71
|
-
};
|
|
72
|
-
/** Sugar shape for `where` — `{ key: value }` pairs lowered to a typed `and` of `eq` filters. */
|
|
73
|
-
export type FileSearchWhereSugar = Record<string, string | number | boolean>;
|
|
74
|
-
/**
|
|
75
|
-
* Local pgvector fallback configuration (#B8 Phase 3). When set, the tool
|
|
76
|
-
* gains an `execute` that delegates to {@link similaritySearch} against
|
|
77
|
-
* the supplied Model. Forwards every {@link SimilaritySearchOptions} field
|
|
78
|
-
* except `name` / `description` (those flow from the outer `fileSearch`
|
|
79
|
-
* call so the agent prompt stays identical across providers).
|
|
80
|
-
*/
|
|
81
|
-
export type FileSearchFallback<TInstance = unknown> = Omit<SimilaritySearchOptions<TInstance>, 'name' | 'description'>;
|
|
82
|
-
export interface FileSearchOptions<TInstance = unknown> {
|
|
83
|
-
/**
|
|
84
|
-
* Vector-store IDs the model should search. At least one required.
|
|
85
|
-
* Mixing providers (e.g. an OpenAI `vs_...` id with a Gemini cached-
|
|
86
|
-
* content id) is not supported in v1 — every id must come from the
|
|
87
|
-
* agent's configured provider.
|
|
88
|
-
*/
|
|
89
|
-
stores: string[];
|
|
90
|
-
/**
|
|
91
|
-
* Metadata filter applied server-side. Accepts either the sugar
|
|
92
|
-
* `{ key: value }` form (lowered to an `and` of `eq` filters) or the
|
|
93
|
-
* typed {@link FileSearchFilter} shape directly.
|
|
94
|
-
*/
|
|
95
|
-
where?: FileSearchWhereSugar | FileSearchFilter;
|
|
96
|
-
/** Maximum number of result chunks to return. Provider default applies when unset. */
|
|
97
|
-
maxResults?: number;
|
|
98
|
-
/** Override the tool name. Defaults to {@link FILE_SEARCH_TOOL_NAME}. */
|
|
99
|
-
name?: string;
|
|
100
|
-
/** Override the tool description shown to the model. Defaults to a generic phrasing. */
|
|
101
|
-
description?: string;
|
|
102
|
-
/**
|
|
103
|
-
* Local pgvector fallback (#B8 Phase 3). When set, the returned tool gains
|
|
104
|
-
* an `execute` that delegates to `similaritySearch` for providers that
|
|
105
|
-
* don't recognize the `'file-search'` `providerHint`.
|
|
106
|
-
*
|
|
107
|
-
* The cascade is automatic. On OpenAI the adapter emits the native
|
|
108
|
-
* `file_search` block — the search runs server-side, the model never
|
|
109
|
-
* invokes the function-call tool, and `execute` is dead weight. On any
|
|
110
|
-
* other provider (Anthropic, Gemini today, others) the tool serializes
|
|
111
|
-
* as a regular function-call schema, the model calls it, and `execute`
|
|
112
|
-
* delegates to `similaritySearch` against the local pgvector model.
|
|
113
|
-
*
|
|
114
|
-
* Same agent prompt across hosted and self-hosted RAG — ops can swap
|
|
115
|
-
* deployment targets without retraining.
|
|
116
|
-
*
|
|
117
|
-
* @example
|
|
118
|
-
* ```ts
|
|
119
|
-
* fileSearch({
|
|
120
|
-
* stores: [vs_id],
|
|
121
|
-
* fallback: {
|
|
122
|
-
* model: Document,
|
|
123
|
-
* column: 'embedding',
|
|
124
|
-
* embedWith: 'openai/text-embedding-3-small',
|
|
125
|
-
* },
|
|
126
|
-
* })
|
|
127
|
-
* ```
|
|
128
|
-
*/
|
|
129
|
-
fallback?: FileSearchFallback<TInstance>;
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* A `fileSearch` tool. Implements {@link Tool}; carries
|
|
133
|
-
* {@link FILE_SEARCH_MARKER} for typeguarding.
|
|
134
|
-
*
|
|
135
|
-
* `execute` is absent on the hosted-only path (no `fallback` opt) — the
|
|
136
|
-
* provider runs the search natively and the model gets results back
|
|
137
|
-
* inline. With a `fallback` opt configured (#B8 Phase 3), `execute` is
|
|
138
|
-
* present and delegates to `similaritySearch` so non-native providers
|
|
139
|
-
* (Anthropic, Gemini today, others) get a working RAG path against a
|
|
140
|
-
* local pgvector model.
|
|
141
|
-
*/
|
|
142
|
-
export interface FileSearchTool extends Tool<{
|
|
143
|
-
query: string;
|
|
144
|
-
}, unknown> {
|
|
145
|
-
readonly [FILE_SEARCH_MARKER]: true;
|
|
146
|
-
readonly definition: ToolDefinitionOptions;
|
|
147
|
-
toSchema(): ToolDefinitionSchema;
|
|
148
|
-
}
|
|
149
|
-
/** Build the agent tool. See module JSDoc for usage. */
|
|
150
|
-
export declare function fileSearch<TInstance = unknown>(opts: FileSearchOptions<TInstance>): FileSearchTool;
|
|
151
|
-
/**
|
|
152
|
-
* Structural typeguard. Mirrors `isComputerUseTool` / `isHandoffTool` —
|
|
153
|
-
* tools are plain objects tagged with `Symbol.for(...)` markers so the
|
|
154
|
-
* loop and adapters can detect them without coupling to a class.
|
|
155
|
-
*/
|
|
156
|
-
export declare function isFileSearchTool(t: unknown): t is FileSearchTool;
|
|
157
|
-
/**
|
|
158
|
-
* Lower the user-friendly `where` shape to OpenAI's typed filter object.
|
|
159
|
-
*
|
|
160
|
-
* - `{ author: 'Alice', year: 2026 }` → `{ type: 'and', filters: [eq, eq] }`
|
|
161
|
-
* - `{ type: 'eq' | ... }` → pass-through
|
|
162
|
-
* - `{ type: 'and' | 'or', filters }` → pass-through
|
|
163
|
-
*
|
|
164
|
-
* A single-key sugar object short-circuits to the bare `eq` (no `and`
|
|
165
|
-
* wrapper), matching OpenAI's recommended shape.
|
|
166
|
-
*/
|
|
167
|
-
export declare function normalizeWhere(where: FileSearchWhereSugar | FileSearchFilter): FileSearchFilter;
|
|
168
|
-
//# sourceMappingURL=file-search.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"file-search.d.ts","sourceRoot":"","sources":["../src/file-search.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AAKH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AACrE,OAAO,KAAK,EAAgB,IAAI,EAAE,qBAAqB,EAAE,oBAAoB,EAAiB,MAAM,YAAY,CAAA;AAEhH;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,OAAO,MAA8C,CAAA;AAEtF;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,gBAAgB,CAAA;AAMlD,uDAAuD;AACvD,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;CAAE,GAClG;IAAE,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,gBAAgB,EAAE,CAAA;CAAE,CAAA;AAEvD,iGAAiG;AACjG,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAA;AAE5E;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,CAAC,SAAS,GAAG,OAAO,IAChD,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC,CAAA;AAElE,MAAM,WAAW,iBAAiB,CAAC,SAAS,GAAG,OAAO;IACpD;;;;;OAKG;IACH,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB;;;;OAIG;IACH,KAAK,CAAC,EAAE,oBAAoB,GAAG,gBAAgB,CAAA;IAC/C,sFAAsF;IACtF,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,yEAAyE;IACzE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,wFAAwF;IACxF,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,QAAQ,CAAC,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAA;CACzC;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,cAAe,SAAQ,IAAI,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,CAAC;IACtE,QAAQ,CAAC,CAAC,kBAAkB,CAAC,EAAE,IAAI,CAAA;IACnC,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAA;IAC1C,QAAQ,IAAI,oBAAoB,CAAA;CACjC;AAED,wDAAwD;AACxD,wBAAgB,UAAU,CAAC,SAAS,GAAG,OAAO,EAAE,IAAI,EAAE,iBAAiB,CAAC,SAAS,CAAC,GAAG,cAAc,CA4DlG;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,cAAc,CAIhE;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,oBAAoB,GAAG,gBAAgB,GAAG,gBAAgB,CAS/F"}
|