@anvia/core 0.5.0 → 0.6.1
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 +68 -0
- package/dist/agent/index.d.ts +10 -10
- package/dist/agent/index.js +6 -5
- package/dist/{agent-CWGuTdMJ.d.ts → agent-MQdfhE7y.d.ts} +3 -3
- package/dist/audio-generation/index.d.ts +1 -1
- package/dist/{chunk-Z7HY4WU7.js → chunk-2SSND6H4.js} +4 -4
- package/dist/{chunk-S7EOE6EC.js → chunk-AER5FGPK.js} +2 -2
- package/dist/{chunk-365W6FJD.js → chunk-GNNNJZ2P.js} +4 -4
- package/dist/{chunk-P425B6GR.js → chunk-I47EHI45.js} +13 -19
- package/dist/chunk-I47EHI45.js.map +1 -0
- package/dist/{chunk-DUP7FMAF.js → chunk-SHHSMV7O.js} +2 -2
- package/dist/chunk-WQKHFADH.js +12 -0
- package/dist/chunk-WQKHFADH.js.map +1 -0
- package/dist/{chunk-ORLEOXD7.js → chunk-YLN6QF5S.js} +4 -4
- package/dist/{chunk-6GJDBBDC.js → chunk-ZQQYFVO5.js} +124 -1
- package/dist/chunk-ZQQYFVO5.js.map +1 -0
- package/dist/completion/index.d.ts +5 -2
- package/dist/completion/index.js +8 -1
- package/dist/create-completion-B7-k4LsF.d.ts +36 -0
- package/dist/evals/index.d.ts +5 -5
- package/dist/evals/index.js +7 -6
- package/dist/evals/index.js.map +1 -1
- package/dist/extractor/index.d.ts +4 -4
- package/dist/extractor/index.js +7 -6
- package/dist/image-generation/index.d.ts +1 -1
- package/dist/index.d.ts +8 -7
- package/dist/index.js +16 -7
- package/dist/internal/agent.d.ts +4 -4
- package/dist/internal/agent.js +5 -4
- package/dist/loaders/index.d.ts +1 -1
- package/dist/mcp/index.d.ts +4 -4
- package/dist/memory/index.d.ts +1 -1
- package/dist/{middleware-qfm1EFKK.d.ts → middleware-D6Wu0AcC.d.ts} +2 -2
- package/dist/observability/index.d.ts +2 -2
- package/dist/pipeline/index.d.ts +4 -4
- package/dist/skills/index.d.ts +4 -4
- package/dist/skills/index.js +4 -3
- package/dist/{think-tool-ByArsrxe.d.ts → think-tool-DTDGH1Q1.d.ts} +1 -1
- package/dist/tool/index.d.ts +4 -4
- package/dist/tool/index.js +3 -2
- package/dist/{tool-C3ciF-VG.d.ts → tool-OU7OZS0t.d.ts} +1 -1
- package/dist/transcription/index.d.ts +1 -1
- package/dist/{types-T9rlOIUc.d.ts → types-Bpjngcxq.d.ts} +1 -1
- package/dist/{types-UhcgW8Fo.d.ts → types-DXkaLs4s.d.ts} +2 -2
- package/dist/{types-C54aNoCd.d.ts → types-_boSLqrx.d.ts} +4 -1
- package/dist/vector-store/index.d.ts +2 -2
- package/dist/vector-store/index.js +2 -1
- package/package.json +1 -1
- package/dist/chunk-6GJDBBDC.js.map +0 -1
- package/dist/chunk-P425B6GR.js.map +0 -1
- /package/dist/{chunk-Z7HY4WU7.js.map → chunk-2SSND6H4.js.map} +0 -0
- /package/dist/{chunk-S7EOE6EC.js.map → chunk-AER5FGPK.js.map} +0 -0
- /package/dist/{chunk-365W6FJD.js.map → chunk-GNNNJZ2P.js.map} +0 -0
- /package/dist/{chunk-DUP7FMAF.js.map → chunk-SHHSMV7O.js.map} +0 -0
- /package/dist/{chunk-ORLEOXD7.js.map → chunk-YLN6QF5S.js.map} +0 -0
package/README.md
CHANGED
|
@@ -47,6 +47,74 @@ const response = await agent.prompt("What is happening with order A123?").send()
|
|
|
47
47
|
console.log(response.output);
|
|
48
48
|
```
|
|
49
49
|
|
|
50
|
+
## Direct Completions
|
|
51
|
+
|
|
52
|
+
Use `createCompletion` when you want a single provider call without agent turns, memory, or
|
|
53
|
+
tool execution:
|
|
54
|
+
|
|
55
|
+
```ts
|
|
56
|
+
import { createCompletion } from "@anvia/core";
|
|
57
|
+
import { OpenAIClient } from "@anvia/openai";
|
|
58
|
+
|
|
59
|
+
const model = new OpenAIClient({ apiKey }).completionModel("gpt-5");
|
|
60
|
+
|
|
61
|
+
const result = await createCompletion(model, {
|
|
62
|
+
input: "Summarize Anvia in one sentence.",
|
|
63
|
+
instructions: "Answer clearly and concisely.",
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
console.log(result.text);
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Use `messages` when you already own the transcript. If `input` is also provided, it is appended as
|
|
70
|
+
the final message:
|
|
71
|
+
|
|
72
|
+
```ts
|
|
73
|
+
import { Message, createCompletion } from "@anvia/core";
|
|
74
|
+
|
|
75
|
+
const result = await createCompletion(model, {
|
|
76
|
+
messages: [
|
|
77
|
+
Message.system("You are concise."),
|
|
78
|
+
Message.user("Explain Anvia."),
|
|
79
|
+
],
|
|
80
|
+
maxTokens: 300,
|
|
81
|
+
params: {
|
|
82
|
+
reasoning: { effort: "low" },
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Use `createCompletionStream` to receive raw completion stream events from the model:
|
|
88
|
+
|
|
89
|
+
```ts
|
|
90
|
+
import { createCompletionStream } from "@anvia/core";
|
|
91
|
+
|
|
92
|
+
for await (const event of createCompletionStream(model, {
|
|
93
|
+
input: "Write a short launch note.",
|
|
94
|
+
})) {
|
|
95
|
+
if (event.type === "text_delta") process.stdout.write(event.delta);
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Use `createParsedCompletion` when you want a direct completion to return schema-validated data:
|
|
100
|
+
|
|
101
|
+
```ts
|
|
102
|
+
import { createParsedCompletion } from "@anvia/core";
|
|
103
|
+
import { z } from "zod";
|
|
104
|
+
|
|
105
|
+
const eventSchema = z.object({
|
|
106
|
+
name: z.string(),
|
|
107
|
+
date: z.string(),
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
const event = await createParsedCompletion(model, {
|
|
111
|
+
schema: eventSchema,
|
|
112
|
+
input: "Alice and Bob are going to a science fair on Friday.",
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
console.log(event.data);
|
|
116
|
+
```
|
|
117
|
+
|
|
50
118
|
## Prompts and Memory
|
|
51
119
|
|
|
52
120
|
Use a plain prompt for stateless calls:
|
package/dist/agent/index.d.ts
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { k as ToolSearchDocument, l as ToolSet, A as AgentMiddleware, e as ToolMiddleware } from '../middleware-
|
|
2
|
-
export { C as CompletionRequestMiddlewareArgs, a as CompletionRequestMiddlewareResult, b as CompletionResponseMiddlewareArgs, c as CompletionResponseMiddlewareResult, T as ToolInputMiddlewareArgs, d as ToolInputMiddlewareResult, f as ToolOutputMiddlewareArgs, g as ToolOutputMiddlewareResult, h as ToolResultMiddlewareArgs, i as createMiddleware, j as createToolMiddleware } from '../middleware-
|
|
3
|
-
import { D as DynamicContextOptions, f as DynamicToolOptions, g as PromptHook, h as AgentEventStore, i as AgentEventStoreOptions, e as Agent } from '../agent-
|
|
4
|
-
export { A as AgentChildStreamEvent, j as AgentEventAppendInput, k as AgentEventRecord, l as AgentEventStoreInclude, a as AgentStreamEvent, C as CompletionCallHookArgs, m as CompletionErrorHookArgs, n as CompletionResponseHookArgs, H as HookAction, o as HookResult, P as PromptResponse, R as RunControl, p as RunEndHookArgs, q as RunErrorHookArgs, u as RunStartHookArgs, T as ToolApprovalRequestOptions, v as ToolCallControl, w as ToolCallHookAction, x as ToolCallHookArgs, y as ToolCallHookResult, z as ToolErrorHookArgs, B as ToolHookArgs, E as ToolResultHookArgs, F as TurnEndHookArgs, G as TurnStartHookArgs, c as cancelPrompt, b as createHook, r as requestToolApproval, d as runControl, s as skipTool, t as toolCallControl } from '../agent-
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
1
|
+
import { k as ToolSearchDocument, l as ToolSet, A as AgentMiddleware, e as ToolMiddleware } from '../middleware-D6Wu0AcC.js';
|
|
2
|
+
export { C as CompletionRequestMiddlewareArgs, a as CompletionRequestMiddlewareResult, b as CompletionResponseMiddlewareArgs, c as CompletionResponseMiddlewareResult, T as ToolInputMiddlewareArgs, d as ToolInputMiddlewareResult, f as ToolOutputMiddlewareArgs, g as ToolOutputMiddlewareResult, h as ToolResultMiddlewareArgs, i as createMiddleware, j as createToolMiddleware } from '../middleware-D6Wu0AcC.js';
|
|
3
|
+
import { D as DynamicContextOptions, f as DynamicToolOptions, g as PromptHook, h as AgentEventStore, i as AgentEventStoreOptions, e as Agent } from '../agent-MQdfhE7y.js';
|
|
4
|
+
export { A as AgentChildStreamEvent, j as AgentEventAppendInput, k as AgentEventRecord, l as AgentEventStoreInclude, a as AgentStreamEvent, C as CompletionCallHookArgs, m as CompletionErrorHookArgs, n as CompletionResponseHookArgs, H as HookAction, o as HookResult, P as PromptResponse, R as RunControl, p as RunEndHookArgs, q as RunErrorHookArgs, u as RunStartHookArgs, T as ToolApprovalRequestOptions, v as ToolCallControl, w as ToolCallHookAction, x as ToolCallHookArgs, y as ToolCallHookResult, z as ToolErrorHookArgs, B as ToolHookArgs, E as ToolResultHookArgs, F as TurnEndHookArgs, G as TurnStartHookArgs, c as cancelPrompt, b as createHook, r as requestToolApproval, d as runControl, s as skipTool, t as toolCallControl } from '../agent-MQdfhE7y.js';
|
|
5
|
+
import { Z as ZodSchema } from '../zod-schema-C7F4clpm.js';
|
|
6
|
+
import { C as CompletionModel, e as JsonValue, n as ToolChoice, M as Message } from '../types-_boSLqrx.js';
|
|
7
|
+
import { a as McpServer } from '../types-DXkaLs4s.js';
|
|
7
8
|
import { MemoryStore, MemoryOptions } from '../memory/index.js';
|
|
8
9
|
import { AgentObserver, ObserveOptions } from '../observability/index.js';
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import { A as AnyTool } from '../tool-C3ciF-VG.js';
|
|
10
|
+
import { a as SkillSet } from '../types-Bpjngcxq.js';
|
|
11
|
+
import { A as AnyTool } from '../tool-OU7OZS0t.js';
|
|
12
12
|
import { VectorSearchIndex } from '../vector-store/index.js';
|
|
13
13
|
import '../types-IB2e9u5M.js';
|
|
14
|
+
import 'zod';
|
|
14
15
|
import '@modelcontextprotocol/sdk/client/sse.js';
|
|
15
16
|
import '@modelcontextprotocol/sdk/client/stdio.js';
|
|
16
17
|
import '@modelcontextprotocol/sdk/client/streamableHttp.js';
|
|
17
|
-
import 'zod';
|
|
18
18
|
|
|
19
19
|
declare class AgentBuilder<M extends CompletionModel = CompletionModel> {
|
|
20
20
|
private readonly completionModel;
|
package/dist/agent/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AgentBuilder
|
|
3
|
-
} from "../chunk-
|
|
3
|
+
} from "../chunk-GNNNJZ2P.js";
|
|
4
4
|
import {
|
|
5
5
|
MaxTurnsError,
|
|
6
6
|
PromptCancelledError,
|
|
@@ -10,16 +10,17 @@ import {
|
|
|
10
10
|
runControl,
|
|
11
11
|
skipTool,
|
|
12
12
|
toolCallControl
|
|
13
|
-
} from "../chunk-
|
|
13
|
+
} from "../chunk-YLN6QF5S.js";
|
|
14
14
|
import "../chunk-XUUY2L2D.js";
|
|
15
15
|
import "../chunk-XXT2UCAR.js";
|
|
16
16
|
import "../chunk-YK4WAAS4.js";
|
|
17
17
|
import {
|
|
18
18
|
createMiddleware,
|
|
19
19
|
createToolMiddleware
|
|
20
|
-
} from "../chunk-
|
|
21
|
-
import "../chunk-
|
|
22
|
-
import "../chunk-
|
|
20
|
+
} from "../chunk-AER5FGPK.js";
|
|
21
|
+
import "../chunk-I47EHI45.js";
|
|
22
|
+
import "../chunk-ZQQYFVO5.js";
|
|
23
|
+
import "../chunk-WQKHFADH.js";
|
|
23
24
|
import "../chunk-EFGX3EX5.js";
|
|
24
25
|
import "../chunk-OIMLU4SF.js";
|
|
25
26
|
export {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { M as Message, U as Usage, c as CompletionResponse,
|
|
1
|
+
import { M as Message, U as Usage, c as CompletionResponse, k as ToolResultContent, C as CompletionModel, v as ReasoningContentType, f as ToolCall, D as Document, e as JsonValue, n as ToolChoice, J as JsonObject } from './types-_boSLqrx.js';
|
|
2
2
|
import { MemoryContext, MemoryRegistration, SessionOptions } from './memory/index.js';
|
|
3
3
|
import { AgentTraceOptions, AgentTraceInfo, AgentObserverRegistration } from './observability/index.js';
|
|
4
|
-
import { A as AgentMiddleware, e as ToolMiddleware, l as ToolSet, k as ToolSearchDocument } from './middleware-
|
|
5
|
-
import { T as Tool, A as AnyTool, c as ToolCallContext, N as NormalizedToolOutput } from './tool-
|
|
4
|
+
import { A as AgentMiddleware, e as ToolMiddleware, l as ToolSet, k as ToolSearchDocument } from './middleware-D6Wu0AcC.js';
|
|
5
|
+
import { T as Tool, A as AnyTool, c as ToolCallContext, N as NormalizedToolOutput } from './tool-OU7OZS0t.js';
|
|
6
6
|
import { VectorFilter, VectorSearchResult, VectorSearchIndex } from './vector-store/index.js';
|
|
7
7
|
|
|
8
8
|
type HookAction = {
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AgentBuilder
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-GNNNJZ2P.js";
|
|
4
4
|
import {
|
|
5
5
|
createTool
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-I47EHI45.js";
|
|
7
7
|
import {
|
|
8
8
|
CompletionCapabilityError,
|
|
9
9
|
CompletionRequestBuilder,
|
|
10
10
|
Message,
|
|
11
11
|
Usage
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-ZQQYFVO5.js";
|
|
13
13
|
|
|
14
14
|
// src/extractor/extractor.ts
|
|
15
15
|
var SUBMIT_TOOL_NAME = "submit";
|
|
@@ -139,4 +139,4 @@ export {
|
|
|
139
139
|
Extractor,
|
|
140
140
|
ExtractorBuilder
|
|
141
141
|
};
|
|
142
|
-
//# sourceMappingURL=chunk-
|
|
142
|
+
//# sourceMappingURL=chunk-2SSND6H4.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
InMemoryVectorStore,
|
|
3
3
|
createTool
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-I47EHI45.js";
|
|
5
5
|
import {
|
|
6
6
|
embedDocuments
|
|
7
7
|
} from "./chunk-EFGX3EX5.js";
|
|
@@ -241,4 +241,4 @@ export {
|
|
|
241
241
|
createToolMiddleware,
|
|
242
242
|
createThinkTool
|
|
243
243
|
};
|
|
244
|
-
//# sourceMappingURL=chunk-
|
|
244
|
+
//# sourceMappingURL=chunk-AER5FGPK.js.map
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Agent,
|
|
3
3
|
normalizeAgentId
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-YLN6QF5S.js";
|
|
5
5
|
import {
|
|
6
6
|
resolveMemoryOptions
|
|
7
7
|
} from "./chunk-XXT2UCAR.js";
|
|
8
8
|
import {
|
|
9
9
|
ToolSet
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-AER5FGPK.js";
|
|
11
11
|
import {
|
|
12
12
|
toProviderJsonSchema
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-WQKHFADH.js";
|
|
14
14
|
|
|
15
15
|
// src/agent/builder.ts
|
|
16
16
|
var AgentBuilder = class {
|
|
@@ -197,4 +197,4 @@ var AgentBuilder = class {
|
|
|
197
197
|
export {
|
|
198
198
|
AgentBuilder
|
|
199
199
|
};
|
|
200
|
-
//# sourceMappingURL=chunk-
|
|
200
|
+
//# sourceMappingURL=chunk-GNNNJZ2P.js.map
|
|
@@ -1,18 +1,13 @@
|
|
|
1
|
+
import {
|
|
2
|
+
toProviderJsonSchema
|
|
3
|
+
} from "./chunk-WQKHFADH.js";
|
|
1
4
|
import {
|
|
2
5
|
cosineSimilarity,
|
|
3
6
|
embedText
|
|
4
7
|
} from "./chunk-EFGX3EX5.js";
|
|
5
8
|
|
|
6
9
|
// src/vector-store/index.ts
|
|
7
|
-
import { z as z2 } from "zod";
|
|
8
|
-
|
|
9
|
-
// src/schema/zod-schema.ts
|
|
10
10
|
import { z } from "zod";
|
|
11
|
-
function toProviderJsonSchema(schema) {
|
|
12
|
-
const jsonSchema = z.toJSONSchema(schema);
|
|
13
|
-
const { $schema: _schema, ...providerSchema } = jsonSchema;
|
|
14
|
-
return providerSchema;
|
|
15
|
-
}
|
|
16
11
|
|
|
17
12
|
// src/tool/create-tool.ts
|
|
18
13
|
function createTool(options) {
|
|
@@ -281,16 +276,16 @@ function createVectorSearchTool(index, options) {
|
|
|
281
276
|
return createTool({
|
|
282
277
|
name: options.name,
|
|
283
278
|
description: options.description ?? "Search a vector store for documents relevant to the provided query.",
|
|
284
|
-
input:
|
|
285
|
-
query:
|
|
286
|
-
topK:
|
|
279
|
+
input: z.object({
|
|
280
|
+
query: z.string().describe("The query string to search for relevant documents."),
|
|
281
|
+
topK: z.number().int().positive().optional().describe("The maximum number of results.")
|
|
287
282
|
}),
|
|
288
|
-
output:
|
|
289
|
-
|
|
290
|
-
score:
|
|
291
|
-
id:
|
|
292
|
-
document:
|
|
293
|
-
metadata:
|
|
283
|
+
output: z.array(
|
|
284
|
+
z.object({
|
|
285
|
+
score: z.number(),
|
|
286
|
+
id: z.string(),
|
|
287
|
+
document: z.any(),
|
|
288
|
+
metadata: z.record(z.string(), z.union([z.string(), z.number(), z.boolean(), z.null()])).optional()
|
|
294
289
|
})
|
|
295
290
|
),
|
|
296
291
|
execute: ({ query, topK }) => index.search({
|
|
@@ -322,11 +317,10 @@ function validateEmbeddingDimension(expectedDimension, embedding, id) {
|
|
|
322
317
|
}
|
|
323
318
|
|
|
324
319
|
export {
|
|
325
|
-
toProviderJsonSchema,
|
|
326
320
|
createTool,
|
|
327
321
|
vectorFilter,
|
|
328
322
|
InMemoryVectorStore,
|
|
329
323
|
InMemoryVectorIndex,
|
|
330
324
|
createVectorSearchTool
|
|
331
325
|
};
|
|
332
|
-
//# sourceMappingURL=chunk-
|
|
326
|
+
//# sourceMappingURL=chunk-I47EHI45.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/vector-store/index.ts","../src/tool/create-tool.ts","../src/vector-store/filter.ts","../src/vector-store/lsh.ts"],"sourcesContent":["import { z } from \"zod\";\nimport {\n cosineSimilarity,\n type EmbeddedDocument,\n type Embedding,\n type EmbeddingModel,\n embedText,\n type VectorMetadata,\n} from \"../embeddings\";\nimport { createTool } from \"../tool/create-tool\";\nimport type { Tool } from \"../tool/tool\";\nimport { matchesVectorFilter, type VectorFilter } from \"./filter\";\nimport { LshIndex, type LshOptions } from \"./lsh\";\n\nexport { type VectorFilter, vectorFilter } from \"./filter\";\n\nexport type IndexStrategy = { type: \"bruteForce\" } | LshOptions;\n\nexport type VectorSearchRequest = {\n query: string;\n topK: number;\n threshold?: number | undefined;\n filter?: VectorFilter | undefined;\n};\n\nexport type VectorSearchResult<T = unknown, Metadata extends VectorMetadata = VectorMetadata> = {\n score: number;\n id: string;\n document: T;\n metadata?: Metadata | undefined;\n};\n\nexport type VectorInspectRequest = {\n limit: number;\n cursor?: string | undefined;\n filter?: VectorFilter | undefined;\n};\n\nexport type VectorInspectItem<T = unknown, Metadata extends VectorMetadata = VectorMetadata> = {\n id: string;\n document: T;\n metadata?: Metadata | undefined;\n};\n\nexport type VectorInspectPage<T = unknown, Metadata extends VectorMetadata = VectorMetadata> = {\n items: Array<VectorInspectItem<T, Metadata>>;\n nextCursor?: string | undefined;\n totalCount?: number | undefined;\n};\n\nexport interface VectorSearchIndex<T = unknown, Metadata extends VectorMetadata = VectorMetadata> {\n search(request: VectorSearchRequest): Promise<Array<VectorSearchResult<T, Metadata>>>;\n searchIds(request: VectorSearchRequest): Promise<Array<{ score: number; id: string }>>;\n asTool(options: VectorSearchToolOptions): Tool<{ query: string; topK?: number }, unknown>;\n inspect?(request: VectorInspectRequest): Promise<VectorInspectPage<T, Metadata>>;\n}\n\nexport type VectorSearchToolOptions = {\n name: string;\n description?: string | undefined;\n topK?: number | undefined;\n threshold?: number | undefined;\n filter?: VectorFilter | undefined;\n};\n\ntype StoredDocument<T, Metadata extends VectorMetadata> = EmbeddedDocument<T, Metadata>;\n\nexport class InMemoryVectorStore<T, Metadata extends VectorMetadata = VectorMetadata> {\n private readonly documents = new Map<string, StoredDocument<T, Metadata>>();\n private indexStrategy: IndexStrategy;\n private lshIndex: LshIndex | undefined;\n private embeddingDimension: number | undefined;\n\n constructor(options: { index?: IndexStrategy } = {}) {\n this.indexStrategy = options.index ?? { type: \"bruteForce\" };\n }\n\n static fromDocuments<T, Metadata extends VectorMetadata = VectorMetadata>(\n documents: Array<EmbeddedDocument<T, Metadata>>,\n options: { index?: IndexStrategy } = {},\n ): InMemoryVectorStore<T, Metadata> {\n const store = new InMemoryVectorStore<T, Metadata>(options);\n store.addDocuments(documents);\n return store;\n }\n\n addDocuments(documents: Array<EmbeddedDocument<T, Metadata>>): this {\n this.validateDocumentDimensions(documents);\n for (const document of documents) {\n this.documents.set(document.id, document);\n }\n this.rebuildLshIndex();\n return this;\n }\n\n get(id: string): StoredDocument<T, Metadata> | undefined {\n return this.documents.get(id);\n }\n\n values(): Array<StoredDocument<T, Metadata>> {\n return [...this.documents.values()];\n }\n\n len(): number {\n return this.documents.size;\n }\n\n isEmpty(): boolean {\n return this.documents.size === 0;\n }\n\n index(model: EmbeddingModel): InMemoryVectorIndex<T, Metadata> {\n return new InMemoryVectorIndex(model, this);\n }\n\n candidates(queryEmbedding: Embedding): Array<StoredDocument<T, Metadata>> {\n this.validateQueryDimension(queryEmbedding);\n if (this.indexStrategy.type !== \"lsh\" || this.lshIndex === undefined) {\n return this.values();\n }\n\n const candidateIds = this.lshIndex.query(queryEmbedding.vector);\n if (candidateIds.size === 0) {\n return this.values();\n }\n\n return [...candidateIds].flatMap((id) => {\n const document = this.documents.get(id);\n return document === undefined ? [] : [document];\n });\n }\n\n private rebuildLshIndex(): void {\n if (this.indexStrategy.type !== \"lsh\") {\n this.lshIndex = undefined;\n return;\n }\n\n const firstEmbedding = this.values().flatMap((document) => document.embeddings)[0];\n if (firstEmbedding === undefined) {\n this.lshIndex = undefined;\n return;\n }\n\n const index = new LshIndex(firstEmbedding.vector.length, this.indexStrategy);\n for (const document of this.documents.values()) {\n for (const embedding of document.embeddings) {\n index.insert(document.id, embedding.vector);\n }\n }\n this.lshIndex = index;\n }\n\n private validateDocumentDimensions(documents: Array<EmbeddedDocument<T, Metadata>>): void {\n let dimension = this.embeddingDimension;\n for (const document of documents) {\n for (const embedding of document.embeddings) {\n dimension = validateEmbeddingDimension(dimension, embedding, document.id);\n }\n }\n this.embeddingDimension = dimension;\n }\n\n private validateQueryDimension(queryEmbedding: Embedding): void {\n if (this.embeddingDimension === undefined) {\n return;\n }\n validateEmbeddingDimension(this.embeddingDimension, queryEmbedding, \"query\");\n }\n}\n\nexport class InMemoryVectorIndex<T, Metadata extends VectorMetadata = VectorMetadata>\n implements VectorSearchIndex<T, Metadata>\n{\n constructor(\n private readonly model: EmbeddingModel,\n private readonly store: InMemoryVectorStore<T, Metadata>,\n ) {}\n\n async search(request: VectorSearchRequest): Promise<Array<VectorSearchResult<T, Metadata>>> {\n const queryEmbedding = await embedText(this.model, request.query);\n return this.store\n .candidates(queryEmbedding)\n .filter((document) => matchesVectorFilter(document.metadata, request.filter))\n .flatMap((document) => {\n const score = bestScore(queryEmbedding, document.embeddings);\n if (score === undefined) {\n return [];\n }\n if (request.threshold !== undefined && score < request.threshold) {\n return [];\n }\n return [\n {\n score,\n id: document.id,\n document: document.document,\n ...(document.metadata === undefined ? {} : { metadata: document.metadata }),\n },\n ];\n })\n .sort((left, right) => right.score - left.score)\n .slice(0, Math.max(0, Math.trunc(request.topK)));\n }\n\n async searchIds(request: VectorSearchRequest): Promise<Array<{ score: number; id: string }>> {\n return (await this.search(request)).map(({ score, id }) => ({ score, id }));\n }\n\n async inspect(request: VectorInspectRequest): Promise<VectorInspectPage<T, Metadata>> {\n const limit = Math.max(0, Math.trunc(request.limit));\n const start = Math.max(0, Math.trunc(Number(request.cursor ?? \"0\")));\n const documents = this.store\n .values()\n .filter((document) => matchesVectorFilter(document.metadata, request.filter));\n const page = documents.slice(start, start + limit);\n const nextOffset = start + page.length;\n return {\n items: page.map((document) => ({\n id: document.id,\n document: document.document,\n ...(document.metadata === undefined ? {} : { metadata: document.metadata }),\n })),\n ...(nextOffset < documents.length ? { nextCursor: String(nextOffset) } : {}),\n totalCount: documents.length,\n };\n }\n\n asTool(options: VectorSearchToolOptions): Tool<{ query: string; topK?: number }, unknown> {\n return createVectorSearchTool(this, options);\n }\n}\n\nexport function createVectorSearchTool<T, Metadata extends VectorMetadata>(\n index: VectorSearchIndex<T, Metadata>,\n options: VectorSearchToolOptions,\n): Tool<{ query: string; topK?: number }, Array<VectorSearchResult<T, Metadata>>> {\n return createTool({\n name: options.name,\n description:\n options.description ?? \"Search a vector store for documents relevant to the provided query.\",\n input: z.object({\n query: z.string().describe(\"The query string to search for relevant documents.\"),\n topK: z.number().int().positive().optional().describe(\"The maximum number of results.\"),\n }),\n output: z.array(\n z.object({\n score: z.number(),\n id: z.string(),\n document: z.any(),\n metadata: z\n .record(z.string(), z.union([z.string(), z.number(), z.boolean(), z.null()]))\n .optional(),\n }),\n ),\n execute: ({ query, topK }) =>\n index.search({\n query,\n topK: topK ?? options.topK ?? 5,\n threshold: options.threshold,\n filter: options.filter,\n }),\n }) as Tool<{ query: string; topK?: number }, Array<VectorSearchResult<T, Metadata>>>;\n}\n\nfunction bestScore(queryEmbedding: Embedding, embeddings: Embedding[]): number | undefined {\n let best: number | undefined;\n for (const embedding of embeddings) {\n const score = cosineSimilarity(queryEmbedding.vector, embedding.vector);\n best = best === undefined ? score : Math.max(best, score);\n }\n return best;\n}\n\nfunction validateEmbeddingDimension(\n expectedDimension: number | undefined,\n embedding: Embedding,\n id: string,\n): number {\n if (expectedDimension === undefined) {\n return embedding.vector.length;\n }\n if (embedding.vector.length !== expectedDimension) {\n throw new Error(\n `Vector dimension mismatch: expected ${expectedDimension} dimensions but received ${embedding.vector.length} for ${id}`,\n );\n }\n return expectedDimension;\n}\n","import type { z } from \"zod\";\nimport { toProviderJsonSchema, type ZodSchema } from \"../schema/zod-schema\";\nimport type { Tool, ToolApprovalPolicy, ToolCallContext } from \"./tool\";\n\nexport type CreateToolOptions<\n InputSchema extends ZodSchema,\n OutputSchema extends ZodSchema | undefined = undefined,\n Output = unknown,\n> = {\n name: string;\n description: string;\n input: InputSchema;\n output?: OutputSchema;\n approval?: ToolApprovalPolicy<z.output<InputSchema>>;\n execute(\n args: z.output<InputSchema>,\n context: ToolCallContext,\n ): OutputSchema extends ZodSchema\n ? z.input<OutputSchema> | Promise<z.input<OutputSchema>>\n : Output | Promise<Output>;\n};\n\ntype CreateToolOutput<\n OutputSchema extends ZodSchema | undefined,\n Output,\n> = OutputSchema extends ZodSchema ? z.output<OutputSchema> : Output;\n\nexport function createTool<InputSchema extends ZodSchema, Output = unknown>(\n options: CreateToolOptions<InputSchema, undefined, Output> & { output?: undefined },\n): Tool<z.output<InputSchema>, Output>;\n\nexport function createTool<InputSchema extends ZodSchema, OutputSchema extends ZodSchema>(\n options: CreateToolOptions<InputSchema, OutputSchema>,\n): Tool<z.output<InputSchema>, z.output<OutputSchema>>;\n\nexport function createTool<\n InputSchema extends ZodSchema,\n OutputSchema extends ZodSchema | undefined = undefined,\n Output = unknown,\n>(\n options: CreateToolOptions<InputSchema, OutputSchema, Output>,\n): Tool<z.output<InputSchema>, CreateToolOutput<OutputSchema, Output>> {\n const parameters = toProviderJsonSchema(options.input);\n\n return {\n name: options.name,\n ...(options.approval === undefined ? {} : { approval: options.approval }),\n definition() {\n return {\n name: options.name,\n description: options.description,\n parameters,\n };\n },\n async call(args, context = {}): Promise<CreateToolOutput<OutputSchema, Output>> {\n const parsedArgs = options.input.parse(args);\n const result = await options.execute(parsedArgs, context);\n return (\n options.output === undefined ? result : options.output.parse(result)\n ) as CreateToolOutput<OutputSchema, Output>;\n },\n parseApprovalArgs(args): z.output<InputSchema> {\n return options.input.parse(args);\n },\n };\n}\n","import type { VectorMetadata, VectorMetadataValue } from \"../embeddings\";\n\nexport type VectorFilter =\n | { type: \"eq\"; key: string; value: VectorMetadataValue }\n | { type: \"gt\"; key: string; value: VectorMetadataValue }\n | { type: \"lt\"; key: string; value: VectorMetadataValue }\n | { type: \"and\"; filters: [VectorFilter, VectorFilter] }\n | { type: \"or\"; filters: [VectorFilter, VectorFilter] };\n\nexport const vectorFilter = {\n eq(key: string, value: VectorMetadataValue): VectorFilter {\n return { type: \"eq\", key, value };\n },\n gt(key: string, value: VectorMetadataValue): VectorFilter {\n return { type: \"gt\", key, value };\n },\n lt(key: string, value: VectorMetadataValue): VectorFilter {\n return { type: \"lt\", key, value };\n },\n and(left: VectorFilter, right: VectorFilter): VectorFilter {\n return { type: \"and\", filters: [left, right] };\n },\n or(left: VectorFilter, right: VectorFilter): VectorFilter {\n return { type: \"or\", filters: [left, right] };\n },\n};\n\nexport function matchesVectorFilter(\n metadata: VectorMetadata | undefined,\n filter: VectorFilter | undefined,\n): boolean {\n if (filter === undefined) {\n return true;\n }\n if (metadata === undefined) {\n return false;\n }\n\n switch (filter.type) {\n case \"eq\":\n return metadata[filter.key] === filter.value;\n case \"gt\":\n return compare(metadata[filter.key], filter.value) > 0;\n case \"lt\":\n return compare(metadata[filter.key], filter.value) < 0;\n case \"and\":\n return (\n matchesVectorFilter(metadata, filter.filters[0]) &&\n matchesVectorFilter(metadata, filter.filters[1])\n );\n case \"or\":\n return (\n matchesVectorFilter(metadata, filter.filters[0]) ||\n matchesVectorFilter(metadata, filter.filters[1])\n );\n }\n}\n\nfunction compare(left: VectorMetadataValue | undefined, right: VectorMetadataValue): number {\n if (typeof left === \"number\" && typeof right === \"number\") {\n return left - right;\n }\n if (typeof left === \"string\" && typeof right === \"string\") {\n return left.localeCompare(right);\n }\n if (typeof left === \"boolean\" && typeof right === \"boolean\") {\n return Number(left) - Number(right);\n }\n return 0;\n}\n","export type LshOptions = {\n type: \"lsh\";\n numTables: number;\n numHyperplanes: number;\n seed?: number | undefined;\n};\n\nexport class LshIndex {\n private readonly hyperplanes: number[][];\n private readonly tables: Array<Map<string, Set<string>>>;\n\n constructor(\n dimensions: number,\n private readonly options: LshOptions,\n ) {\n const rng = seededRandom(options.seed ?? 42);\n this.hyperplanes = [];\n for (let index = 0; index < options.numTables * options.numHyperplanes; index += 1) {\n const plane = Array.from({ length: dimensions }, () => rng() * 2 - 1);\n const norm = Math.sqrt(plane.reduce((sum, value) => sum + value ** 2, 0));\n this.hyperplanes.push(norm === 0 ? plane : plane.map((value) => value / norm));\n }\n this.tables = Array.from({ length: options.numTables }, () => new Map());\n }\n\n insert(id: string, vector: number[]): void {\n for (let table = 0; table < this.options.numTables; table += 1) {\n const hash = this.hash(vector, table);\n const bucket = this.tables[table]?.get(hash) ?? new Set<string>();\n bucket.add(id);\n this.tables[table]?.set(hash, bucket);\n }\n }\n\n query(vector: number[]): Set<string> {\n const candidates = new Set<string>();\n for (let table = 0; table < this.options.numTables; table += 1) {\n const hash = this.hash(vector, table);\n for (const id of this.tables[table]?.get(hash) ?? []) {\n candidates.add(id);\n }\n }\n return candidates;\n }\n\n private hash(vector: number[], table: number): string {\n let hash = \"\";\n const start = table * this.options.numHyperplanes;\n for (let offset = 0; offset < this.options.numHyperplanes; offset += 1) {\n const plane = this.hyperplanes[start + offset] as number[];\n const dot = vector.reduce((sum, value, index) => sum + value * (plane[index] ?? 0), 0);\n hash += dot >= 0 ? \"1\" : \"0\";\n }\n return hash;\n }\n}\n\nfunction seededRandom(seed: number): () => number {\n let state = seed >>> 0;\n return () => {\n state = (state * 1664525 + 1013904223) >>> 0;\n return state / 0x100000000;\n };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-YK4WAAS4.js";
|
|
4
4
|
import {
|
|
5
5
|
createTool
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-I47EHI45.js";
|
|
7
7
|
|
|
8
8
|
// src/skills/instructions.ts
|
|
9
9
|
function skillInstructions(skills) {
|
|
@@ -395,4 +395,4 @@ export {
|
|
|
395
395
|
SkillValidationError,
|
|
396
396
|
skill
|
|
397
397
|
};
|
|
398
|
-
//# sourceMappingURL=chunk-
|
|
398
|
+
//# sourceMappingURL=chunk-SHHSMV7O.js.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// src/schema/zod-schema.ts
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
function toProviderJsonSchema(schema) {
|
|
4
|
+
const jsonSchema = z.toJSONSchema(schema);
|
|
5
|
+
const { $schema: _schema, ...providerSchema } = jsonSchema;
|
|
6
|
+
return providerSchema;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export {
|
|
10
|
+
toProviderJsonSchema
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=chunk-WQKHFADH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/schema/zod-schema.ts"],"sourcesContent":["import { z } from \"zod\";\nimport type { JsonObject } from \"../completion/index\";\n\nexport type ZodSchema<T = unknown> = z.ZodType<T>;\n\nexport function toProviderJsonSchema(schema: z.ZodType): JsonObject {\n const jsonSchema = z.toJSONSchema(schema) as JsonObject;\n const { $schema: _schema, ...providerSchema } = jsonSchema;\n return providerSchema;\n}\n"],"mappings":";AAAA,SAAS,SAAS;AAKX,SAAS,qBAAqB,QAA+B;AAClE,QAAM,aAAa,EAAE,aAAa,MAAM;AACxC,QAAM,EAAE,SAAS,SAAS,GAAG,eAAe,IAAI;AAChD,SAAO;AACT;","names":[]}
|
|
@@ -7,10 +7,10 @@ import {
|
|
|
7
7
|
import {
|
|
8
8
|
ToolSet,
|
|
9
9
|
toolResultContentToText
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-AER5FGPK.js";
|
|
11
11
|
import {
|
|
12
12
|
createTool
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-I47EHI45.js";
|
|
14
14
|
import {
|
|
15
15
|
CompletionRequestBuilder,
|
|
16
16
|
Message,
|
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
Usage,
|
|
19
19
|
assertCompletionRequestSupported,
|
|
20
20
|
textFromAssistantContent
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-ZQQYFVO5.js";
|
|
22
22
|
import {
|
|
23
23
|
mapWithConcurrency
|
|
24
24
|
} from "./chunk-OIMLU4SF.js";
|
|
@@ -1752,4 +1752,4 @@ export {
|
|
|
1752
1752
|
Agent,
|
|
1753
1753
|
AgentSession
|
|
1754
1754
|
};
|
|
1755
|
-
//# sourceMappingURL=chunk-
|
|
1755
|
+
//# sourceMappingURL=chunk-YLN6QF5S.js.map
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import {
|
|
2
|
+
toProviderJsonSchema
|
|
3
|
+
} from "./chunk-WQKHFADH.js";
|
|
4
|
+
|
|
1
5
|
// src/completion/types.ts
|
|
2
6
|
var UserContent = {
|
|
3
7
|
text(text) {
|
|
@@ -42,6 +46,31 @@ var ToolContent = {
|
|
|
42
46
|
return callId === void 0 ? { type: "tool_result", id, content: normalized } : { type: "tool_result", id, callId, content: normalized };
|
|
43
47
|
}
|
|
44
48
|
};
|
|
49
|
+
function serializeToolResultOutput(output) {
|
|
50
|
+
if (typeof output === "string") {
|
|
51
|
+
return output;
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
const serialized = JSON.stringify(output);
|
|
55
|
+
return serialized === void 0 ? String(output) : serialized;
|
|
56
|
+
} catch {
|
|
57
|
+
return String(output);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function isToolResultContentArray(value) {
|
|
61
|
+
return Array.isArray(value) && value.length > 0 && value.every((item) => {
|
|
62
|
+
if (typeof item !== "object" || item === null || !("type" in item)) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
if (item.type === "text") {
|
|
66
|
+
return "text" in item && typeof item.text === "string";
|
|
67
|
+
}
|
|
68
|
+
if (item.type === "image") {
|
|
69
|
+
return "data" in item && typeof item.data === "string" && (!("mediaType" in item) || item.mediaType === void 0 || typeof item.mediaType === "string");
|
|
70
|
+
}
|
|
71
|
+
return false;
|
|
72
|
+
});
|
|
73
|
+
}
|
|
45
74
|
var AssistantContent = {
|
|
46
75
|
text(text) {
|
|
47
76
|
return { type: "text", text };
|
|
@@ -123,6 +152,10 @@ var Message = {
|
|
|
123
152
|
role: "tool",
|
|
124
153
|
content: Array.isArray(content) ? content : [content]
|
|
125
154
|
};
|
|
155
|
+
},
|
|
156
|
+
toolResult(id, output, options = {}) {
|
|
157
|
+
const content = isToolResultContentArray(output) ? output : serializeToolResultOutput(output);
|
|
158
|
+
return Message.tool(ToolContent.toolResult(id, content, options.callId));
|
|
126
159
|
}
|
|
127
160
|
};
|
|
128
161
|
var Usage = {
|
|
@@ -189,6 +222,93 @@ function requestHasFileDocumentInput(request) {
|
|
|
189
222
|
);
|
|
190
223
|
}
|
|
191
224
|
|
|
225
|
+
// src/completion/create-completion.ts
|
|
226
|
+
function createCompletion(model, options) {
|
|
227
|
+
return sendCompletion(model, options);
|
|
228
|
+
}
|
|
229
|
+
function createCompletionStream(model, options) {
|
|
230
|
+
const request = toCompletionRequest(options);
|
|
231
|
+
if (!isStreamingCompletionModel(model) || !model.capabilities.streaming) {
|
|
232
|
+
throw new Error("This completion model does not support streaming");
|
|
233
|
+
}
|
|
234
|
+
assertCompletionRequestSupported(model, request, { streaming: true });
|
|
235
|
+
return model.streamCompletion(request);
|
|
236
|
+
}
|
|
237
|
+
async function createParsedCompletion(model, options) {
|
|
238
|
+
const { schema, ...completionOptions } = options;
|
|
239
|
+
const request = toCompletionRequest(
|
|
240
|
+
{
|
|
241
|
+
...completionOptions,
|
|
242
|
+
outputSchema: toProviderJsonSchema(schema)
|
|
243
|
+
},
|
|
244
|
+
"createParsedCompletion"
|
|
245
|
+
);
|
|
246
|
+
assertCompletionRequestSupported(model, request);
|
|
247
|
+
const response = await model.completion(request);
|
|
248
|
+
const text = textFromAssistantContent(response.choice);
|
|
249
|
+
return {
|
|
250
|
+
data: parseCompletionData(text, schema),
|
|
251
|
+
text,
|
|
252
|
+
content: response.choice,
|
|
253
|
+
usage: response.usage,
|
|
254
|
+
response
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
async function sendCompletion(model, options) {
|
|
258
|
+
const request = toCompletionRequest(options);
|
|
259
|
+
assertCompletionRequestSupported(model, request);
|
|
260
|
+
const response = await model.completion(request);
|
|
261
|
+
return {
|
|
262
|
+
text: textFromAssistantContent(response.choice),
|
|
263
|
+
content: response.choice,
|
|
264
|
+
usage: response.usage,
|
|
265
|
+
response
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
function toCompletionRequest(options, helperName = "createCompletion") {
|
|
269
|
+
const chatHistory = [...options.messages ?? [], ...messagesFromInput(options.input)];
|
|
270
|
+
if (chatHistory.length === 0) {
|
|
271
|
+
throw new Error(`${helperName} requires input or messages.`);
|
|
272
|
+
}
|
|
273
|
+
const request = {
|
|
274
|
+
chatHistory,
|
|
275
|
+
documents: [...options.documents ?? []],
|
|
276
|
+
tools: [...options.tools ?? []]
|
|
277
|
+
};
|
|
278
|
+
if (options.instructions !== void 0 && options.instructions.length > 0) {
|
|
279
|
+
request.instructions = options.instructions;
|
|
280
|
+
}
|
|
281
|
+
if (options.temperature !== void 0) request.temperature = options.temperature;
|
|
282
|
+
if (options.maxTokens !== void 0) request.maxTokens = options.maxTokens;
|
|
283
|
+
if (options.toolChoice !== void 0) request.toolChoice = options.toolChoice;
|
|
284
|
+
if (options.outputSchema !== void 0) request.outputSchema = options.outputSchema;
|
|
285
|
+
if (options.params !== void 0) request.additionalParams = options.params;
|
|
286
|
+
return request;
|
|
287
|
+
}
|
|
288
|
+
function messagesFromInput(input) {
|
|
289
|
+
if (input === void 0) {
|
|
290
|
+
return [];
|
|
291
|
+
}
|
|
292
|
+
if (typeof input === "string") {
|
|
293
|
+
return [Message.user(input)];
|
|
294
|
+
}
|
|
295
|
+
return Array.isArray(input) ? [...input] : [input];
|
|
296
|
+
}
|
|
297
|
+
function isStreamingCompletionModel(model) {
|
|
298
|
+
return typeof model.streamCompletion === "function";
|
|
299
|
+
}
|
|
300
|
+
function parseCompletionData(text, schema) {
|
|
301
|
+
let json;
|
|
302
|
+
try {
|
|
303
|
+
json = JSON.parse(text);
|
|
304
|
+
} catch (error) {
|
|
305
|
+
throw new Error("createParsedCompletion expected the model response to be valid JSON.", {
|
|
306
|
+
cause: error
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
return schema.parse(json);
|
|
310
|
+
}
|
|
311
|
+
|
|
192
312
|
// src/completion/documents.ts
|
|
193
313
|
function normalizeDocuments(documents) {
|
|
194
314
|
if (documents.length === 0) {
|
|
@@ -317,8 +437,11 @@ export {
|
|
|
317
437
|
CompletionCapabilityError,
|
|
318
438
|
assertCompletionRequestSupported,
|
|
319
439
|
textFromAssistantContent,
|
|
440
|
+
createCompletion,
|
|
441
|
+
createCompletionStream,
|
|
442
|
+
createParsedCompletion,
|
|
320
443
|
normalizeDocuments,
|
|
321
444
|
formatDocument,
|
|
322
445
|
CompletionRequestBuilder
|
|
323
446
|
};
|
|
324
|
-
//# sourceMappingURL=chunk-
|
|
447
|
+
//# sourceMappingURL=chunk-ZQQYFVO5.js.map
|