@anvia/core 0.11.1 → 0.11.2

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.
Files changed (90) hide show
  1. package/dist/agent/index.d.ts +13 -31
  2. package/dist/agent/index.js +12 -34
  3. package/dist/{agent-DoF-xWGj.d.ts → agent-Bq2KtSaw.d.ts} +8 -125
  4. package/dist/audio-generation/index.d.ts +2 -1
  5. package/dist/audio-generation/index.js +1 -1
  6. package/dist/audio-generation/index.js.map +1 -1
  7. package/dist/{chunk-T22FYPE2.js → chunk-5EDHXYH5.js} +6 -6
  8. package/dist/{chunk-M4T4ID34.js → chunk-62RUYGMM.js} +6 -6
  9. package/dist/chunk-62RUYGMM.js.map +1 -0
  10. package/dist/{chunk-AREAH2X5.js → chunk-DOS77JZC.js} +3 -239
  11. package/dist/chunk-DOS77JZC.js.map +1 -0
  12. package/dist/{chunk-W4DZU6IW.js → chunk-JS5MGVNM.js} +50 -48
  13. package/dist/chunk-JS5MGVNM.js.map +1 -0
  14. package/dist/{chunk-XXT2UCAR.js → chunk-M6RPFHG7.js} +2 -2
  15. package/dist/chunk-M6RPFHG7.js.map +1 -0
  16. package/dist/chunk-N6REB3DH.js +205 -0
  17. package/dist/chunk-N6REB3DH.js.map +1 -0
  18. package/dist/chunk-NPZDYOE6.js +53 -0
  19. package/dist/chunk-NPZDYOE6.js.map +1 -0
  20. package/dist/{chunk-VJ7AZVLS.js → chunk-R75SGHCI.js} +4 -4
  21. package/dist/chunk-R75SGHCI.js.map +1 -0
  22. package/dist/{chunk-IFQVPV32.js → chunk-SISUMRUX.js} +308 -539
  23. package/dist/chunk-SISUMRUX.js.map +1 -0
  24. package/dist/{chunk-246MPVBE.js → chunk-V3WTT7TE.js} +2 -2
  25. package/dist/{chunk-BVGDCFQW.js → chunk-X3SWV6W6.js} +6 -6
  26. package/dist/completion/index.d.ts +3 -3
  27. package/dist/{create-completion-7GNUka0b.d.ts → create-completion-BEbtU5pX.d.ts} +1 -1
  28. package/dist/embeddings/index.d.ts +6 -5
  29. package/dist/embeddings/index.js +1 -1
  30. package/dist/evals/index.d.ts +9 -9
  31. package/dist/evals/index.js +16 -14
  32. package/dist/evals/index.js.map +1 -1
  33. package/dist/extractor/index.d.ts +9 -9
  34. package/dist/extractor/index.js +12 -10
  35. package/dist/hooks/index.d.ts +12 -0
  36. package/dist/hooks/index.js +18 -0
  37. package/dist/hooks/index.js.map +1 -0
  38. package/dist/image-generation/index.d.ts +2 -1
  39. package/dist/image-generation/index.js +1 -1
  40. package/dist/image-generation/index.js.map +1 -1
  41. package/dist/index-CTNzKidE.d.ts +198 -0
  42. package/dist/index.d.ts +17 -15
  43. package/dist/index.js +24 -29
  44. package/dist/internal/agent.d.ts +9 -9
  45. package/dist/internal/agent.js +9 -7
  46. package/dist/loaders/index.d.ts +8 -7
  47. package/dist/loaders/index.js.map +1 -1
  48. package/dist/mcp/index.d.ts +4 -4
  49. package/dist/memory/index.d.ts +4 -40
  50. package/dist/memory/index.js +1 -1
  51. package/dist/{middleware-D7nRBusA.d.ts → middleware-CG7l0rR3.d.ts} +4 -4
  52. package/dist/model-listing/index.d.ts +12 -11
  53. package/dist/model-listing/index.js +1 -1
  54. package/dist/model-listing/index.js.map +1 -1
  55. package/dist/observability/index.d.ts +3 -138
  56. package/dist/observability/index.js.map +1 -1
  57. package/dist/pipeline/index.d.ts +9 -9
  58. package/dist/pipeline/index.js +3 -3
  59. package/dist/request/index.d.ts +27 -0
  60. package/dist/request/index.js +23 -0
  61. package/dist/request/index.js.map +1 -0
  62. package/dist/skills/index.d.ts +4 -4
  63. package/dist/skills/index.js +6 -6
  64. package/dist/{think-tool-DmBR-YzU.d.ts → think-tool-B8Rqw2i_.d.ts} +1 -1
  65. package/dist/tool/index.d.ts +6 -6
  66. package/dist/tool/index.js +5 -5
  67. package/dist/{tool-Hlcb459D.d.ts → tool-BLypI31e.d.ts} +1 -1
  68. package/dist/transcription/index.d.ts +1 -1
  69. package/dist/{types-CP3iyh6j.d.ts → types-C8loR4il.d.ts} +1 -1
  70. package/dist/types-CCxnnJjU.d.ts +114 -0
  71. package/dist/{types-CiFIAGqq.d.ts → types-CIwm9p4w.d.ts} +2 -2
  72. package/dist/types-CNfjQ5rB.d.ts +42 -0
  73. package/dist/{types-DrkBkjzk.d.ts → types-D-YTJdLj.d.ts} +1 -1
  74. package/dist/{types-IB2e9u5M.d.ts → types-DHHZztGO.d.ts} +1 -1
  75. package/dist/{types-B0cuzkjP.d.ts → types-KKjICcrA.d.ts} +2 -2
  76. package/dist/ui/index.d.ts +2 -28
  77. package/dist/ui/index.js +1 -11
  78. package/dist/vector-store/index.d.ts +5 -5
  79. package/dist/vector-store/index.js +4 -4
  80. package/package.json +10 -2
  81. package/dist/chunk-AREAH2X5.js.map +0 -1
  82. package/dist/chunk-IFQVPV32.js.map +0 -1
  83. package/dist/chunk-M4T4ID34.js.map +0 -1
  84. package/dist/chunk-VJ7AZVLS.js.map +0 -1
  85. package/dist/chunk-W4DZU6IW.js.map +0 -1
  86. package/dist/chunk-XXT2UCAR.js.map +0 -1
  87. package/dist/types-C2ArxcON.d.ts +0 -65
  88. /package/dist/{chunk-T22FYPE2.js.map → chunk-5EDHXYH5.js.map} +0 -0
  89. /package/dist/{chunk-246MPVBE.js.map → chunk-V3WTT7TE.js.map} +0 -0
  90. /package/dist/{chunk-BVGDCFQW.js.map → chunk-X3SWV6W6.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ui/messages.ts"],"sourcesContent":["import {\n AssistantContent,\n type AssistantContent as AssistantContentType,\n type Message as CoreMessage,\n type JsonValue,\n Message,\n reasoningDisplayText,\n serializeToolResultOutput,\n ToolContent,\n type ToolContent as ToolContentType,\n type ToolResultContent,\n UserContent,\n type UserContent as UserContentType,\n} from \"../completion/types\";\nimport type { UIMessage, UIMessagePart } from \"./types\";\n\nexport function uiMessagesToCoreMessages(messages: UIMessage[]): CoreMessage[] {\n const coreMessages: CoreMessage[] = [];\n\n for (const message of messages) {\n const text = textFromUIParts(message.parts);\n\n if (message.role === \"system\") {\n if (text.length > 0) {\n coreMessages.push(Message.system(text));\n }\n continue;\n }\n\n if (message.role === \"user\") {\n const content: UserContentType[] = [];\n for (const part of message.parts) {\n if (part.type === \"text\") {\n content.push(UserContent.text(part.text));\n continue;\n }\n if (part.type === \"data\" && isUserContent(part.data)) {\n content.push(part.data);\n continue;\n }\n throw new TypeError(\n \"User UI messages can only be converted from text parts or image/document data parts.\",\n );\n }\n if (content.length > 0) {\n coreMessages.push(Message.user(content));\n }\n continue;\n }\n\n if (message.role === \"assistant\") {\n const content: AssistantContentType[] = [];\n const toolResults: ToolContentType[] = [];\n for (const part of message.parts) {\n if (part.type === \"text\" && part.text.length > 0) {\n content.push(AssistantContent.text(part.text));\n continue;\n }\n if (part.type === \"reasoning\" && part.text.length > 0) {\n content.push(AssistantContent.reasoning(part.text, part.reasoningId));\n continue;\n }\n if (\n part.type === \"tool\" &&\n (part.state === \"input-streaming\" ||\n part.state === \"input-available\" ||\n part.state === \"output-available\")\n ) {\n content.push(\n AssistantContent.toolCall(\n part.toolCallId,\n part.toolName,\n part.input ?? {},\n part.callId,\n ),\n );\n if (part.state === \"output-available\") {\n toolResults.push(\n ToolContent.toolResult(\n part.toolCallId,\n outputToToolResultContent(part.output),\n part.callId,\n ),\n );\n }\n }\n }\n if (content.length > 0) {\n coreMessages.push(Message.assistant(content, message.id));\n }\n if (toolResults.length > 0) {\n coreMessages.push(Message.tool(toolResults));\n }\n continue;\n }\n\n const toolResults: ToolContentType[] = [];\n for (const part of message.parts) {\n if (part.type !== \"tool\" || part.state !== \"output-available\") {\n continue;\n }\n toolResults.push(\n ToolContent.toolResult(\n part.toolCallId,\n outputToToolResultContent(part.output),\n part.callId,\n ),\n );\n }\n if (toolResults.length > 0) {\n coreMessages.push(Message.tool(toolResults));\n }\n }\n\n return coreMessages;\n}\n\nexport function coreMessagesToUIMessages(messages: CoreMessage[]): UIMessage[] {\n const uiMessages: UIMessage[] = [];\n\n for (const message of messages) {\n if (message.role === \"system\") {\n uiMessages.push({\n id: createId(\"msg\"),\n role: \"system\",\n parts: [{ id: createId(\"part\"), type: \"text\", text: message.content }],\n });\n continue;\n }\n\n if (message.role === \"user\") {\n const parts: UIMessagePart[] = [];\n for (const content of message.content) {\n if (content.type === \"text\") {\n parts.push({ id: createId(\"part\"), type: \"text\", text: content.text });\n } else {\n parts.push({\n id: createId(\"part\"),\n type: \"data\",\n name: content.type,\n data: content as JsonValue,\n });\n }\n }\n uiMessages.push({ id: createId(\"msg\"), role: \"user\", parts });\n continue;\n }\n\n if (message.role === \"assistant\") {\n const parts: UIMessagePart[] = [];\n for (const content of message.content) {\n if (content.type === \"text\") {\n parts.push({ id: createId(\"part\"), type: \"text\", text: content.text });\n continue;\n }\n if (content.type === \"reasoning\") {\n const part: UIMessagePart = {\n id: createId(\"part\"),\n type: \"reasoning\",\n text: reasoningDisplayText(content),\n };\n if (content.id !== undefined) {\n part.reasoningId = content.id;\n }\n parts.push(part);\n continue;\n }\n if (content.type === \"tool_call\") {\n const part: UIMessagePart = {\n id: toolPartId(content.id),\n type: \"tool\",\n toolName: content.function.name,\n toolCallId: content.id,\n state: \"input-available\",\n input: content.function.arguments,\n };\n if (content.callId !== undefined) {\n part.callId = content.callId;\n }\n parts.push(part);\n continue;\n }\n parts.push({\n id: createId(\"part\"),\n type: \"data\",\n name: content.type,\n data: content as JsonValue,\n });\n }\n uiMessages.push({ id: message.id ?? createId(\"msg\"), role: \"assistant\", parts });\n continue;\n }\n\n const parts: UIMessagePart[] = [];\n for (const content of message.content) {\n const part: UIMessagePart = {\n id: toolPartId(content.id),\n type: \"tool\",\n toolName: \"tool\",\n toolCallId: content.id,\n state: \"output-available\",\n output: toolResultContentToJson(content.content),\n };\n if (content.callId !== undefined) {\n part.callId = content.callId;\n }\n parts.push(part);\n }\n uiMessages.push({ id: createId(\"msg\"), role: \"tool\", parts });\n }\n\n return uiMessages;\n}\n\nexport function isUIMessage(value: unknown): value is UIMessage {\n return (\n isRecord(value) &&\n typeof value.id === \"string\" &&\n isUIMessageRole(value.role) &&\n Array.isArray(value.parts)\n );\n}\n\nexport function isUIMessageArray(value: unknown): value is UIMessage[] {\n return Array.isArray(value) && value.every(isUIMessage);\n}\n\nfunction textFromUIParts(parts: UIMessagePart[]): string {\n return parts.flatMap((part) => (part.type === \"text\" ? [part.text] : [])).join(\"\");\n}\n\nfunction outputToToolResultContent(output: JsonValue | undefined): ToolResultContent[] {\n return [{ type: \"text\", text: serializeToolResultOutput(output ?? null) }];\n}\n\nfunction toolResultContentToJson(content: ToolResultContent[]): JsonValue {\n if (content.length === 1 && content[0]?.type === \"text\") {\n return content[0].text;\n }\n return content as JsonValue;\n}\n\nfunction isUserContent(value: unknown): value is UserContentType {\n if (!isRecord(value)) {\n return false;\n }\n\n if (value.type === \"text\") {\n return typeof value.text === \"string\";\n }\n\n if (value.type === \"image\") {\n return isImageContent(value);\n }\n\n if (value.type === \"document\") {\n return isDocumentContent(value);\n }\n\n return false;\n}\n\nfunction isImageContent(value: Record<string, unknown>): boolean {\n if (!isRecord(value.source)) {\n return false;\n }\n\n if (value.source.type === \"url\") {\n return typeof value.source.url === \"string\";\n }\n\n if (value.source.type === \"base64\") {\n return typeof value.source.data === \"string\" && typeof value.source.mediaType === \"string\";\n }\n\n return false;\n}\n\nfunction isDocumentContent(value: Record<string, unknown>): boolean {\n if (!isRecord(value.source)) {\n return false;\n }\n\n if (value.source.type === \"url\") {\n return typeof value.source.url === \"string\" && typeof value.source.mediaType === \"string\";\n }\n\n if (value.source.type === \"base64\") {\n return typeof value.source.data === \"string\" && typeof value.source.mediaType === \"string\";\n }\n\n if (value.source.type === \"text\") {\n return (\n typeof value.source.text === \"string\" &&\n (value.source.mediaType === undefined || typeof value.source.mediaType === \"string\")\n );\n }\n\n return false;\n}\n\nfunction toolPartId(toolCallId: string): string {\n return `tool_${toolCallId}`;\n}\n\nlet nextId = 0;\n\nfunction createId(prefix: string): string {\n const random = globalThis.crypto?.randomUUID?.();\n if (random !== undefined) {\n return `${prefix}_${random}`;\n }\n nextId += 1;\n return `${prefix}_${nextId.toString(36)}`;\n}\n\nfunction isUIMessageRole(value: unknown): value is UIMessage[\"role\"] {\n return value === \"system\" || value === \"user\" || value === \"assistant\" || value === \"tool\";\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n"],"mappings":"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","names":["toolResults","parts"]}
@@ -2,7 +2,51 @@ import {
2
2
  mapWithConcurrency
3
3
  } from "./chunk-OIMLU4SF.js";
4
4
 
5
- // src/embeddings/index.ts
5
+ // src/embeddings/distance.ts
6
+ function dotProduct(left, right) {
7
+ assertSameDimensions(left, right);
8
+ return left.reduce((sum, value, index) => sum + value * right[index], 0);
9
+ }
10
+ function cosineSimilarity(left, right) {
11
+ assertSameDimensions(left, right);
12
+ const leftMagnitude = magnitude(left);
13
+ const rightMagnitude = magnitude(right);
14
+ if (leftMagnitude === 0 || rightMagnitude === 0) {
15
+ return 0;
16
+ }
17
+ return dotProduct(left, right) / (leftMagnitude * rightMagnitude);
18
+ }
19
+ function angularDistance(left, right) {
20
+ const similarity = Math.max(-1, Math.min(1, cosineSimilarity(left, right)));
21
+ return Math.acos(similarity) / Math.PI;
22
+ }
23
+ function euclideanDistance(left, right) {
24
+ assertSameDimensions(left, right);
25
+ return Math.sqrt(
26
+ left.reduce((sum, value, index) => sum + (value - right[index]) ** 2, 0)
27
+ );
28
+ }
29
+ function manhattanDistance(left, right) {
30
+ assertSameDimensions(left, right);
31
+ return left.reduce((sum, value, index) => sum + Math.abs(value - right[index]), 0);
32
+ }
33
+ function chebyshevDistance(left, right) {
34
+ assertSameDimensions(left, right);
35
+ return left.reduce(
36
+ (max, value, index) => Math.max(max, Math.abs(value - right[index])),
37
+ 0
38
+ );
39
+ }
40
+ function magnitude(vector) {
41
+ return Math.sqrt(vector.reduce((sum, value) => sum + value ** 2, 0));
42
+ }
43
+ function assertSameDimensions(left, right) {
44
+ if (left.length !== right.length) {
45
+ throw new Error(`Vector dimension mismatch: ${left.length} !== ${right.length}`);
46
+ }
47
+ }
48
+
49
+ // src/embeddings/embed.ts
6
50
  async function embedText(model, text) {
7
51
  const embeddings = await embedTexts(model, [text]);
8
52
  const embedding = embeddings[0];
@@ -72,48 +116,6 @@ async function embedDocuments(model, documents, options) {
72
116
  embeddings: byDocument.get(index) ?? []
73
117
  }));
74
118
  }
75
- function dotProduct(left, right) {
76
- assertSameDimensions(left, right);
77
- return left.reduce((sum, value, index) => sum + value * right[index], 0);
78
- }
79
- function cosineSimilarity(left, right) {
80
- assertSameDimensions(left, right);
81
- const leftMagnitude = magnitude(left);
82
- const rightMagnitude = magnitude(right);
83
- if (leftMagnitude === 0 || rightMagnitude === 0) {
84
- return 0;
85
- }
86
- return dotProduct(left, right) / (leftMagnitude * rightMagnitude);
87
- }
88
- function angularDistance(left, right) {
89
- const similarity = Math.max(-1, Math.min(1, cosineSimilarity(left, right)));
90
- return Math.acos(similarity) / Math.PI;
91
- }
92
- function euclideanDistance(left, right) {
93
- assertSameDimensions(left, right);
94
- return Math.sqrt(
95
- left.reduce((sum, value, index) => sum + (value - right[index]) ** 2, 0)
96
- );
97
- }
98
- function manhattanDistance(left, right) {
99
- assertSameDimensions(left, right);
100
- return left.reduce((sum, value, index) => sum + Math.abs(value - right[index]), 0);
101
- }
102
- function chebyshevDistance(left, right) {
103
- assertSameDimensions(left, right);
104
- return left.reduce(
105
- (max, value, index) => Math.max(max, Math.abs(value - right[index])),
106
- 0
107
- );
108
- }
109
- function magnitude(vector) {
110
- return Math.sqrt(vector.reduce((sum, value) => sum + value ** 2, 0));
111
- }
112
- function assertSameDimensions(left, right) {
113
- if (left.length !== right.length) {
114
- throw new Error(`Vector dimension mismatch: ${left.length} !== ${right.length}`);
115
- }
116
- }
117
119
  function chunk(items, size) {
118
120
  const chunks = [];
119
121
  for (let index = 0; index < items.length; index += size) {
@@ -123,14 +125,14 @@ function chunk(items, size) {
123
125
  }
124
126
 
125
127
  export {
126
- embedText,
127
- embedTexts,
128
- embedDocuments,
129
128
  dotProduct,
130
129
  cosineSimilarity,
131
130
  angularDistance,
132
131
  euclideanDistance,
133
132
  manhattanDistance,
134
- chebyshevDistance
133
+ chebyshevDistance,
134
+ embedText,
135
+ embedTexts,
136
+ embedDocuments
135
137
  };
136
- //# sourceMappingURL=chunk-W4DZU6IW.js.map
138
+ //# sourceMappingURL=chunk-JS5MGVNM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/embeddings/distance.ts","../src/embeddings/embed.ts"],"sourcesContent":["export function dotProduct(left: number[], right: number[]): number {\n assertSameDimensions(left, right);\n return left.reduce((sum, value, index) => sum + value * (right[index] as number), 0);\n}\n\nexport function cosineSimilarity(left: number[], right: number[]): number {\n assertSameDimensions(left, right);\n const leftMagnitude = magnitude(left);\n const rightMagnitude = magnitude(right);\n if (leftMagnitude === 0 || rightMagnitude === 0) {\n return 0;\n }\n return dotProduct(left, right) / (leftMagnitude * rightMagnitude);\n}\n\nexport function angularDistance(left: number[], right: number[]): number {\n const similarity = Math.max(-1, Math.min(1, cosineSimilarity(left, right)));\n return Math.acos(similarity) / Math.PI;\n}\n\nexport function euclideanDistance(left: number[], right: number[]): number {\n assertSameDimensions(left, right);\n return Math.sqrt(\n left.reduce((sum, value, index) => sum + (value - (right[index] as number)) ** 2, 0),\n );\n}\n\nexport function manhattanDistance(left: number[], right: number[]): number {\n assertSameDimensions(left, right);\n return left.reduce((sum, value, index) => sum + Math.abs(value - (right[index] as number)), 0);\n}\n\nexport function chebyshevDistance(left: number[], right: number[]): number {\n assertSameDimensions(left, right);\n return left.reduce(\n (max, value, index) => Math.max(max, Math.abs(value - (right[index] as number))),\n 0,\n );\n}\n\nfunction magnitude(vector: number[]): number {\n return Math.sqrt(vector.reduce((sum, value) => sum + value ** 2, 0));\n}\n\nfunction assertSameDimensions(left: number[], right: number[]): void {\n if (left.length !== right.length) {\n throw new Error(`Vector dimension mismatch: ${left.length} !== ${right.length}`);\n }\n}\n","import { mapWithConcurrency } from \"../internal/concurrency\";\nimport type {\n EmbedDocumentsOptions,\n EmbeddedDocument,\n Embedding,\n EmbeddingModel,\n VectorMetadata,\n} from \"./types\";\n\nexport async function embedText(model: EmbeddingModel, text: string): Promise<Embedding> {\n const embeddings = await embedTexts(model, [text]);\n const embedding = embeddings[0];\n if (embedding === undefined) {\n throw new Error(\"Embedding model returned no embeddings\");\n }\n return embedding;\n}\n\nexport async function embedTexts(model: EmbeddingModel, texts: string[]): Promise<Embedding[]> {\n if (texts.length === 0) {\n return [];\n }\n\n const maxBatchSize = Math.max(1, Math.trunc(model.maxBatchSize ?? texts.length));\n const batches: string[][] = [];\n for (let index = 0; index < texts.length; index += maxBatchSize) {\n batches.push(texts.slice(index, index + maxBatchSize));\n }\n\n const results = await mapWithConcurrency(batches, 1, (batch) => model.embedTexts(batch));\n const embeddings = results.flat();\n if (embeddings.length !== texts.length) {\n throw new Error(\n `Embedding model returned ${embeddings.length} embeddings for ${texts.length} texts`,\n );\n }\n return embeddings;\n}\n\nexport async function embedDocuments<T, Metadata extends VectorMetadata = VectorMetadata>(\n model: EmbeddingModel,\n documents: T[],\n options: EmbedDocumentsOptions<T, Metadata>,\n): Promise<Array<EmbeddedDocument<T, Metadata>>> {\n const prepared = documents.map((document, index) => {\n const content = options.content(document, index);\n const texts = Array.isArray(content) ? content : [content];\n return {\n id: options.id?.(document, index) ?? `doc${index}`,\n document,\n metadata: options.metadata?.(document, index),\n texts,\n };\n });\n\n const flatTexts = prepared.flatMap((item, documentIndex) =>\n item.texts.map((text) => ({ documentIndex, text })),\n );\n const embeddings = await mapWithConcurrency(\n chunk(flatTexts, Math.max(1, Math.trunc(model.maxBatchSize ?? (flatTexts.length || 1)))),\n Math.max(1, Math.trunc(options.concurrency ?? 1)),\n async (batch) => {\n const batchEmbeddings = await model.embedTexts(batch.map((item) => item.text));\n if (batchEmbeddings.length !== batch.length) {\n throw new Error(\n `Embedding model returned ${batchEmbeddings.length} embeddings for ${batch.length} texts`,\n );\n }\n return batch.map((item, index) => ({\n documentIndex: item.documentIndex,\n embedding: batchEmbeddings[index] as Embedding,\n }));\n },\n );\n\n const byDocument = new Map<number, Embedding[]>();\n for (const item of embeddings.flat()) {\n const list = byDocument.get(item.documentIndex) ?? [];\n list.push(item.embedding);\n byDocument.set(item.documentIndex, list);\n }\n\n return prepared.map((item, index) => ({\n id: item.id,\n document: item.document,\n ...(item.metadata !== undefined && { metadata: item.metadata }),\n embeddings: byDocument.get(index) ?? [],\n }));\n}\n\nfunction chunk<T>(items: T[], size: number): T[][] {\n const chunks: T[][] = [];\n for (let index = 0; index < items.length; index += size) {\n chunks.push(items.slice(index, index + size));\n }\n return chunks;\n}\n"],"mappings":"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","names":[]}
@@ -1,4 +1,4 @@
1
- // src/memory/index.ts
1
+ // src/memory/options.ts
2
2
  function resolveMemoryOptions(options = {}) {
3
3
  return {
4
4
  savePolicy: options.savePolicy ?? "message"
@@ -8,4 +8,4 @@ function resolveMemoryOptions(options = {}) {
8
8
  export {
9
9
  resolveMemoryOptions
10
10
  };
11
- //# sourceMappingURL=chunk-XXT2UCAR.js.map
11
+ //# sourceMappingURL=chunk-M6RPFHG7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/memory/options.ts"],"sourcesContent":["import type { MemoryOptions, ResolvedMemoryOptions } from \"./types\";\n\nexport function resolveMemoryOptions(options: MemoryOptions = {}): ResolvedMemoryOptions {\n return {\n savePolicy: options.savePolicy ?? \"message\",\n };\n}\n"],"mappings":";AAEO,SAAS,qBAAqB,UAAyB,CAAC,GAA0B;AACvF,SAAO;AAAA,IACL,YAAY,QAAQ,cAAc;AAAA,EACpC;AACF;","names":[]}
@@ -0,0 +1,205 @@
1
+ import {
2
+ PromptRequest
3
+ } from "./chunk-SISUMRUX.js";
4
+ import {
5
+ isSkillTool
6
+ } from "./chunk-YK4WAAS4.js";
7
+ import {
8
+ ToolSet
9
+ } from "./chunk-X3SWV6W6.js";
10
+ import {
11
+ createTool
12
+ } from "./chunk-5EDHXYH5.js";
13
+ import {
14
+ isStreamingCompletionModel
15
+ } from "./chunk-5G3VME2D.js";
16
+ import {
17
+ compact
18
+ } from "./chunk-MMHG7WAM.js";
19
+
20
+ // src/agent/agent.ts
21
+ import { z } from "zod";
22
+
23
+ // src/agent/ids.ts
24
+ function normalizeAgentId(id) {
25
+ if (typeof id !== "string") {
26
+ throw new TypeError("Agent id must be a string.");
27
+ }
28
+ const normalized = id.trim();
29
+ if (normalized.length === 0) {
30
+ throw new TypeError("Agent id must be a non-empty string.");
31
+ }
32
+ return normalized;
33
+ }
34
+
35
+ // src/agent/agent.ts
36
+ var DEFAULT_MAX_TURNS = 20;
37
+ var Agent = class {
38
+ id;
39
+ name;
40
+ description;
41
+ model;
42
+ instructions;
43
+ staticContext;
44
+ temperature;
45
+ maxTokens;
46
+ additionalParams;
47
+ toolSet;
48
+ toolChoice;
49
+ defaultMaxTurns;
50
+ hook;
51
+ outputSchema;
52
+ observers;
53
+ approvals;
54
+ dynamicContexts;
55
+ dynamicTools;
56
+ middlewares;
57
+ /**
58
+ * @deprecated Use `middlewares` instead.
59
+ */
60
+ toolMiddlewares;
61
+ memory;
62
+ eventStore;
63
+ constructor(options) {
64
+ this.id = normalizeAgentId(options.id);
65
+ this.name = options.name;
66
+ this.description = options.description;
67
+ this.model = options.model;
68
+ this.instructions = options.instructions;
69
+ this.staticContext = options.staticContext ?? [];
70
+ this.temperature = options.temperature;
71
+ this.maxTokens = options.maxTokens;
72
+ this.additionalParams = options.additionalParams;
73
+ this.toolSet = options.toolSet ?? new ToolSet();
74
+ this.toolChoice = options.toolChoice;
75
+ this.defaultMaxTurns = options.defaultMaxTurns ?? DEFAULT_MAX_TURNS;
76
+ this.hook = options.hook;
77
+ this.outputSchema = options.outputSchema;
78
+ this.observers = options.observers ?? [];
79
+ this.approvals = options.approvals;
80
+ this.dynamicContexts = options.dynamicContexts ?? [];
81
+ this.dynamicTools = options.dynamicTools ?? [];
82
+ this.middlewares = options.middlewares ?? options.toolMiddlewares ?? [];
83
+ this.toolMiddlewares = this.middlewares;
84
+ this.memory = options.memory;
85
+ this.eventStore = options.eventStore;
86
+ }
87
+ prompt(prompt) {
88
+ return PromptRequest.fromAgent(this, prompt);
89
+ }
90
+ session(sessionId, options = {}) {
91
+ if (this.memory === void 0) {
92
+ throw new Error(`Agent "${this.id}" has no memory store configured.`);
93
+ }
94
+ const normalized = sessionId.trim();
95
+ if (normalized.length === 0) {
96
+ throw new TypeError("Session id must be a non-empty string.");
97
+ }
98
+ return new AgentSession(this, {
99
+ sessionId: normalized,
100
+ ...options.userId !== void 0 && { userId: options.userId },
101
+ ...options.metadata !== void 0 && { metadata: options.metadata }
102
+ });
103
+ }
104
+ asTool(options) {
105
+ const description = options.description ?? this.description ?? `Prompt the ${options.name} agent.`;
106
+ return createTool({
107
+ name: options.name,
108
+ description,
109
+ input: z.object({
110
+ prompt: z.string().describe("The prompt to send to the agent.")
111
+ }),
112
+ output: z.string(),
113
+ execute: async ({ prompt }, context) => {
114
+ const request = this.prompt(prompt);
115
+ const childRequest = options.maxTurns === void 0 ? request : request.maxTurns(options.maxTurns);
116
+ if (options.stream === true && context.emitStreamEvent !== void 0 && this.model.capabilities.streaming && isStreamingCompletionModel(this.model)) {
117
+ let output = "";
118
+ for await (const event of childRequest.stream()) {
119
+ await context.emitStreamEvent(
120
+ compact({
121
+ agentId: this.id,
122
+ agentName: this.name,
123
+ event
124
+ })
125
+ );
126
+ if (event.type === "final") {
127
+ output = event.output;
128
+ }
129
+ }
130
+ return output;
131
+ }
132
+ const response = await childRequest.send();
133
+ return response.output;
134
+ }
135
+ });
136
+ }
137
+ getTool(toolName) {
138
+ const staticTool = this.toolSet.get(toolName);
139
+ if (staticTool !== void 0) {
140
+ return staticTool;
141
+ }
142
+ for (const registration of this.dynamicTools) {
143
+ const dynamicTool = dynamicToolSetFromIndex(registration.index)?.get(toolName);
144
+ if (dynamicTool !== void 0) {
145
+ return dynamicTool;
146
+ }
147
+ }
148
+ return void 0;
149
+ }
150
+ async callTool(toolName, args, context) {
151
+ if (this.toolSet.contains(toolName)) {
152
+ return this.toolSet.call(toolName, args, context);
153
+ }
154
+ for (const registration of this.dynamicTools) {
155
+ const toolSet = dynamicToolSetFromIndex(registration.index);
156
+ if (toolSet?.contains(toolName)) {
157
+ return toolSet.call(toolName, args, context);
158
+ }
159
+ }
160
+ return this.toolSet.call(toolName, args, context);
161
+ }
162
+ shouldApplyToolMiddleware(toolName) {
163
+ return !isSkillTool(this.getTool(toolName));
164
+ }
165
+ };
166
+ var AgentSession = class {
167
+ constructor(agent, context) {
168
+ this.agent = agent;
169
+ this.context = context;
170
+ }
171
+ agent;
172
+ context;
173
+ prompt(prompt) {
174
+ if (Array.isArray(prompt)) {
175
+ throw new TypeError("AgentSession.prompt does not accept Message[] transcripts.");
176
+ }
177
+ return PromptRequest.fromAgent(this.agent, prompt, { memoryContext: this.context });
178
+ }
179
+ async messages() {
180
+ const memory = this.agent.memory;
181
+ if (memory === void 0) {
182
+ throw new Error(`Agent "${this.agent.id}" has no memory store configured.`);
183
+ }
184
+ return memory.store.load(this.context);
185
+ }
186
+ async clear() {
187
+ const memory = this.agent.memory;
188
+ if (memory === void 0) {
189
+ throw new Error(`Agent "${this.agent.id}" has no memory store configured.`);
190
+ }
191
+ await memory.store.clear(this.context);
192
+ }
193
+ };
194
+ function dynamicToolSetFromIndex(index) {
195
+ const maybeIndex = index;
196
+ return maybeIndex.toolSet instanceof ToolSet ? maybeIndex.toolSet : void 0;
197
+ }
198
+
199
+ export {
200
+ normalizeAgentId,
201
+ DEFAULT_MAX_TURNS,
202
+ Agent,
203
+ AgentSession
204
+ };
205
+ //# sourceMappingURL=chunk-N6REB3DH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/agent/agent.ts","../src/agent/ids.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { isStreamingCompletionModel } from \"../completion/create-completion\";\nimport type {\n CompletionModel,\n Document,\n JsonObject,\n JsonValue,\n Message as MessageType,\n ToolChoice,\n} from \"../completion/index\";\nimport type { PromptHook } from \"../hooks\";\nimport { compact } from \"../internal/compact\";\nimport type { MemoryRegistration, SessionOptions } from \"../memory/types\";\nimport type { AgentObserverRegistration } from \"../observability\";\nimport { PromptRequest } from \"../request\";\nimport { createTool } from \"../tool/create-tool\";\nimport type { ToolSearchDocument } from \"../tool/dynamic-tools\";\nimport type { AgentMiddleware } from \"../tool/middleware\";\nimport { isSkillTool } from \"../tool/skill-tool-marker\";\nimport type {\n AnyTool,\n NormalizedToolOutput,\n Tool,\n ToolApprovalsOptions,\n ToolCallContext,\n} from \"../tool/tool\";\nimport { ToolSet } from \"../tool/tool-set\";\nimport type { VectorSearchIndex } from \"../vector-store\";\nimport { normalizeAgentId } from \"./ids\";\nimport type {\n AgentEventStoreRegistration,\n AgentOptions,\n AgentToolOptions,\n DynamicContextRegistration,\n DynamicToolRegistration,\n} from \"./types\";\n\nexport const DEFAULT_MAX_TURNS = 20;\n\nexport class Agent<M extends CompletionModel = CompletionModel> {\n readonly id: string;\n readonly name: string | undefined;\n readonly description: string | undefined;\n readonly model: M;\n readonly instructions: string | undefined;\n readonly staticContext: Document[];\n readonly temperature: number | undefined;\n readonly maxTokens: number | undefined;\n readonly additionalParams: JsonValue | undefined;\n readonly toolSet: ToolSet;\n readonly toolChoice: ToolChoice | undefined;\n readonly defaultMaxTurns: number | undefined;\n readonly hook: PromptHook | undefined;\n readonly outputSchema: JsonObject | undefined;\n readonly observers: AgentObserverRegistration[];\n readonly approvals: ToolApprovalsOptions | undefined;\n readonly dynamicContexts: DynamicContextRegistration[];\n readonly dynamicTools: DynamicToolRegistration[];\n readonly middlewares: AgentMiddleware[];\n /**\n * @deprecated Use `middlewares` instead.\n */\n readonly toolMiddlewares: AgentMiddleware[];\n readonly memory: MemoryRegistration | undefined;\n readonly eventStore: AgentEventStoreRegistration | undefined;\n\n constructor(options: AgentOptions<M>) {\n this.id = normalizeAgentId(options.id);\n this.name = options.name;\n this.description = options.description;\n this.model = options.model;\n this.instructions = options.instructions;\n this.staticContext = options.staticContext ?? [];\n this.temperature = options.temperature;\n this.maxTokens = options.maxTokens;\n this.additionalParams = options.additionalParams;\n this.toolSet = options.toolSet ?? new ToolSet();\n this.toolChoice = options.toolChoice;\n this.defaultMaxTurns = options.defaultMaxTurns ?? DEFAULT_MAX_TURNS;\n this.hook = options.hook;\n this.outputSchema = options.outputSchema;\n this.observers = options.observers ?? [];\n this.approvals = options.approvals;\n this.dynamicContexts = options.dynamicContexts ?? [];\n this.dynamicTools = options.dynamicTools ?? [];\n this.middlewares = options.middlewares ?? options.toolMiddlewares ?? [];\n this.toolMiddlewares = this.middlewares;\n this.memory = options.memory;\n this.eventStore = options.eventStore;\n }\n\n prompt(prompt: string | MessageType | MessageType[]): PromptRequest<M> {\n return PromptRequest.fromAgent(this, prompt);\n }\n\n session(sessionId: string, options: SessionOptions = {}): AgentSession<M> {\n if (this.memory === undefined) {\n throw new Error(`Agent \"${this.id}\" has no memory store configured.`);\n }\n const normalized = sessionId.trim();\n if (normalized.length === 0) {\n throw new TypeError(\"Session id must be a non-empty string.\");\n }\n return new AgentSession(this, {\n sessionId: normalized,\n ...(options.userId !== undefined && { userId: options.userId }),\n ...(options.metadata !== undefined && { metadata: options.metadata }),\n });\n }\n\n asTool(options: AgentToolOptions): Tool<{ prompt: string }, string> {\n const description =\n options.description ?? this.description ?? `Prompt the ${options.name} agent.`;\n\n return createTool({\n name: options.name,\n description,\n input: z.object({\n prompt: z.string().describe(\"The prompt to send to the agent.\"),\n }),\n output: z.string(),\n execute: async ({ prompt }, context: ToolCallContext) => {\n const request = this.prompt(prompt);\n const childRequest =\n options.maxTurns === undefined ? request : request.maxTurns(options.maxTurns);\n if (\n options.stream === true &&\n context.emitStreamEvent !== undefined &&\n this.model.capabilities.streaming &&\n isStreamingCompletionModel(this.model)\n ) {\n let output = \"\";\n for await (const event of childRequest.stream()) {\n await context.emitStreamEvent(\n compact({\n agentId: this.id,\n agentName: this.name,\n event,\n }),\n );\n if (event.type === \"final\") {\n output = event.output;\n }\n }\n return output;\n }\n const response = await childRequest.send();\n return response.output;\n },\n });\n }\n\n getTool(toolName: string): AnyTool | undefined {\n const staticTool = this.toolSet.get(toolName);\n if (staticTool !== undefined) {\n return staticTool;\n }\n\n for (const registration of this.dynamicTools) {\n const dynamicTool = dynamicToolSetFromIndex(registration.index)?.get(toolName);\n if (dynamicTool !== undefined) {\n return dynamicTool;\n }\n }\n\n return undefined;\n }\n\n async callTool(\n toolName: string,\n args: string,\n context?: ToolCallContext,\n ): Promise<NormalizedToolOutput> {\n if (this.toolSet.contains(toolName)) {\n return this.toolSet.call(toolName, args, context);\n }\n\n for (const registration of this.dynamicTools) {\n const toolSet = dynamicToolSetFromIndex(registration.index);\n if (toolSet?.contains(toolName)) {\n return toolSet.call(toolName, args, context);\n }\n }\n\n return this.toolSet.call(toolName, args, context);\n }\n\n shouldApplyToolMiddleware(toolName: string): boolean {\n return !isSkillTool(this.getTool(toolName));\n }\n}\n\nexport class AgentSession<M extends CompletionModel = CompletionModel> {\n constructor(\n private readonly agent: Agent<M>,\n private readonly context: {\n sessionId: string;\n userId?: string | undefined;\n metadata?: JsonObject | undefined;\n },\n ) {}\n\n prompt(prompt: string | MessageType): PromptRequest<M> {\n if (Array.isArray(prompt)) {\n throw new TypeError(\"AgentSession.prompt does not accept Message[] transcripts.\");\n }\n return PromptRequest.fromAgent(this.agent, prompt, { memoryContext: this.context });\n }\n\n async messages(): Promise<MessageType[]> {\n const memory = this.agent.memory;\n if (memory === undefined) {\n throw new Error(`Agent \"${this.agent.id}\" has no memory store configured.`);\n }\n return memory.store.load(this.context);\n }\n\n async clear(): Promise<void> {\n const memory = this.agent.memory;\n if (memory === undefined) {\n throw new Error(`Agent \"${this.agent.id}\" has no memory store configured.`);\n }\n await memory.store.clear(this.context);\n }\n}\n\nfunction dynamicToolSetFromIndex(\n index: VectorSearchIndex<ToolSearchDocument>,\n): ToolSet | undefined {\n const maybeIndex = index as { toolSet?: unknown };\n return maybeIndex.toolSet instanceof ToolSet ? maybeIndex.toolSet : undefined;\n}\n","export function normalizeAgentId(id: string): string {\n if (typeof id !== \"string\") {\n throw new TypeError(\"Agent id must be a string.\");\n }\n\n const normalized = id.trim();\n if (normalized.length === 0) {\n throw new TypeError(\"Agent id must be a non-empty string.\");\n }\n\n return normalized;\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,53 @@
1
+ import {
2
+ compact
3
+ } from "./chunk-MMHG7WAM.js";
4
+
5
+ // src/hooks/control.ts
6
+ function createHook(hook) {
7
+ return hook;
8
+ }
9
+ function cancelPrompt(reason) {
10
+ return { type: "terminate", reason };
11
+ }
12
+ function skipTool(reason) {
13
+ return { type: "skip", reason };
14
+ }
15
+ function requestToolApproval(options = {}) {
16
+ return compact({
17
+ type: "approval_request",
18
+ reason: options.reason,
19
+ rejectMessage: options.rejectMessage
20
+ });
21
+ }
22
+ var runControl = {
23
+ continue() {
24
+ return { type: "continue" };
25
+ },
26
+ cancel(reason) {
27
+ return cancelPrompt(reason);
28
+ }
29
+ };
30
+ var toolCallControl = {
31
+ run() {
32
+ return { type: "continue" };
33
+ },
34
+ skip(reason) {
35
+ return skipTool(reason);
36
+ },
37
+ cancel(reason) {
38
+ return { type: "terminate", reason };
39
+ },
40
+ requestApproval(options) {
41
+ return requestToolApproval(options);
42
+ }
43
+ };
44
+
45
+ export {
46
+ createHook,
47
+ cancelPrompt,
48
+ skipTool,
49
+ requestToolApproval,
50
+ runControl,
51
+ toolCallControl
52
+ };
53
+ //# sourceMappingURL=chunk-NPZDYOE6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/control.ts"],"sourcesContent":["import { compact } from \"../internal/compact\";\nimport type {\n HookAction,\n PromptHook,\n RunControl,\n ToolApprovalRequestOptions,\n ToolCallControl,\n ToolCallHookAction,\n} from \"./types\";\n\nexport function createHook<RawResponse = unknown>(\n hook: PromptHook<RawResponse>,\n): PromptHook<RawResponse> {\n return hook;\n}\n\nexport function cancelPrompt(reason: string): HookAction {\n return { type: \"terminate\", reason };\n}\n\nexport function skipTool(reason: string): ToolCallHookAction {\n return { type: \"skip\", reason };\n}\n\nexport function requestToolApproval(options: ToolApprovalRequestOptions = {}): ToolCallHookAction {\n return compact({\n type: \"approval_request\" as const,\n reason: options.reason,\n rejectMessage: options.rejectMessage,\n }) as ToolCallHookAction;\n}\n\nexport const runControl: RunControl = {\n continue() {\n return { type: \"continue\" };\n },\n cancel(reason: string) {\n return cancelPrompt(reason);\n },\n};\n\nexport const toolCallControl: ToolCallControl = {\n run() {\n return { type: \"continue\" };\n },\n skip(reason: string) {\n return skipTool(reason);\n },\n cancel(reason: string) {\n return { type: \"terminate\", reason };\n },\n requestApproval(options) {\n return requestToolApproval(options);\n },\n};\n"],"mappings":";;;;;AAUO,SAAS,WACd,MACyB;AACzB,SAAO;AACT;AAEO,SAAS,aAAa,QAA4B;AACvD,SAAO,EAAE,MAAM,aAAa,OAAO;AACrC;AAEO,SAAS,SAAS,QAAoC;AAC3D,SAAO,EAAE,MAAM,QAAQ,OAAO;AAChC;AAEO,SAAS,oBAAoB,UAAsC,CAAC,GAAuB;AAChG,SAAO,QAAQ;AAAA,IACb,MAAM;AAAA,IACN,QAAQ,QAAQ;AAAA,IAChB,eAAe,QAAQ;AAAA,EACzB,CAAC;AACH;AAEO,IAAM,aAAyB;AAAA,EACpC,WAAW;AACT,WAAO,EAAE,MAAM,WAAW;AAAA,EAC5B;AAAA,EACA,OAAO,QAAgB;AACrB,WAAO,aAAa,MAAM;AAAA,EAC5B;AACF;AAEO,IAAM,kBAAmC;AAAA,EAC9C,MAAM;AACJ,WAAO,EAAE,MAAM,WAAW;AAAA,EAC5B;AAAA,EACA,KAAK,QAAgB;AACnB,WAAO,SAAS,MAAM;AAAA,EACxB;AAAA,EACA,OAAO,QAAgB;AACrB,WAAO,EAAE,MAAM,aAAa,OAAO;AAAA,EACrC;AAAA,EACA,gBAAgB,SAAS;AACvB,WAAO,oBAAoB,OAAO;AAAA,EACpC;AACF;","names":[]}
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  AgentBuilder
3
- } from "./chunk-M4T4ID34.js";
3
+ } from "./chunk-62RUYGMM.js";
4
4
  import {
5
5
  extractRagText
6
- } from "./chunk-IFQVPV32.js";
6
+ } from "./chunk-SISUMRUX.js";
7
7
  import {
8
8
  createTool
9
- } from "./chunk-T22FYPE2.js";
9
+ } from "./chunk-5EDHXYH5.js";
10
10
  import {
11
11
  CompletionRequestBuilder
12
12
  } from "./chunk-5G3VME2D.js";
@@ -138,4 +138,4 @@ export {
138
138
  Extractor,
139
139
  ExtractorBuilder
140
140
  };
141
- //# sourceMappingURL=chunk-VJ7AZVLS.js.map
141
+ //# sourceMappingURL=chunk-R75SGHCI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/extractor/extractor.ts"],"sourcesContent":["import type { Agent } from \"../agent/agent\";\nimport { AgentBuilder } from \"../agent/builder\";\nimport {\n CompletionCapabilityError,\n type CompletionModel,\n CompletionRequestBuilder,\n type CompletionResponse,\n type JsonValue,\n type Message,\n Message as MessageFactory,\n type ToolChoice,\n Usage,\n} from \"../completion/index\";\nimport { extractRagText } from \"../internal/rag-text\";\nimport type { ZodSchema } from \"../schema/zod-schema\";\nimport { createTool } from \"../tool/index\";\n\nconst SUBMIT_TOOL_NAME = \"submit\";\n\nconst DEFAULT_EXTRACTOR_INSTRUCTIONS =\n \"You are an AI assistant whose purpose is to extract structured data from the provided text.\\n\" +\n \"You have access to a `submit` function that defines the structure of the data to extract.\\n\" +\n \"Always call the `submit` function with the structured data. Use default or null values when information is missing.\";\n\nexport type ExtractionResponse<T> = {\n data: T;\n usage: Usage;\n messages: Message[];\n};\n\nexport class ExtractionError extends Error {\n constructor(\n message: string,\n readonly cause?: unknown,\n ) {\n super(message);\n this.name = \"ExtractionError\";\n }\n}\n\nexport class Extractor<T, M extends CompletionModel = CompletionModel> {\n constructor(\n private readonly agent: Agent<M>,\n private readonly schema: ZodSchema<T>,\n private readonly retryCount: number,\n ) {}\n\n async extract(text: string | Message): Promise<T> {\n return (await this.extractWithUsage(text)).data;\n }\n\n async extractWithUsage(text: string | Message): Promise<ExtractionResponse<T>> {\n return this.run(text);\n }\n\n async extractWithHistory(text: string | Message, history: Message[]): Promise<T> {\n return (await this.run(text, history)).data;\n }\n\n getInner(): Agent<M> {\n return this.agent;\n }\n\n private async run(text: string | Message, history?: Message[]): Promise<ExtractionResponse<T>> {\n let usage = Usage.empty();\n let lastError: unknown;\n const prompt = typeof text === \"string\" ? MessageFactory.user(text) : text;\n\n for (let attempt = 0; attempt <= this.retryCount; attempt += 1) {\n try {\n const toolDefs = await this.agent.toolSet.getToolDefinitions(extractRagText(prompt));\n const response = await new CompletionRequestBuilder(this.agent.model, prompt)\n .instructions(this.agent.instructions)\n .messages(history ?? [])\n .documents(this.agent.staticContext)\n .tools(toolDefs)\n .temperature(this.agent.temperature)\n .maxTokens(this.agent.maxTokens)\n .additionalParams(this.agent.additionalParams)\n .toolChoice(this.agent.toolChoice)\n .send();\n usage = Usage.add(usage, response.usage);\n const data = extractSubmittedData(response, this.schema);\n return {\n data,\n usage,\n messages: [\n ...(history ?? []),\n prompt,\n MessageFactory.assistant(response.choice, response.messageId),\n ],\n };\n } catch (error) {\n if (error instanceof CompletionCapabilityError) {\n throw error;\n }\n lastError = error;\n }\n }\n\n throw new ExtractionError(\"No data extracted\", lastError);\n }\n}\n\nexport class ExtractorBuilder<T, M extends CompletionModel = CompletionModel> {\n private readonly agentBuilder: AgentBuilder<M>;\n private retryCount = 0;\n\n constructor(\n model: M,\n private readonly schema: ZodSchema<T>,\n ) {\n this.agentBuilder = new AgentBuilder(\"extractor\", model)\n .instructions(DEFAULT_EXTRACTOR_INSTRUCTIONS)\n .tool(\n createTool({\n name: SUBMIT_TOOL_NAME,\n description: \"Submit the structured data extracted from the provided text.\",\n input: schema,\n output: schema,\n execute: (args) => args,\n }),\n )\n .toolChoice(\"required\");\n }\n\n instructions(instructions: string): this {\n this.agentBuilder.instructions(instructions);\n return this;\n }\n\n context(text: string, id?: string): this {\n this.agentBuilder.context(text, id);\n return this;\n }\n\n temperature(temperature: number): this {\n this.agentBuilder.temperature(temperature);\n return this;\n }\n\n maxTokens(maxTokens: number): this {\n this.agentBuilder.maxTokens(maxTokens);\n return this;\n }\n\n additionalParams(params: JsonValue): this {\n this.agentBuilder.additionalParams(params);\n return this;\n }\n\n toolChoice(toolChoice: ToolChoice): this {\n this.agentBuilder.toolChoice(toolChoice);\n return this;\n }\n\n retries(retries: number): this {\n this.retryCount = Math.max(0, Math.trunc(retries));\n return this;\n }\n\n build(): Extractor<T, M> {\n return new Extractor(this.agentBuilder.build(), this.schema, this.retryCount);\n }\n}\n\nfunction extractSubmittedData<T>(response: CompletionResponse, schema: ZodSchema<T>): T {\n const submitted = response.choice\n .filter((content) => content.type === \"tool_call\")\n .filter((toolCall) => toolCall.function.name === SUBMIT_TOOL_NAME)\n .at(-1);\n\n if (submitted === undefined) {\n throw new ExtractionError(\"The model did not call the submit tool\");\n }\n\n return schema.parse(submitted.function.arguments);\n}\n"],"mappings":"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","names":[]}