@anvia/core 1.0.0-rc.1 → 1.0.0-rc.10

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 (162) hide show
  1. package/README.md +381 -85
  2. package/dist/agent/index.d.ts +57 -19
  3. package/dist/agent/index.js +32 -17
  4. package/dist/agent/interactions/index.d.ts +122 -0
  5. package/dist/agent/interactions/index.js +20 -0
  6. package/dist/agent-DWzW9SoH.d.ts +150 -0
  7. package/dist/chunk-3RM57ZT2.js +31 -0
  8. package/dist/chunk-3RM57ZT2.js.map +1 -0
  9. package/dist/chunk-3RWESPUG.js +331 -0
  10. package/dist/chunk-3RWESPUG.js.map +1 -0
  11. package/dist/{chunk-DMPUP4R3.js → chunk-3SKZ2BKP.js} +7 -5
  12. package/dist/chunk-3SKZ2BKP.js.map +1 -0
  13. package/dist/chunk-3XQGVDU5.js +69 -0
  14. package/dist/chunk-3XQGVDU5.js.map +1 -0
  15. package/dist/{chunk-5XKDW36Z.js → chunk-5C6B6ZRH.js} +70 -75
  16. package/dist/chunk-5C6B6ZRH.js.map +1 -0
  17. package/dist/chunk-6BBOCFHV.js +323 -0
  18. package/dist/chunk-6BBOCFHV.js.map +1 -0
  19. package/dist/chunk-7JLAIN6E.js +15 -0
  20. package/dist/chunk-7JLAIN6E.js.map +1 -0
  21. package/dist/chunk-7PHMK7W4.js +1516 -0
  22. package/dist/chunk-7PHMK7W4.js.map +1 -0
  23. package/dist/{chunk-FNQB2JEH.js → chunk-AZB6N7P4.js} +94 -65
  24. package/dist/chunk-AZB6N7P4.js.map +1 -0
  25. package/dist/{chunk-I6G7BC42.js → chunk-D4PACGPA.js} +2 -6
  26. package/dist/chunk-D4PACGPA.js.map +1 -0
  27. package/dist/chunk-EFLT7XZD.js +51 -0
  28. package/dist/chunk-EFLT7XZD.js.map +1 -0
  29. package/dist/{chunk-R2LJSQUW.js → chunk-EMZKPRE6.js} +267 -107
  30. package/dist/chunk-EMZKPRE6.js.map +1 -0
  31. package/dist/chunk-I3Q7XSBB.js +59 -0
  32. package/dist/chunk-I3Q7XSBB.js.map +1 -0
  33. package/dist/chunk-J6LVLV6P.js +13 -0
  34. package/dist/chunk-J6LVLV6P.js.map +1 -0
  35. package/dist/chunk-LTXABCOO.js +127 -0
  36. package/dist/chunk-LTXABCOO.js.map +1 -0
  37. package/dist/chunk-OJBFDBLG.js +164 -0
  38. package/dist/chunk-OJBFDBLG.js.map +1 -0
  39. package/dist/chunk-QGX73TSQ.js +177 -0
  40. package/dist/chunk-QGX73TSQ.js.map +1 -0
  41. package/dist/chunk-QOUPWOGW.js +29 -0
  42. package/dist/chunk-QOUPWOGW.js.map +1 -0
  43. package/dist/chunk-SJMSS5SI.js +171 -0
  44. package/dist/chunk-SJMSS5SI.js.map +1 -0
  45. package/dist/chunk-T2C3CGDQ.js +56 -0
  46. package/dist/chunk-T2C3CGDQ.js.map +1 -0
  47. package/dist/chunk-VX3HS6PE.js +4569 -0
  48. package/dist/chunk-VX3HS6PE.js.map +1 -0
  49. package/dist/chunk-X4LK4ODN.js +86 -0
  50. package/dist/chunk-X4LK4ODN.js.map +1 -0
  51. package/dist/chunk-ZA564323.js +331 -0
  52. package/dist/chunk-ZA564323.js.map +1 -0
  53. package/dist/completion/index.d.ts +5 -4
  54. package/dist/completion/index.js +34 -28
  55. package/dist/documents/index.d.ts +34 -0
  56. package/dist/documents/index.js +340 -0
  57. package/dist/documents/index.js.map +1 -0
  58. package/dist/{dynamic-tools-i9woysFa.d.ts → dynamic-tools-aIZlg5x1.d.ts} +21 -9
  59. package/dist/embeddings/index.d.ts +11 -9
  60. package/dist/embeddings/index.js +3 -3
  61. package/dist/evals/index.d.ts +54 -25
  62. package/dist/evals/index.js +197 -114
  63. package/dist/evals/index.js.map +1 -1
  64. package/dist/extractor/index.d.ts +23 -26
  65. package/dist/extractor/index.js +9 -8
  66. package/dist/guardrails/index.d.ts +7 -129
  67. package/dist/guardrails/index.js +1 -1
  68. package/dist/image-generation/index.d.ts +18 -16
  69. package/dist/image-generation/index.js +4 -2
  70. package/dist/index.d.ts +24 -25
  71. package/dist/index.js +78 -56
  72. package/dist/internal/agent.d.ts +33 -30
  73. package/dist/internal/agent.js +50 -15
  74. package/dist/internal/agent.js.map +1 -1
  75. package/dist/mcp/index.d.ts +7 -15
  76. package/dist/mcp/index.js +3 -348
  77. package/dist/mcp/index.js.map +1 -1
  78. package/dist/memory/index.d.ts +20 -6
  79. package/dist/memory/index.js +12 -10
  80. package/dist/{middleware-KynLg_RW.d.ts → middleware-kcF8AusP.d.ts} +10 -7
  81. package/dist/model-call-options-CZkSw_xN.d.ts +6 -0
  82. package/dist/model-listing/index.d.ts +3 -1
  83. package/dist/observability/index.d.ts +22 -6
  84. package/dist/observability/index.js +10 -5
  85. package/dist/observability/index.js.map +1 -1
  86. package/dist/pipeline/index.d.ts +103 -58
  87. package/dist/pipeline/index.js +421 -236
  88. package/dist/pipeline/index.js.map +1 -1
  89. package/dist/provider-output-error-BEwDgVv3.d.ts +99 -0
  90. package/dist/{retry-D3Ruy-ba.d.ts → retry-CjvSlKGW.d.ts} +2 -1
  91. package/dist/skills/index.d.ts +5 -4
  92. package/dist/skills/index.js +8 -7
  93. package/dist/speech-generation/index.d.ts +37 -0
  94. package/dist/speech-generation/index.js +10 -0
  95. package/dist/text-ZLECpQE7.d.ts +32 -0
  96. package/dist/{think-tool-DZqZj2LV.d.ts → think-tool-BwCsJ365.d.ts} +16 -2
  97. package/dist/tool/index.d.ts +10 -7
  98. package/dist/tool/index.js +13 -10
  99. package/dist/{tool-C_8GudXn.d.ts → tool-BpqpoRSE.d.ts} +17 -8
  100. package/dist/transcription/index.d.ts +23 -14
  101. package/dist/transcription/index.js +4 -2
  102. package/dist/types-CXNE592e.d.ts +130 -0
  103. package/dist/types-Cr4uiYo5.d.ts +99 -0
  104. package/dist/{types-DhQfwiZn.d.ts → types-DC1U1XwW.d.ts} +1 -1
  105. package/dist/types-DKOXVTcq.d.ts +155 -0
  106. package/dist/types-DgvozfPc.d.ts +349 -0
  107. package/dist/types-DhkodEft.d.ts +105 -0
  108. package/dist/types-DjqRHeAi.d.ts +31 -0
  109. package/dist/{index-DxB74ybJ.d.ts → types-Sue2hb_L.d.ts} +142 -88
  110. package/dist/vector-store/index.d.ts +34 -34
  111. package/dist/vector-store/index.js +10 -6
  112. package/package.json +22 -16
  113. package/dist/agent-DGYY_onS.d.ts +0 -145
  114. package/dist/audio-generation/index.d.ts +0 -31
  115. package/dist/audio-generation/index.js +0 -8
  116. package/dist/chunk-5XKDW36Z.js.map +0 -1
  117. package/dist/chunk-6WGGTJE6.js +0 -139
  118. package/dist/chunk-6WGGTJE6.js.map +0 -1
  119. package/dist/chunk-A3UBYTJT.js +0 -157
  120. package/dist/chunk-A3UBYTJT.js.map +0 -1
  121. package/dist/chunk-ADH7NNCS.js +0 -512
  122. package/dist/chunk-ADH7NNCS.js.map +0 -1
  123. package/dist/chunk-CQNNSZPG.js +0 -9
  124. package/dist/chunk-CQNNSZPG.js.map +0 -1
  125. package/dist/chunk-DMPUP4R3.js.map +0 -1
  126. package/dist/chunk-DZ3CKYTH.js +0 -267
  127. package/dist/chunk-DZ3CKYTH.js.map +0 -1
  128. package/dist/chunk-FNQB2JEH.js.map +0 -1
  129. package/dist/chunk-I6G7BC42.js.map +0 -1
  130. package/dist/chunk-IL3ZSNJI.js +0 -3748
  131. package/dist/chunk-IL3ZSNJI.js.map +0 -1
  132. package/dist/chunk-J6GNQART.js +0 -122
  133. package/dist/chunk-J6GNQART.js.map +0 -1
  134. package/dist/chunk-M3IOWB4Y.js +0 -280
  135. package/dist/chunk-M3IOWB4Y.js.map +0 -1
  136. package/dist/chunk-QY5GZ7HR.js +0 -39
  137. package/dist/chunk-QY5GZ7HR.js.map +0 -1
  138. package/dist/chunk-R2LJSQUW.js.map +0 -1
  139. package/dist/chunk-RFDVKCIE.js +0 -12
  140. package/dist/chunk-RFDVKCIE.js.map +0 -1
  141. package/dist/chunk-RMUBRRSK.js +0 -34
  142. package/dist/chunk-RMUBRRSK.js.map +0 -1
  143. package/dist/chunk-RXKHOYEH.js +0 -466
  144. package/dist/chunk-RXKHOYEH.js.map +0 -1
  145. package/dist/chunk-XDRSPSR7.js +0 -38
  146. package/dist/chunk-XDRSPSR7.js.map +0 -1
  147. package/dist/chunk-XWUC7CIT.js +0 -1
  148. package/dist/chunk-XWUC7CIT.js.map +0 -1
  149. package/dist/errors-CYKUcU89.d.ts +0 -17
  150. package/dist/json-Zo7K3xmt.d.ts +0 -40
  151. package/dist/loaders/index.d.ts +0 -86
  152. package/dist/loaders/index.js +0 -299
  153. package/dist/loaders/index.js.map +0 -1
  154. package/dist/types-B3A4YxaA.d.ts +0 -354
  155. package/dist/types-BBEGKB9m.d.ts +0 -119
  156. package/dist/types-DT3nEemY.d.ts +0 -79
  157. package/dist/types-DulRCYdB.d.ts +0 -70
  158. package/dist/types-p55Jc-sr.d.ts +0 -47
  159. package/dist/ui/index.d.ts +0 -107
  160. package/dist/ui/index.js +0 -10
  161. /package/dist/{audio-generation → agent/interactions}/index.js.map +0 -0
  162. /package/dist/{ui → speech-generation}/index.js.map +0 -0
@@ -0,0 +1,171 @@
1
+ import {
2
+ InMemoryVectorStore,
3
+ assertFiniteMinScore,
4
+ assertPositiveSearchLimit,
5
+ createTool,
6
+ retrieveDocuments
7
+ } from "./chunk-EMZKPRE6.js";
8
+ import {
9
+ embedDocuments
10
+ } from "./chunk-ZA564323.js";
11
+
12
+ // src/tool/dynamic-tools.ts
13
+ async function embedTools(options) {
14
+ const toolList = dedupeTools(options.tools);
15
+ const definitions = await Promise.all(
16
+ toolList.map(async (tool) => ({ tool, definition: await tool.definition("") }))
17
+ );
18
+ const documents = definitions.map(({ tool, definition }) => {
19
+ const content = options.content?.(tool, definition) ?? defaultToolEmbeddingText(definition);
20
+ const texts = Array.isArray(content) ? content : [content];
21
+ const metadata = options.metadata?.(tool, definition);
22
+ let document = {
23
+ toolName: tool.name,
24
+ definition,
25
+ text: texts.join("\n")
26
+ };
27
+ if (metadata !== void 0) document = { ...document, metadata };
28
+ return { tool, document, texts, metadata };
29
+ });
30
+ const embedded = await embedDocuments({
31
+ model: options.model,
32
+ documents,
33
+ id: (item) => item.tool.name,
34
+ content: (item) => item.texts,
35
+ metadata: (item) => item.metadata,
36
+ concurrency: options.concurrency,
37
+ retries: options.retries,
38
+ abortSignal: options.abortSignal
39
+ });
40
+ return {
41
+ documents: embedded.documents.map((item) => ({
42
+ ...item,
43
+ document: item.document.document
44
+ }))
45
+ };
46
+ }
47
+ async function createToolIndex(options) {
48
+ assertPositiveSearchLimit(options.topK);
49
+ assertFiniteMinScore(options.minScore);
50
+ const tools = dedupeTools(options.tools);
51
+ const { documents } = await embedTools({ ...options, tools });
52
+ const store = InMemoryVectorStore.fromDocuments({ documents });
53
+ return new ToolSearchIndex(store, options.model, tools, options);
54
+ }
55
+ function isToolIndex(value) {
56
+ if (typeof value !== "object" || value === null) return false;
57
+ const candidate = value;
58
+ return candidate.kind === "tool-index" && Array.isArray(candidate.tools) && typeof candidate.topK === "number" && typeof candidate.search === "function";
59
+ }
60
+ var ToolSearchIndex = class {
61
+ constructor(store, model, tools, options) {
62
+ this.store = store;
63
+ this.model = model;
64
+ this.options = options;
65
+ this.tools = Object.freeze([...tools]);
66
+ this.topK = options.topK;
67
+ this.minScore = options.minScore;
68
+ this.filter = options.filter;
69
+ }
70
+ store;
71
+ model;
72
+ options;
73
+ kind = "tool-index";
74
+ tools;
75
+ topK;
76
+ minScore;
77
+ filter;
78
+ search(options) {
79
+ return retrieveDocuments({
80
+ store: this.store,
81
+ model: this.model,
82
+ query: options.query,
83
+ topK: this.topK,
84
+ minScore: this.minScore,
85
+ filter: this.filter,
86
+ retries: this.options.retries,
87
+ abortSignal: options.abortSignal
88
+ });
89
+ }
90
+ inspect(request) {
91
+ return this.store.inspect(request);
92
+ }
93
+ };
94
+ function dedupeTools(tools) {
95
+ const byName = /* @__PURE__ */ new Map();
96
+ for (const tool of tools) byName.set(tool.name, tool);
97
+ return [...byName.values()];
98
+ }
99
+ function defaultToolEmbeddingText(definition) {
100
+ return [definition.name, definition.description, JSON.stringify(definition.parameters)];
101
+ }
102
+
103
+ // src/tool/middleware.ts
104
+ function createMiddleware(middleware) {
105
+ return middleware;
106
+ }
107
+
108
+ // src/tool/question-tool.ts
109
+ import { z } from "zod";
110
+ var questionToolMarker = /* @__PURE__ */ Symbol("anvia.question-tool");
111
+ function createQuestionTool(options) {
112
+ const tool = createTool({
113
+ name: options.name,
114
+ description: options.description,
115
+ inputSchema: z.object({
116
+ questions: z.array(
117
+ z.object({
118
+ id: z.string().trim().min(1),
119
+ text: z.string().trim().min(1),
120
+ choices: z.array(
121
+ z.object({
122
+ label: z.string().trim().min(1),
123
+ value: z.string().trim().min(1)
124
+ }).strict()
125
+ ).min(1).optional(),
126
+ allowCustom: z.boolean().optional()
127
+ }).strict()
128
+ ).min(1)
129
+ }).strict(),
130
+ execute() {
131
+ throw new Error("Question tools can only be resolved through an Agent interaction.");
132
+ }
133
+ });
134
+ Object.defineProperty(tool, questionToolMarker, {
135
+ configurable: false,
136
+ enumerable: false,
137
+ value: true,
138
+ writable: false
139
+ });
140
+ return tool;
141
+ }
142
+ function isQuestionTool(tool) {
143
+ return typeof tool === "object" && tool !== null && questionToolMarker in tool;
144
+ }
145
+
146
+ // src/tool/think-tool.ts
147
+ import { z as z2 } from "zod";
148
+ var defaultThinkToolDescription = "Use this tool to record a thought while reasoning through a complex task. It does not retrieve information, store memory, or change external state.";
149
+ var thinkToolInput = z2.object({
150
+ thought: z2.string().describe("A thought to record while reasoning through a task.")
151
+ });
152
+ function createThinkTool(options = {}) {
153
+ return createTool({
154
+ name: options.name ?? "think",
155
+ description: options.description ?? defaultThinkToolDescription,
156
+ inputSchema: thinkToolInput,
157
+ outputSchema: z2.string(),
158
+ execute: (args) => args.thought
159
+ });
160
+ }
161
+
162
+ export {
163
+ createQuestionTool,
164
+ isQuestionTool,
165
+ embedTools,
166
+ createToolIndex,
167
+ isToolIndex,
168
+ createMiddleware,
169
+ createThinkTool
170
+ };
171
+ //# sourceMappingURL=chunk-SJMSS5SI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tool/dynamic-tools.ts","../src/tool/middleware.ts","../src/tool/question-tool.ts","../src/tool/think-tool.ts"],"sourcesContent":["import type { ToolDefinition } from \"../completion\";\nimport type { EmbeddedDocument, EmbeddingModel, VectorMetadata } from \"../embeddings\";\nimport { embedDocuments } from \"../embeddings\";\nimport { assertFiniteMinScore, assertPositiveSearchLimit } from \"../internal/vector-search-options\";\nimport type { RetrySetting } from \"../retry\";\nimport {\n InMemoryVectorStore,\n retrieveDocuments,\n type VectorFilter,\n type VectorInspectPage,\n type VectorInspectRequest,\n type VectorSearchResult,\n} from \"../vector-store\";\nimport type { AnyTool } from \"./tool\";\n\nexport type ToolSearchDocument<Metadata extends VectorMetadata = VectorMetadata> = {\n toolName: string;\n definition: ToolDefinition;\n text: string;\n metadata?: Metadata | undefined;\n};\n\nexport type EmbedToolsOptions<Metadata extends VectorMetadata = VectorMetadata> = {\n model: EmbeddingModel;\n tools: readonly AnyTool[];\n content?: ((tool: AnyTool, definition: ToolDefinition) => string | string[]) | undefined;\n metadata?: ((tool: AnyTool, definition: ToolDefinition) => Metadata | undefined) | undefined;\n concurrency?: number | undefined;\n retries?: RetrySetting | undefined;\n abortSignal?: AbortSignal | undefined;\n};\n\nexport type CreateToolIndexOptions<Metadata extends VectorMetadata = VectorMetadata> =\n EmbedToolsOptions<Metadata> & {\n topK: number;\n minScore?: number | undefined;\n filter?: VectorFilter | undefined;\n };\n\nexport interface ToolIndex<Metadata extends VectorMetadata = VectorMetadata> {\n readonly kind: \"tool-index\";\n readonly tools: readonly AnyTool[];\n readonly topK: number;\n readonly minScore?: number | undefined;\n readonly filter?: VectorFilter | undefined;\n search(options: {\n query: string;\n abortSignal?: AbortSignal | undefined;\n }): Promise<Array<VectorSearchResult<ToolSearchDocument<Metadata>, Metadata>>>;\n inspect?(\n request: VectorInspectRequest,\n ): Promise<VectorInspectPage<ToolSearchDocument<Metadata>, Metadata>>;\n}\n\nexport async function embedTools<Metadata extends VectorMetadata = VectorMetadata>(\n options: EmbedToolsOptions<Metadata>,\n): Promise<{\n documents: Array<EmbeddedDocument<ToolSearchDocument<Metadata>, Metadata>>;\n}> {\n const toolList = dedupeTools(options.tools);\n const definitions = await Promise.all(\n toolList.map(async (tool) => ({ tool, definition: await tool.definition(\"\") })),\n );\n const documents = definitions.map(({ tool, definition }) => {\n const content = options.content?.(tool, definition) ?? defaultToolEmbeddingText(definition);\n const texts = Array.isArray(content) ? content : [content];\n const metadata = options.metadata?.(tool, definition);\n let document: ToolSearchDocument<Metadata> = {\n toolName: tool.name,\n definition,\n text: texts.join(\"\\n\"),\n };\n if (metadata !== undefined) document = { ...document, metadata };\n return { tool, document, texts, metadata };\n });\n\n const embedded = await embedDocuments({\n model: options.model,\n documents,\n id: (item) => item.tool.name,\n content: (item) => item.texts,\n metadata: (item) => item.metadata,\n concurrency: options.concurrency,\n retries: options.retries,\n abortSignal: options.abortSignal,\n });\n return {\n documents: embedded.documents.map((item) => ({\n ...item,\n document: item.document.document,\n })),\n };\n}\n\nexport async function createToolIndex<Metadata extends VectorMetadata = VectorMetadata>(\n options: CreateToolIndexOptions<Metadata>,\n): Promise<ToolIndex<Metadata>> {\n assertPositiveSearchLimit(options.topK);\n assertFiniteMinScore(options.minScore);\n const tools = dedupeTools(options.tools);\n const { documents } = await embedTools({ ...options, tools });\n const store = InMemoryVectorStore.fromDocuments({ documents });\n return new ToolSearchIndex(store, options.model, tools, options);\n}\n\nexport function isToolIndex(value: unknown): value is ToolIndex {\n if (typeof value !== \"object\" || value === null) return false;\n const candidate = value as {\n kind?: unknown;\n tools?: unknown;\n topK?: unknown;\n search?: unknown;\n };\n return (\n candidate.kind === \"tool-index\" &&\n Array.isArray(candidate.tools) &&\n typeof candidate.topK === \"number\" &&\n typeof candidate.search === \"function\"\n );\n}\n\nclass ToolSearchIndex<Metadata extends VectorMetadata> implements ToolIndex<Metadata> {\n readonly kind = \"tool-index\" as const;\n readonly tools: readonly AnyTool[];\n readonly topK: number;\n readonly minScore: number | undefined;\n readonly filter: VectorFilter | undefined;\n\n constructor(\n private readonly store: InMemoryVectorStore<ToolSearchDocument<Metadata>, Metadata>,\n private readonly model: EmbeddingModel,\n tools: readonly AnyTool[],\n private readonly options: CreateToolIndexOptions<Metadata>,\n ) {\n this.tools = Object.freeze([...tools]);\n this.topK = options.topK;\n this.minScore = options.minScore;\n this.filter = options.filter;\n }\n\n search(options: {\n query: string;\n abortSignal?: AbortSignal | undefined;\n }): Promise<Array<VectorSearchResult<ToolSearchDocument<Metadata>, Metadata>>> {\n return retrieveDocuments({\n store: this.store,\n model: this.model,\n query: options.query,\n topK: this.topK,\n minScore: this.minScore,\n filter: this.filter,\n retries: this.options.retries,\n abortSignal: options.abortSignal,\n });\n }\n\n inspect(\n request: VectorInspectRequest,\n ): Promise<VectorInspectPage<ToolSearchDocument<Metadata>, Metadata>> {\n return this.store.inspect(request);\n }\n}\n\nfunction dedupeTools(tools: readonly AnyTool[]): AnyTool[] {\n const byName = new Map<string, AnyTool>();\n for (const tool of tools) byName.set(tool.name, tool);\n return [...byName.values()];\n}\n\nfunction defaultToolEmbeddingText(definition: ToolDefinition): string[] {\n return [definition.name, definition.description, JSON.stringify(definition.parameters)];\n}\n","import type {\n CompletionRequest,\n CompletionResponse,\n JsonValue,\n ToolResultContentPart,\n} from \"../completion\";\nimport type { MaybePromise } from \"../internal/type-utils\";\n\nexport type CompletionRequestMiddlewareArgs = {\n turn: number;\n request: CompletionRequest;\n originalRequest: CompletionRequest;\n};\n\nexport type CompletionRequestMiddlewareResult =\n | {\n request: CompletionRequest;\n }\n | undefined;\n\nexport type CompletionResponseMiddlewareArgs<RawResponse = unknown> = {\n turn: number;\n request: CompletionRequest;\n response: CompletionResponse<RawResponse>;\n originalResponse: CompletionResponse<RawResponse>;\n};\n\nexport type CompletionResponseMiddlewareResult<RawResponse = unknown> =\n | {\n response: CompletionResponse<RawResponse>;\n }\n | undefined;\n\nexport type ToolInputMiddlewareArgs = {\n toolName: string;\n args: string;\n originalArgs: string;\n turn: number;\n toolCallId?: string | undefined;\n internalCallId: string;\n};\n\nexport type ToolInputMiddlewareResult =\n | {\n args: JsonValue | string;\n }\n | undefined;\n\nexport type ToolResultMiddlewareArgs = {\n toolName: string;\n args: string;\n result: string;\n originalResult: string;\n structuredResult?: readonly ToolResultContentPart[] | undefined;\n originalStructuredResult?: readonly ToolResultContentPart[] | undefined;\n turn: number;\n toolCallId?: string | undefined;\n internalCallId: string;\n};\n\nexport type ToolOutputMiddlewareArgs = ToolResultMiddlewareArgs;\n\nexport type ToolOutputMiddlewareResult =\n | string\n | Readonly<{ result: string; structuredResult?: never }>\n | Readonly<{\n structuredResult: readonly ToolResultContentPart[];\n result?: never;\n }>\n | undefined;\n\nexport interface AgentMiddleware<RawResponse = unknown> {\n onCompletionRequest?(\n args: CompletionRequestMiddlewareArgs,\n ): MaybePromise<CompletionRequestMiddlewareResult>;\n onCompletionResponse?(\n args: CompletionResponseMiddlewareArgs<RawResponse>,\n ): MaybePromise<CompletionResponseMiddlewareResult<RawResponse>>;\n onToolInput?(args: ToolInputMiddlewareArgs): MaybePromise<ToolInputMiddlewareResult>;\n onToolOutput?(args: ToolOutputMiddlewareArgs): MaybePromise<ToolOutputMiddlewareResult>;\n}\n\nexport function createMiddleware<RawResponse = unknown>(\n middleware: AgentMiddleware<RawResponse>,\n): AgentMiddleware<RawResponse> {\n return middleware;\n}\n","import { z } from \"zod\";\nimport type { AgentQuestionAnswer, AgentQuestionPrompt } from \"../agent/interactions\";\nimport { createTool } from \"./create-tool\";\nimport type { Tool } from \"./tool\";\n\nconst questionToolMarker = Symbol(\"anvia.question-tool\");\n\nexport type QuestionToolInput = {\n questions: readonly AgentQuestionPrompt[];\n};\n\nexport type QuestionToolOutput = {\n answers: readonly AgentQuestionAnswer[];\n};\n\nexport type CreateQuestionToolOptions = {\n name: string;\n description: string;\n};\n\ntype MarkedQuestionTool = Tool<QuestionToolInput, QuestionToolOutput> & {\n readonly [questionToolMarker]: true;\n};\n\nexport function createQuestionTool(\n options: CreateQuestionToolOptions,\n): Tool<QuestionToolInput, QuestionToolOutput> {\n const tool = createTool({\n name: options.name,\n description: options.description,\n inputSchema: z\n .object({\n questions: z\n .array(\n z\n .object({\n id: z.string().trim().min(1),\n text: z.string().trim().min(1),\n choices: z\n .array(\n z\n .object({\n label: z.string().trim().min(1),\n value: z.string().trim().min(1),\n })\n .strict(),\n )\n .min(1)\n .optional(),\n allowCustom: z.boolean().optional(),\n })\n .strict(),\n )\n .min(1),\n })\n .strict(),\n execute(): never {\n throw new Error(\"Question tools can only be resolved through an Agent interaction.\");\n },\n }) as unknown as MarkedQuestionTool;\n Object.defineProperty(tool, questionToolMarker, {\n configurable: false,\n enumerable: false,\n value: true,\n writable: false,\n });\n return tool;\n}\n\nexport function isQuestionTool(tool: unknown): tool is Tool<QuestionToolInput, QuestionToolOutput> {\n return typeof tool === \"object\" && tool !== null && questionToolMarker in tool;\n}\n","import { z } from \"zod\";\nimport { createTool } from \"./create-tool\";\n\nconst defaultThinkToolDescription =\n \"Use this tool to record a thought while reasoning through a complex task. It does not retrieve information, store memory, or change external state.\";\n\nconst thinkToolInput = z.object({\n thought: z.string().describe(\"A thought to record while reasoning through a task.\"),\n});\n\nexport type CreateThinkToolOptions = {\n name?: string;\n description?: string;\n};\n\nexport function createThinkTool(options: CreateThinkToolOptions = {}) {\n return createTool({\n name: options.name ?? \"think\",\n description: options.description ?? defaultThinkToolDescription,\n inputSchema: thinkToolInput,\n outputSchema: z.string(),\n execute: (args) => args.thought,\n });\n}\n"],"mappings":"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","names":["z","z"]}
@@ -0,0 +1,56 @@
1
+ import {
2
+ assertJsonObject
3
+ } from "./chunk-7JLAIN6E.js";
4
+ import {
5
+ resolveRetryOptions,
6
+ runWithRetries,
7
+ throwIfAborted
8
+ } from "./chunk-3RWESPUG.js";
9
+
10
+ // src/transcription/transcribe.ts
11
+ async function transcribe(options) {
12
+ const data = toUint8Array(options.audio.data);
13
+ if (data.byteLength === 0) {
14
+ throw new Error("Transcription audio cannot be empty.");
15
+ }
16
+ if (typeof options.audio.filename !== "string" || options.audio.filename.trim().length === 0) {
17
+ throw new TypeError("Transcription filename must be a non-empty string.");
18
+ }
19
+ throwIfAborted(options.abortSignal);
20
+ const request = { data, filename: options.audio.filename };
21
+ if (options.audio.mediaType !== void 0) request.mediaType = options.audio.mediaType;
22
+ if (options.language !== void 0) request.language = options.language;
23
+ if (options.prompt !== void 0) request.prompt = options.prompt;
24
+ if (options.temperature !== void 0) request.temperature = options.temperature;
25
+ if (options.providerOptions !== void 0) {
26
+ assertJsonObject(options.providerOptions, "providerOptions");
27
+ request.providerOptions = options.providerOptions;
28
+ }
29
+ return await runWithRetries(
30
+ () => {
31
+ throwIfAborted(options.abortSignal);
32
+ return options.model.transcription(request, modelCallOptions(options.abortSignal));
33
+ },
34
+ resolveRetries(options.retries),
35
+ { streaming: false, abortSignal: options.abortSignal }
36
+ );
37
+ }
38
+ function resolveRetries(setting) {
39
+ return setting === void 0 || setting === false ? void 0 : resolveRetryOptions(setting);
40
+ }
41
+ function modelCallOptions(abortSignal) {
42
+ return abortSignal === void 0 ? void 0 : { abortSignal };
43
+ }
44
+ function toUint8Array(bytes) {
45
+ if (bytes instanceof Uint8Array) {
46
+ return new Uint8Array(
47
+ bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength)
48
+ );
49
+ }
50
+ return new Uint8Array(bytes.slice(0));
51
+ }
52
+
53
+ export {
54
+ transcribe
55
+ };
56
+ //# sourceMappingURL=chunk-T2C3CGDQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/transcription/transcribe.ts"],"sourcesContent":["import type { JsonObject } from \"../completion\";\nimport { throwIfAborted } from \"../internal/abort\";\nimport { assertJsonObject } from \"../internal/json-object\";\nimport type { ModelCallOptions } from \"../model-call-options\";\nimport {\n type ResolvedRetryOptions,\n type RetrySetting,\n resolveRetryOptions,\n runWithRetries,\n} from \"../retry\";\nimport type { TranscriptionModel, TranscriptionRequest, TranscriptionResult } from \"./types\";\n\nexport type TranscriptionAudio = {\n data: Uint8Array | ArrayBuffer;\n filename: string;\n mediaType?: string | undefined;\n};\n\nexport type TranscribeOptions<Model extends TranscriptionModel = TranscriptionModel> = {\n model: Model;\n audio: TranscriptionAudio;\n language?: string | undefined;\n prompt?: string | undefined;\n temperature?: number | undefined;\n providerOptions?: JsonObject | undefined;\n retries?: RetrySetting | undefined;\n abortSignal?: AbortSignal | undefined;\n};\n\ntype RawResponseOf<Model> =\n Model extends TranscriptionModel<infer RawResponse> ? RawResponse : unknown;\n\nexport async function transcribe<Model extends TranscriptionModel>(\n options: TranscribeOptions<Model>,\n): Promise<TranscriptionResult<RawResponseOf<Model>>> {\n const data = toUint8Array(options.audio.data);\n if (data.byteLength === 0) {\n throw new Error(\"Transcription audio cannot be empty.\");\n }\n if (typeof options.audio.filename !== \"string\" || options.audio.filename.trim().length === 0) {\n throw new TypeError(\"Transcription filename must be a non-empty string.\");\n }\n throwIfAborted(options.abortSignal);\n\n const request: TranscriptionRequest = { data, filename: options.audio.filename };\n if (options.audio.mediaType !== undefined) request.mediaType = options.audio.mediaType;\n if (options.language !== undefined) request.language = options.language;\n if (options.prompt !== undefined) request.prompt = options.prompt;\n if (options.temperature !== undefined) request.temperature = options.temperature;\n if (options.providerOptions !== undefined) {\n assertJsonObject(options.providerOptions, \"providerOptions\");\n request.providerOptions = options.providerOptions;\n }\n\n return await runWithRetries(\n () => {\n throwIfAborted(options.abortSignal);\n return options.model.transcription(request, modelCallOptions(options.abortSignal)) as Promise<\n TranscriptionResult<RawResponseOf<Model>>\n >;\n },\n resolveRetries(options.retries),\n { streaming: false, abortSignal: options.abortSignal },\n );\n}\n\nfunction resolveRetries(setting: RetrySetting | undefined): ResolvedRetryOptions | undefined {\n return setting === undefined || setting === false ? undefined : resolveRetryOptions(setting);\n}\n\nfunction modelCallOptions(abortSignal: AbortSignal | undefined): ModelCallOptions | undefined {\n return abortSignal === undefined ? undefined : { abortSignal };\n}\n\nfunction toUint8Array(bytes: Uint8Array | ArrayBuffer): Uint8Array {\n if (bytes instanceof Uint8Array) {\n return new Uint8Array(\n bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength),\n );\n }\n return new Uint8Array(bytes.slice(0));\n}\n"],"mappings":";;;;;;;;;;AAgCA,eAAsB,WACpB,SACoD;AACpD,QAAM,OAAO,aAAa,QAAQ,MAAM,IAAI;AAC5C,MAAI,KAAK,eAAe,GAAG;AACzB,UAAM,IAAI,MAAM,sCAAsC;AAAA,EACxD;AACA,MAAI,OAAO,QAAQ,MAAM,aAAa,YAAY,QAAQ,MAAM,SAAS,KAAK,EAAE,WAAW,GAAG;AAC5F,UAAM,IAAI,UAAU,oDAAoD;AAAA,EAC1E;AACA,iBAAe,QAAQ,WAAW;AAElC,QAAM,UAAgC,EAAE,MAAM,UAAU,QAAQ,MAAM,SAAS;AAC/E,MAAI,QAAQ,MAAM,cAAc,OAAW,SAAQ,YAAY,QAAQ,MAAM;AAC7E,MAAI,QAAQ,aAAa,OAAW,SAAQ,WAAW,QAAQ;AAC/D,MAAI,QAAQ,WAAW,OAAW,SAAQ,SAAS,QAAQ;AAC3D,MAAI,QAAQ,gBAAgB,OAAW,SAAQ,cAAc,QAAQ;AACrE,MAAI,QAAQ,oBAAoB,QAAW;AACzC,qBAAiB,QAAQ,iBAAiB,iBAAiB;AAC3D,YAAQ,kBAAkB,QAAQ;AAAA,EACpC;AAEA,SAAO,MAAM;AAAA,IACX,MAAM;AACJ,qBAAe,QAAQ,WAAW;AAClC,aAAO,QAAQ,MAAM,cAAc,SAAS,iBAAiB,QAAQ,WAAW,CAAC;AAAA,IAGnF;AAAA,IACA,eAAe,QAAQ,OAAO;AAAA,IAC9B,EAAE,WAAW,OAAO,aAAa,QAAQ,YAAY;AAAA,EACvD;AACF;AAEA,SAAS,eAAe,SAAqE;AAC3F,SAAO,YAAY,UAAa,YAAY,QAAQ,SAAY,oBAAoB,OAAO;AAC7F;AAEA,SAAS,iBAAiB,aAAoE;AAC5F,SAAO,gBAAgB,SAAY,SAAY,EAAE,YAAY;AAC/D;AAEA,SAAS,aAAa,OAA6C;AACjE,MAAI,iBAAiB,YAAY;AAC/B,WAAO,IAAI;AAAA,MACT,MAAM,OAAO,MAAM,MAAM,YAAY,MAAM,aAAa,MAAM,UAAU;AAAA,IAC1E;AAAA,EACF;AACA,SAAO,IAAI,WAAW,MAAM,MAAM,CAAC,CAAC;AACtC;","names":[]}