@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/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,kBAAkB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,79 +1,5 @@
|
|
|
1
|
-
// @rudderjs/ai
|
|
2
|
-
//
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export { AiRegistry } from './registry.js';
|
|
6
|
-
// Providers
|
|
7
|
-
export { AnthropicProvider } from './providers/anthropic.js';
|
|
8
|
-
export { OpenAIProvider, OpenAIAdapter } from './providers/openai.js';
|
|
9
|
-
export { GoogleProvider } from './providers/google.js';
|
|
10
|
-
export { OllamaProvider } from './providers/ollama.js';
|
|
11
|
-
export { DeepSeekProvider } from './providers/deepseek.js';
|
|
12
|
-
export { XaiProvider } from './providers/xai.js';
|
|
13
|
-
export { GroqProvider } from './providers/groq.js';
|
|
14
|
-
export { MistralProvider } from './providers/mistral.js';
|
|
15
|
-
export { AzureOpenAIProvider } from './providers/azure.js';
|
|
16
|
-
export { CohereProvider } from './providers/cohere.js';
|
|
17
|
-
export { JinaProvider } from './providers/jina.js';
|
|
18
|
-
export { ElevenLabsProvider, DEFAULT_TTS_MODEL_ID, DEFAULT_VOICE_ID } from './providers/elevenlabs.js';
|
|
19
|
-
export { VoyageProvider } from './providers/voyage.js';
|
|
20
|
-
export { OpenRouterProvider } from './providers/openrouter.js';
|
|
21
|
-
export { BedrockProvider } from './providers/bedrock.js';
|
|
22
|
-
// Tools
|
|
23
|
-
export { toolDefinition, dynamicTool, ToolBuilder, toolToSchema, pauseForClientTools, isPauseForClientToolsChunk, pauseForApproval, isPauseForApprovalChunk, } from './tool.js';
|
|
24
|
-
export { zodToJsonSchema } from './zod-to-json-schema.js';
|
|
25
|
-
// Scoped / multi-capability tools — collapse a discriminated union of
|
|
26
|
-
// capability branches into one flat function-call schema.
|
|
27
|
-
export { scopedTool, capability, flattenCapabilities, ScopedToolError } from './scoped-tool.js';
|
|
28
|
-
// Handoffs
|
|
29
|
-
export { handoff, isHandoffTool } from './handoff.js';
|
|
30
|
-
// Agent
|
|
31
|
-
export { Agent, ConversableAgent, agent, stepCountIs, hasToolCall, setConversationStore, setUserMemory, resolveUserMemory } from './agent.js';
|
|
32
|
-
export { QueuedPromptBuilder } from './queue-job.js';
|
|
33
|
-
// Middleware
|
|
34
|
-
export { runOnConfig, runOnChunk, runOnBeforeToolCall, runOnAfterToolCall, runSequential, runOnUsage, runOnAbort, runOnError } from './middleware.js';
|
|
35
|
-
// Structured Output
|
|
36
|
-
export { Output } from './output.js';
|
|
37
|
-
// Conversation
|
|
38
|
-
export { MemoryConversationStore } from './conversation.js';
|
|
39
|
-
export { sanitizeConversation } from './sanitize-conversation.js';
|
|
40
|
-
export { validateContinuation, assertValidContinuation, defaultContinuationValidator, ContinuationValidationError, } from './continuation-validation.js';
|
|
41
|
-
// User Memory (#A4)
|
|
42
|
-
export { MemoryUserMemory, resolveRemembersSpec } from './memory.js';
|
|
43
|
-
export { withMemoryInject } from './memory-inject.js';
|
|
44
|
-
export { withMemoryExtract } from './memory-extract.js';
|
|
45
|
-
// Sub-agent run store (asTool streaming + suspend)
|
|
46
|
-
export { InMemorySubAgentRunStore, CachedSubAgentRunStore, } from './sub-agent-run-store.js';
|
|
47
|
-
// Standalone agent run store (top-level stream() client-tool / approval pauses)
|
|
48
|
-
export { InMemoryAgentRunStore, CachedAgentRunStore, newAgentRunId, } from './agent-run-store.js';
|
|
49
|
-
// Facade
|
|
50
|
-
export { AI } from './facade.js';
|
|
51
|
-
// Image Generation
|
|
52
|
-
export { ImageGenerator } from './image.js';
|
|
53
|
-
// Audio (TTS & STT)
|
|
54
|
-
export { AudioGenerator } from './audio.js';
|
|
55
|
-
export { Transcription } from './transcription.js';
|
|
56
|
-
// Provider Tools
|
|
57
|
-
export { WebSearch, WebFetch, CodeExecution } from './provider-tools.js';
|
|
58
|
-
// Vercel AI Protocol
|
|
59
|
-
export { toVercelDataStream, toVercelResponse } from './vercel-protocol.js';
|
|
60
|
-
export { toAgentSseStream, toAgentSseResponse, readAgentStream, applyAgentSseEvent, newAgentStreamTurn, } from './agent-sse.js';
|
|
61
|
-
// Reranking
|
|
62
|
-
export { Reranker } from './rerank.js';
|
|
63
|
-
// File Management
|
|
64
|
-
export { FileManager } from './files.js';
|
|
65
|
-
// Hosted Vector Stores (#B8 Phase 1)
|
|
66
|
-
export { VectorStores, VectorStore } from './vector-stores/index.js';
|
|
67
|
-
// File Search agent tool (#B8 Phase 2 — provider-native RAG)
|
|
68
|
-
export { fileSearch, isFileSearchTool, FILE_SEARCH_MARKER, FILE_SEARCH_TOOL_NAME, normalizeWhere } from './file-search.js';
|
|
69
|
-
// Cached Embeddings
|
|
70
|
-
export { CachedEmbeddingAdapter } from './cached-embedding.js';
|
|
71
|
-
// Similarity Search (#B7 Phase 2 — agent tool wrapping ORM vector primitives)
|
|
72
|
-
export { similaritySearch } from './similarity-search.js';
|
|
73
|
-
// Budget / pricing (#A6 — full pricing catalog + per-user spend caps)
|
|
74
|
-
export { ModelPricing, estimateCost, assertKnownModelPricing, UnknownModelPricingError, BudgetExceededError, } from './budget/pricing.js';
|
|
75
|
-
export { memoryBudgetStorage, periodKey, } from './budget/storage.js';
|
|
76
|
-
export { withBudget } from './budget/with-budget.js';
|
|
77
|
-
// Testing
|
|
78
|
-
export { AiFake } from './fake.js';
|
|
1
|
+
// @rudderjs/ai is deprecated. The AI engine now lives in @gemstack/ai-sdk.
|
|
2
|
+
// This module re-exports it for backwards compatibility; import from
|
|
3
|
+
// '@gemstack/ai-sdk' directly in new code.
|
|
4
|
+
export * from '@gemstack/ai-sdk';
|
|
79
5
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,qEAAqE;AACrE,2CAA2C;AAC3C,cAAc,kBAAkB,CAAA"}
|
package/dist/mcp/index.d.ts
CHANGED
|
@@ -1,16 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* `@rudderjs/ai/mcp` — bridge between `@rudderjs/ai` Agents and Model Context
|
|
3
|
-
* Protocol servers. Two connectors:
|
|
4
|
-
*
|
|
5
|
-
* - {@link mcpClientTools} — consume a remote MCP server's tools as Agent tools
|
|
6
|
-
* - {@link mcpServerFromAgent} — expose an Agent as an MCP server external
|
|
7
|
-
* clients (Claude Desktop, Cursor, etc.) can call
|
|
8
|
-
*
|
|
9
|
-
* Requires `@modelcontextprotocol/sdk` at runtime — declared as an optional
|
|
10
|
-
* peer dependency. Apps that don't import this subpath aren't forced to
|
|
11
|
-
* install it.
|
|
12
|
-
*/
|
|
13
|
-
export { mcpClientTools } from './client-tools.js';
|
|
14
|
-
export { mcpServerFromAgent } from './server-from-agent.js';
|
|
15
|
-
export type { McpClientTransport, McpClientToolsOptions, McpServerFromAgentOptions, StdioServerSpawn, } from './types.js';
|
|
1
|
+
export * from '@gemstack/ai-sdk/mcp';
|
|
16
2
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/mcp/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAGA,cAAc,sBAAsB,CAAA"}
|
package/dist/mcp/index.js
CHANGED
|
@@ -1,15 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
*
|
|
5
|
-
* - {@link mcpClientTools} — consume a remote MCP server's tools as Agent tools
|
|
6
|
-
* - {@link mcpServerFromAgent} — expose an Agent as an MCP server external
|
|
7
|
-
* clients (Claude Desktop, Cursor, etc.) can call
|
|
8
|
-
*
|
|
9
|
-
* Requires `@modelcontextprotocol/sdk` at runtime — declared as an optional
|
|
10
|
-
* peer dependency. Apps that don't import this subpath aren't forced to
|
|
11
|
-
* install it.
|
|
12
|
-
*/
|
|
13
|
-
export { mcpClientTools } from './client-tools.js';
|
|
14
|
-
export { mcpServerFromAgent } from './server-from-agent.js';
|
|
1
|
+
// @rudderjs/ai is deprecated. The AI engine now lives in @gemstack/ai-sdk.
|
|
2
|
+
// This module re-exports it for backwards compatibility; import from
|
|
3
|
+
// '@gemstack/ai-sdk/mcp' directly in new code.
|
|
4
|
+
export * from '@gemstack/ai-sdk/mcp';
|
|
15
5
|
//# sourceMappingURL=index.js.map
|
package/dist/mcp/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,qEAAqE;AACrE,+CAA+C;AAC/C,cAAc,sBAAsB,CAAA"}
|
|
@@ -1,121 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* `@rudderjs/ai/memory-embedding` — embedding-backed {@link UserMemory}
|
|
3
|
-
* for #A4 Phase 5.
|
|
4
|
-
*
|
|
5
|
-
* Composes Phase 4's {@link OrmUserMemory} with the embedding
|
|
6
|
-
* provider registered on {@link AiRegistry}: `remember()` embeds the
|
|
7
|
-
* fact and writes the Float32-packed vector into the row's
|
|
8
|
-
* `embedding` column; `recall()` embeds the query and ranks by
|
|
9
|
-
* cosine similarity. `forget()` / `forgetAll()` delegate to the
|
|
10
|
-
* inner store — the embedding lives in the same row, so deleting
|
|
11
|
-
* the row deletes the vector. GDPR right-to-be-forgotten cascades
|
|
12
|
-
* automatically.
|
|
13
|
-
*
|
|
14
|
-
* v1 is **pure-JS cosine over the user's full set** — fine up to
|
|
15
|
-
* a few thousand facts per user. For larger workloads, B7 lands a
|
|
16
|
-
* pgvector-backed `EmbeddingUserMemory` that pushes the dot-product
|
|
17
|
-
* into the database.
|
|
18
|
-
*
|
|
19
|
-
* @example
|
|
20
|
-
* ```ts
|
|
21
|
-
* import { OrmUserMemory } from '@rudderjs/ai/memory-orm'
|
|
22
|
-
* import { EmbeddingUserMemory } from '@rudderjs/ai/memory-embedding'
|
|
23
|
-
*
|
|
24
|
-
* const memory = new EmbeddingUserMemory({
|
|
25
|
-
* inner: new OrmUserMemory(),
|
|
26
|
-
* model: 'openai/text-embedding-3-small',
|
|
27
|
-
* threshold: 0.5, // cosine floor; matches below are dropped
|
|
28
|
-
* })
|
|
29
|
-
* ```
|
|
30
|
-
*
|
|
31
|
-
* **Pre-Phase-5 facts** (rows with `embedding === null`) fall back to
|
|
32
|
-
* token-overlap matching against the `fact` column — same shape as
|
|
33
|
-
* `MemoryUserMemory.recall()`. So upgrading from `OrmUserMemory` to
|
|
34
|
-
* `EmbeddingUserMemory` doesn't lose recall on existing rows; new
|
|
35
|
-
* `remember()` calls populate the embedding column going forward.
|
|
36
|
-
*/
|
|
37
|
-
import { OrmUserMemory } from '../memory-orm/index.js';
|
|
38
|
-
import type { MemoryEntry, UserMemory } from '../types.js';
|
|
39
|
-
export interface EmbeddingUserMemoryOptions {
|
|
40
|
-
/**
|
|
41
|
-
* The composed inner store. Must be {@link OrmUserMemory} for v1
|
|
42
|
-
* — the composer reads/writes the `embedding Bytes?` column on
|
|
43
|
-
* the same row. Other backends (Pinecone, Weaviate) implement
|
|
44
|
-
* their own.
|
|
45
|
-
*/
|
|
46
|
-
inner: OrmUserMemory;
|
|
47
|
-
/**
|
|
48
|
-
* Embedding model id (`'<provider>/<model>'`). Used for both
|
|
49
|
-
* fact embedding on `remember()` and query embedding on
|
|
50
|
-
* `recall()`. Default: whatever `AI.embed()` picks (`AiRegistry`
|
|
51
|
-
* default).
|
|
52
|
-
*/
|
|
53
|
-
model?: string;
|
|
54
|
-
/**
|
|
55
|
-
* Cosine-similarity floor in `[-1, 1]`. Matches below the
|
|
56
|
-
* threshold are dropped before sorting. Default `0` — return
|
|
57
|
-
* everything ranked. Tighten for higher precision; loosen for
|
|
58
|
-
* higher recall.
|
|
59
|
-
*/
|
|
60
|
-
threshold?: number;
|
|
61
|
-
/**
|
|
62
|
-
* Optional fallback for rows whose `embedding` column is `null`
|
|
63
|
-
* (rows persisted without the embedding composer wired in).
|
|
64
|
-
*
|
|
65
|
-
* - `'token-overlap'` (default) — score 0 if any ≥3-char token
|
|
66
|
-
* from the query appears in the row's `fact`. Lets you
|
|
67
|
-
* upgrade `OrmUserMemory` → `EmbeddingUserMemory` without
|
|
68
|
-
* losing recall on existing rows.
|
|
69
|
-
* - `'skip'` — drop null-embedding rows entirely.
|
|
70
|
-
*/
|
|
71
|
-
nullEmbeddingFallback?: 'token-overlap' | 'skip';
|
|
72
|
-
}
|
|
73
|
-
export declare class EmbeddingUserMemory implements UserMemory {
|
|
74
|
-
private readonly inner;
|
|
75
|
-
private readonly model;
|
|
76
|
-
private readonly threshold;
|
|
77
|
-
private readonly fallback;
|
|
78
|
-
constructor(opts: EmbeddingUserMemoryOptions);
|
|
79
|
-
remember(userId: string, fact: string, opts?: {
|
|
80
|
-
tags?: string[];
|
|
81
|
-
score?: number;
|
|
82
|
-
}): Promise<MemoryEntry>;
|
|
83
|
-
recall(userId: string, query: string, opts?: {
|
|
84
|
-
limit?: number;
|
|
85
|
-
tags?: string[];
|
|
86
|
-
}): Promise<MemoryEntry[]>;
|
|
87
|
-
forget(userId: string, factId: string): Promise<void>;
|
|
88
|
-
list(userId: string, opts?: {
|
|
89
|
-
tags?: string[];
|
|
90
|
-
limit?: number;
|
|
91
|
-
}): Promise<MemoryEntry[]>;
|
|
92
|
-
forgetAll(userId: string): Promise<void>;
|
|
93
|
-
/**
|
|
94
|
-
* Single-string embedding via the {@link AI} facade. Returns the
|
|
95
|
-
* first (and only) embedding vector. Throws on provider/network
|
|
96
|
-
* failure; callers route through try/catch and degrade.
|
|
97
|
-
*/
|
|
98
|
-
private embed;
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Pack a `number[]` into a Float32 byte buffer. 4 bytes per dim;
|
|
102
|
-
* a 1536-dim OpenAI embedding compresses to 6144 bytes.
|
|
103
|
-
*
|
|
104
|
-
* Uses `ArrayBuffer` + `Float32Array` so the output is a portable
|
|
105
|
-
* `Uint8Array` (works in Node, browser, RN). Prisma's `Bytes`
|
|
106
|
-
* column accepts both `Uint8Array` and `Buffer`.
|
|
107
|
-
*/
|
|
108
|
-
export declare function serializeVector(v: number[]): Uint8Array;
|
|
109
|
-
/**
|
|
110
|
-
* Reverse of {@link serializeVector}. Reads the underlying byte
|
|
111
|
-
* buffer as Float32 and returns a fresh `number[]` so callers can
|
|
112
|
-
* mutate without affecting the source row.
|
|
113
|
-
*/
|
|
114
|
-
export declare function deserializeVector(bytes: Uint8Array): number[];
|
|
115
|
-
/**
|
|
116
|
-
* Cosine similarity in `[-1, 1]`. Returns `0` when either vector
|
|
117
|
-
* has zero magnitude, or when lengths don't match (defensive — should
|
|
118
|
-
* never happen if remember/recall use the same embedding model).
|
|
119
|
-
*/
|
|
120
|
-
export declare function cosineSimilarity(a: number[], b: number[]): number;
|
|
1
|
+
export * from '@gemstack/ai-sdk/memory-embedding';
|
|
121
2
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/memory-embedding/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/memory-embedding/index.ts"],"names":[],"mappings":"AAGA,cAAc,mCAAmC,CAAA"}
|
|
@@ -1,229 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
*
|
|
5
|
-
* Composes Phase 4's {@link OrmUserMemory} with the embedding
|
|
6
|
-
* provider registered on {@link AiRegistry}: `remember()` embeds the
|
|
7
|
-
* fact and writes the Float32-packed vector into the row's
|
|
8
|
-
* `embedding` column; `recall()` embeds the query and ranks by
|
|
9
|
-
* cosine similarity. `forget()` / `forgetAll()` delegate to the
|
|
10
|
-
* inner store — the embedding lives in the same row, so deleting
|
|
11
|
-
* the row deletes the vector. GDPR right-to-be-forgotten cascades
|
|
12
|
-
* automatically.
|
|
13
|
-
*
|
|
14
|
-
* v1 is **pure-JS cosine over the user's full set** — fine up to
|
|
15
|
-
* a few thousand facts per user. For larger workloads, B7 lands a
|
|
16
|
-
* pgvector-backed `EmbeddingUserMemory` that pushes the dot-product
|
|
17
|
-
* into the database.
|
|
18
|
-
*
|
|
19
|
-
* @example
|
|
20
|
-
* ```ts
|
|
21
|
-
* import { OrmUserMemory } from '@rudderjs/ai/memory-orm'
|
|
22
|
-
* import { EmbeddingUserMemory } from '@rudderjs/ai/memory-embedding'
|
|
23
|
-
*
|
|
24
|
-
* const memory = new EmbeddingUserMemory({
|
|
25
|
-
* inner: new OrmUserMemory(),
|
|
26
|
-
* model: 'openai/text-embedding-3-small',
|
|
27
|
-
* threshold: 0.5, // cosine floor; matches below are dropped
|
|
28
|
-
* })
|
|
29
|
-
* ```
|
|
30
|
-
*
|
|
31
|
-
* **Pre-Phase-5 facts** (rows with `embedding === null`) fall back to
|
|
32
|
-
* token-overlap matching against the `fact` column — same shape as
|
|
33
|
-
* `MemoryUserMemory.recall()`. So upgrading from `OrmUserMemory` to
|
|
34
|
-
* `EmbeddingUserMemory` doesn't lose recall on existing rows; new
|
|
35
|
-
* `remember()` calls populate the embedding column going forward.
|
|
36
|
-
*/
|
|
37
|
-
import { AI } from '../facade.js';
|
|
38
|
-
import { UserMemoryRecord } from '../memory-orm/index.js';
|
|
39
|
-
export class EmbeddingUserMemory {
|
|
40
|
-
inner;
|
|
41
|
-
model;
|
|
42
|
-
threshold;
|
|
43
|
-
fallback;
|
|
44
|
-
constructor(opts) {
|
|
45
|
-
this.inner = opts.inner;
|
|
46
|
-
if (opts.model !== undefined)
|
|
47
|
-
this.model = opts.model;
|
|
48
|
-
this.threshold = opts.threshold ?? 0;
|
|
49
|
-
this.fallback = opts.nullEmbeddingFallback ?? 'token-overlap';
|
|
50
|
-
}
|
|
51
|
-
async remember(userId, fact, opts) {
|
|
52
|
-
const entry = await this.inner.remember(userId, fact, opts);
|
|
53
|
-
// Best-effort embed + persist. Failures are logged via the inner
|
|
54
|
-
// store still having the entry; we don't break the caller.
|
|
55
|
-
try {
|
|
56
|
-
const vector = await this.embed(fact);
|
|
57
|
-
await UserMemoryRecord.update(entry.id, {
|
|
58
|
-
embedding: serializeVector(vector),
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
catch {
|
|
62
|
-
// Embedding failed (network, missing peer SDK). The row is
|
|
63
|
-
// already in the store; recall will fall back to
|
|
64
|
-
// token-overlap if the column stays null. No-op.
|
|
65
|
-
}
|
|
66
|
-
return entry;
|
|
67
|
-
}
|
|
68
|
-
async recall(userId, query, opts) {
|
|
69
|
-
let queryVector = null;
|
|
70
|
-
try {
|
|
71
|
-
queryVector = await this.embed(query);
|
|
72
|
-
}
|
|
73
|
-
catch {
|
|
74
|
-
// Embed failed — fall through to token-overlap on every row.
|
|
75
|
-
}
|
|
76
|
-
const rows = await UserMemoryRecord.where('userId', userId).get();
|
|
77
|
-
const wanted = opts?.tags;
|
|
78
|
-
const queryTokens = tokenize(query);
|
|
79
|
-
const scored = [];
|
|
80
|
-
for (const row of rows) {
|
|
81
|
-
const entry = rowToEntry(row);
|
|
82
|
-
if (!matchesTags(entry, wanted))
|
|
83
|
-
continue;
|
|
84
|
-
let score;
|
|
85
|
-
if (queryVector !== null && row.embedding !== null && row.embedding !== undefined) {
|
|
86
|
-
const factVector = deserializeVector(row.embedding);
|
|
87
|
-
score = cosineSimilarity(queryVector, factVector);
|
|
88
|
-
}
|
|
89
|
-
else if (this.fallback === 'skip') {
|
|
90
|
-
continue;
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
// token-overlap fallback — score 0 (mid-range) if any
|
|
94
|
-
// token matches, otherwise drop.
|
|
95
|
-
if (factHasAnyToken(entry.fact, queryTokens)) {
|
|
96
|
-
score = 0;
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
continue;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
if (score >= this.threshold) {
|
|
103
|
-
scored.push({ entry, score });
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
scored.sort((a, b) => b.score - a.score);
|
|
107
|
-
const capped = capLimit(scored, opts?.limit);
|
|
108
|
-
return capped.map(s => ({ ...s.entry, score: s.score }));
|
|
109
|
-
}
|
|
110
|
-
async forget(userId, factId) {
|
|
111
|
-
// The embedding lives in the same row — deleting via the inner
|
|
112
|
-
// store deletes the vector too. GDPR cascade is automatic.
|
|
113
|
-
return this.inner.forget(userId, factId);
|
|
114
|
-
}
|
|
115
|
-
async list(userId, opts) {
|
|
116
|
-
return this.inner.list(userId, opts);
|
|
117
|
-
}
|
|
118
|
-
async forgetAll(userId) {
|
|
119
|
-
if (!this.inner.forgetAll)
|
|
120
|
-
return;
|
|
121
|
-
return this.inner.forgetAll(userId);
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Single-string embedding via the {@link AI} facade. Returns the
|
|
125
|
-
* first (and only) embedding vector. Throws on provider/network
|
|
126
|
-
* failure; callers route through try/catch and degrade.
|
|
127
|
-
*/
|
|
128
|
-
async embed(text) {
|
|
129
|
-
const result = await AI.embed(text, this.model ? { model: this.model } : undefined);
|
|
130
|
-
const vec = result.embeddings[0];
|
|
131
|
-
if (!vec)
|
|
132
|
-
throw new Error('[Rudder AI] embed() returned no vectors');
|
|
133
|
-
return vec;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
// ─── Vector + similarity helpers (exported for tests + B7) ─────
|
|
137
|
-
/**
|
|
138
|
-
* Pack a `number[]` into a Float32 byte buffer. 4 bytes per dim;
|
|
139
|
-
* a 1536-dim OpenAI embedding compresses to 6144 bytes.
|
|
140
|
-
*
|
|
141
|
-
* Uses `ArrayBuffer` + `Float32Array` so the output is a portable
|
|
142
|
-
* `Uint8Array` (works in Node, browser, RN). Prisma's `Bytes`
|
|
143
|
-
* column accepts both `Uint8Array` and `Buffer`.
|
|
144
|
-
*/
|
|
145
|
-
export function serializeVector(v) {
|
|
146
|
-
const buf = new ArrayBuffer(v.length * 4);
|
|
147
|
-
const view = new Float32Array(buf);
|
|
148
|
-
for (let i = 0; i < v.length; i++)
|
|
149
|
-
view[i] = v[i];
|
|
150
|
-
return new Uint8Array(buf);
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Reverse of {@link serializeVector}. Reads the underlying byte
|
|
154
|
-
* buffer as Float32 and returns a fresh `number[]` so callers can
|
|
155
|
-
* mutate without affecting the source row.
|
|
156
|
-
*/
|
|
157
|
-
export function deserializeVector(bytes) {
|
|
158
|
-
// The `bytes.buffer` may be a slice; honor byteOffset + byteLength
|
|
159
|
-
// so we don't read into adjacent memory.
|
|
160
|
-
const view = new Float32Array(bytes.buffer, bytes.byteOffset, bytes.byteLength / 4);
|
|
161
|
-
return Array.from(view);
|
|
162
|
-
}
|
|
163
|
-
/**
|
|
164
|
-
* Cosine similarity in `[-1, 1]`. Returns `0` when either vector
|
|
165
|
-
* has zero magnitude, or when lengths don't match (defensive — should
|
|
166
|
-
* never happen if remember/recall use the same embedding model).
|
|
167
|
-
*/
|
|
168
|
-
export function cosineSimilarity(a, b) {
|
|
169
|
-
if (a.length !== b.length)
|
|
170
|
-
return 0;
|
|
171
|
-
let dot = 0;
|
|
172
|
-
let magA = 0;
|
|
173
|
-
let magB = 0;
|
|
174
|
-
for (let i = 0; i < a.length; i++) {
|
|
175
|
-
const ai = a[i];
|
|
176
|
-
const bi = b[i];
|
|
177
|
-
dot += ai * bi;
|
|
178
|
-
magA += ai * ai;
|
|
179
|
-
magB += bi * bi;
|
|
180
|
-
}
|
|
181
|
-
if (magA === 0 || magB === 0)
|
|
182
|
-
return 0;
|
|
183
|
-
return dot / (Math.sqrt(magA) * Math.sqrt(magB));
|
|
184
|
-
}
|
|
185
|
-
// ─── Internal helpers ─────────────────────────────────────
|
|
186
|
-
function rowToEntry(row) {
|
|
187
|
-
const tags = row.getTags();
|
|
188
|
-
const out = {
|
|
189
|
-
id: row.id,
|
|
190
|
-
userId: row.userId,
|
|
191
|
-
fact: row.fact,
|
|
192
|
-
createdAt: row.createdAt,
|
|
193
|
-
};
|
|
194
|
-
if (tags.length > 0)
|
|
195
|
-
out.tags = tags;
|
|
196
|
-
if (row.score != null)
|
|
197
|
-
out.score = row.score;
|
|
198
|
-
if (row.updatedAt != null)
|
|
199
|
-
out.updatedAt = row.updatedAt;
|
|
200
|
-
return out;
|
|
201
|
-
}
|
|
202
|
-
function tokenize(s) {
|
|
203
|
-
const out = new Set();
|
|
204
|
-
for (const tok of s.toLowerCase().split(/[^a-z0-9]+/)) {
|
|
205
|
-
if (tok.length >= 3)
|
|
206
|
-
out.add(tok);
|
|
207
|
-
}
|
|
208
|
-
return out;
|
|
209
|
-
}
|
|
210
|
-
function factHasAnyToken(fact, queryTokens) {
|
|
211
|
-
if (queryTokens.size === 0)
|
|
212
|
-
return true;
|
|
213
|
-
const factTokens = tokenize(fact);
|
|
214
|
-
for (const t of factTokens)
|
|
215
|
-
if (queryTokens.has(t))
|
|
216
|
-
return true;
|
|
217
|
-
return false;
|
|
218
|
-
}
|
|
219
|
-
function matchesTags(entry, wanted) {
|
|
220
|
-
if (!wanted || wanted.length === 0)
|
|
221
|
-
return true;
|
|
222
|
-
if (!entry.tags || entry.tags.length === 0)
|
|
223
|
-
return false;
|
|
224
|
-
return wanted.every(t => entry.tags.includes(t));
|
|
225
|
-
}
|
|
226
|
-
function capLimit(items, limit) {
|
|
227
|
-
return limit !== undefined && limit > 0 ? items.slice(0, limit) : items;
|
|
228
|
-
}
|
|
1
|
+
// @rudderjs/ai is deprecated. The AI engine now lives in @gemstack/ai-sdk.
|
|
2
|
+
// This module re-exports it for backwards compatibility; import from
|
|
3
|
+
// '@gemstack/ai-sdk/memory-embedding' directly in new code.
|
|
4
|
+
export * from '@gemstack/ai-sdk/memory-embedding';
|
|
229
5
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/memory-embedding/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/memory-embedding/index.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,qEAAqE;AACrE,4DAA4D;AAC5D,cAAc,mCAAmC,CAAA"}
|
|
@@ -1,118 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* `@rudderjs/ai/memory-orm` — ORM-backed {@link UserMemory} for #A4 Phase 4.
|
|
3
|
-
*
|
|
4
|
-
* Stores per-user facts in a `UserMemory` table via the registered
|
|
5
|
-
* `@rudderjs/orm` adapter (Prisma today; Drizzle as well once the user's
|
|
6
|
-
* tables are wired). Drop-in alongside Phase 1's in-process
|
|
7
|
-
* `MemoryUserMemory`.
|
|
8
|
-
*
|
|
9
|
-
* Wire it from your AI config:
|
|
10
|
-
*
|
|
11
|
-
* ```ts
|
|
12
|
-
* // config/ai.ts
|
|
13
|
-
* import type { AiConfig } from '@rudderjs/ai'
|
|
14
|
-
* import { OrmUserMemory } from '@rudderjs/ai/memory-orm'
|
|
15
|
-
*
|
|
16
|
-
* export default {
|
|
17
|
-
* default: 'anthropic/claude-sonnet-4-5',
|
|
18
|
-
* providers: { ... },
|
|
19
|
-
* memory: new OrmUserMemory(),
|
|
20
|
-
* } satisfies AiConfig
|
|
21
|
-
* ```
|
|
22
|
-
*
|
|
23
|
-
* The schema lives at `@rudderjs/ai/memory-orm`'s {@link userMemoryPrismaSchema}
|
|
24
|
-
* — copy it into your Prisma schema. The optional `embedding Bytes?`
|
|
25
|
-
* column is shipped here in Phase 4 (intentionally nullable) so Phase 5's
|
|
26
|
-
* `EmbeddingUserMemory` can populate it without forcing an additive
|
|
27
|
-
* migration.
|
|
28
|
-
*/
|
|
29
|
-
import { Model } from '@rudderjs/orm';
|
|
30
|
-
import type { MemoryEntry, UserMemory } from '../types.js';
|
|
31
|
-
/**
|
|
32
|
-
* The Model row backing {@link OrmUserMemory}. Exposed so apps that
|
|
33
|
-
* want their own queries (admin views, audit dumps) can use the
|
|
34
|
-
* familiar `UserMemoryRecord.where(...).get()` instead of routing
|
|
35
|
-
* everything through the {@link UserMemory} interface.
|
|
36
|
-
*
|
|
37
|
-
* Tags persist as a JSON-encoded string in the `tags` column — both
|
|
38
|
-
* Prisma's portable `String?` and Drizzle's `text` work without
|
|
39
|
-
* needing native array columns. The {@link UserMemory.recall} path
|
|
40
|
-
* filters tags in JavaScript for the same reason.
|
|
41
|
-
*
|
|
42
|
-
* The `embedding Bytes?` column is in the schema as of Phase 4
|
|
43
|
-
* (nullable) so `@rudderjs/ai/memory-embedding`'s `EmbeddingUserMemory`
|
|
44
|
-
* (Phase 5) writes the Float32-packed vector here on `remember()` and
|
|
45
|
-
* reads it for cosine recall. `OrmUserMemory` ignores it — the
|
|
46
|
-
* column stays `null` for any row stored without the embedding
|
|
47
|
-
* composer.
|
|
48
|
-
*/
|
|
49
|
-
export declare class UserMemoryRecord extends Model {
|
|
50
|
-
static table: string;
|
|
51
|
-
static fillable: string[];
|
|
52
|
-
id: string;
|
|
53
|
-
userId: string;
|
|
54
|
-
fact: string;
|
|
55
|
-
/** JSON-encoded `string[]` or null. Use `getTags()` for the parsed shape. */
|
|
56
|
-
tags: string | null;
|
|
57
|
-
score: number | null;
|
|
58
|
-
/**
|
|
59
|
-
* Float32-packed vector serialized via
|
|
60
|
-
* `@rudderjs/ai/memory-embedding`'s `serializeVector` /
|
|
61
|
-
* `deserializeVector`. `null` when the row was stored without the
|
|
62
|
-
* embedding composer (Phase 4-only setups).
|
|
63
|
-
*/
|
|
64
|
-
embedding: Uint8Array | null;
|
|
65
|
-
createdAt: Date;
|
|
66
|
-
updatedAt: Date | null;
|
|
67
|
-
/** Parsed tags array; empty when nothing was stored. */
|
|
68
|
-
getTags(): string[];
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* `UserMemory` implementation that persists rows to the registered
|
|
72
|
-
* ORM adapter. Designed for production use — the in-process
|
|
73
|
-
* `MemoryUserMemory` is for tests and dev.
|
|
74
|
-
*
|
|
75
|
-
* Adapter coverage:
|
|
76
|
-
* - Prisma — works out of the box; copy {@link userMemoryPrismaSchema}
|
|
77
|
-
* into your schema.
|
|
78
|
-
* - Drizzle — works once you define a table matching the schema's
|
|
79
|
-
* columns and register it via `tables: { userMemory: <table> }` on
|
|
80
|
-
* the `drizzle()` config.
|
|
81
|
-
*
|
|
82
|
-
* Recall semantics: case-insensitive **token-OR-LIKE** matching against
|
|
83
|
-
* the `fact` column. The query is tokenized on non-alphanumeric
|
|
84
|
-
* boundaries (≥3-char tokens) and any row whose `fact` matches at
|
|
85
|
-
* least one token via `LIKE %tok%` is returned. Mirrors Phase 1's
|
|
86
|
-
* `MemoryUserMemory.recall()` behavior so the two backends are
|
|
87
|
-
* swap-compatible. Tag scope is applied JS-side after fetch — pushing
|
|
88
|
-
* tag-array filtering into the WHERE is adapter-specific and lands in a
|
|
89
|
-
* follow-up.
|
|
90
|
-
*/
|
|
91
|
-
export declare class OrmUserMemory implements UserMemory {
|
|
92
|
-
remember(userId: string, fact: string, opts?: {
|
|
93
|
-
tags?: string[];
|
|
94
|
-
score?: number;
|
|
95
|
-
}): Promise<MemoryEntry>;
|
|
96
|
-
recall(userId: string, query: string, opts?: {
|
|
97
|
-
limit?: number;
|
|
98
|
-
tags?: string[];
|
|
99
|
-
}): Promise<MemoryEntry[]>;
|
|
100
|
-
forget(userId: string, factId: string): Promise<void>;
|
|
101
|
-
list(userId: string, opts?: {
|
|
102
|
-
tags?: string[];
|
|
103
|
-
limit?: number;
|
|
104
|
-
}): Promise<MemoryEntry[]>;
|
|
105
|
-
forgetAll(userId: string): Promise<void>;
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* Reference Prisma schema for `OrmUserMemory`. Copy into your
|
|
109
|
-
* `prisma/schema/<file>.prisma` (or paste alongside an existing
|
|
110
|
-
* model). The `embedding Bytes?` column is intentionally nullable so
|
|
111
|
-
* Phase 5's `EmbeddingUserMemory` becomes additive — no schema
|
|
112
|
-
* migration when you upgrade.
|
|
113
|
-
*
|
|
114
|
-
* SQLite stores `Bytes` as `BLOB`; Postgres stores it as `bytea`.
|
|
115
|
-
* Both work for the dot-product implementation Phase 5 will use.
|
|
116
|
-
*/
|
|
117
|
-
export declare const userMemoryPrismaSchema = "model UserMemory {\n id String @id @default(cuid())\n userId String\n fact String\n /// JSON-encoded `string[]` of tags, or null\n tags String?\n /// Confidence score in [0, 1] \u2014 extract sets this from the model's self-rating\n score Float?\n /// Phase 5 \u2014 vector embedding for cosine recall (nullable so Phase 4 ignores it)\n embedding Bytes?\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n\n @@index([userId])\n}\n";
|
|
1
|
+
export * from '@gemstack/ai-sdk/memory-orm';
|
|
118
2
|
//# sourceMappingURL=index.d.ts.map
|