@anvia/core 0.26.0 → 1.0.0-rc.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.
Files changed (135) hide show
  1. package/README.md +21 -11
  2. package/dist/agent/index.d.ts +26 -68
  3. package/dist/agent/index.js +20 -17
  4. package/dist/agent-DGYY_onS.d.ts +145 -0
  5. package/dist/audio-generation/index.d.ts +12 -14
  6. package/dist/audio-generation/index.js +5 -39
  7. package/dist/audio-generation/index.js.map +1 -1
  8. package/dist/{chunk-MRQLEK2B.js → chunk-5XKDW36Z.js} +30 -7
  9. package/dist/chunk-5XKDW36Z.js.map +1 -0
  10. package/dist/chunk-6WGGTJE6.js +139 -0
  11. package/dist/chunk-6WGGTJE6.js.map +1 -0
  12. package/dist/chunk-A3UBYTJT.js +157 -0
  13. package/dist/chunk-A3UBYTJT.js.map +1 -0
  14. package/dist/{chunk-NCPN4SJR.js → chunk-DMPUP4R3.js} +10 -10
  15. package/dist/chunk-DMPUP4R3.js.map +1 -0
  16. package/dist/{chunk-MNWK2USR.js → chunk-DZ3CKYTH.js} +29 -5
  17. package/dist/chunk-DZ3CKYTH.js.map +1 -0
  18. package/dist/{chunk-CWUJUSOS.js → chunk-FNQB2JEH.js} +1 -1
  19. package/dist/chunk-FNQB2JEH.js.map +1 -0
  20. package/dist/chunk-I6G7BC42.js +41 -0
  21. package/dist/chunk-I6G7BC42.js.map +1 -0
  22. package/dist/{chunk-BALBBVI3.js → chunk-IL3ZSNJI.js} +2720 -1704
  23. package/dist/chunk-IL3ZSNJI.js.map +1 -0
  24. package/dist/chunk-J6GNQART.js +122 -0
  25. package/dist/chunk-J6GNQART.js.map +1 -0
  26. package/dist/{chunk-MC3CCKEB.js → chunk-M3IOWB4Y.js} +124 -65
  27. package/dist/chunk-M3IOWB4Y.js.map +1 -0
  28. package/dist/chunk-QY5GZ7HR.js +39 -0
  29. package/dist/chunk-QY5GZ7HR.js.map +1 -0
  30. package/dist/{chunk-MELYDKWQ.js → chunk-R2LJSQUW.js} +190 -20
  31. package/dist/chunk-R2LJSQUW.js.map +1 -0
  32. package/dist/{chunk-WQKHFADH.js → chunk-RFDVKCIE.js} +3 -3
  33. package/dist/chunk-RFDVKCIE.js.map +1 -0
  34. package/dist/chunk-RMUBRRSK.js +34 -0
  35. package/dist/chunk-RMUBRRSK.js.map +1 -0
  36. package/dist/{chunk-I6XOQ4LK.js → chunk-RXKHOYEH.js} +1 -1
  37. package/dist/chunk-RXKHOYEH.js.map +1 -0
  38. package/dist/chunk-XDRSPSR7.js +38 -0
  39. package/dist/chunk-XDRSPSR7.js.map +1 -0
  40. package/dist/completion/index.d.ts +5 -36
  41. package/dist/completion/index.js +4 -5
  42. package/dist/dynamic-tools-i9woysFa.d.ts +33 -0
  43. package/dist/embeddings/index.d.ts +2 -2
  44. package/dist/embeddings/index.js +1 -2
  45. package/dist/{errors-2moLDuuN.d.ts → errors-CYKUcU89.d.ts} +2 -2
  46. package/dist/evals/index.d.ts +22 -15
  47. package/dist/evals/index.js +57 -35
  48. package/dist/evals/index.js.map +1 -1
  49. package/dist/extractor/index.d.ts +23 -35
  50. package/dist/extractor/index.js +7 -21
  51. package/dist/guardrails/index.d.ts +2 -2
  52. package/dist/guardrails/index.js +1 -1
  53. package/dist/image-generation/index.d.ts +12 -14
  54. package/dist/image-generation/index.js +5 -39
  55. package/dist/image-generation/index.js.map +1 -1
  56. package/dist/index-DxB74ybJ.d.ts +349 -0
  57. package/dist/index.d.ts +20 -17
  58. package/dist/index.js +31 -36
  59. package/dist/internal/agent.d.ts +152 -9
  60. package/dist/internal/agent.js +22 -17
  61. package/dist/{json-BVPssigK.d.ts → json-Zo7K3xmt.d.ts} +12 -11
  62. package/dist/loaders/index.d.ts +5 -10
  63. package/dist/loaders/index.js.map +1 -1
  64. package/dist/mcp/index.d.ts +4 -4
  65. package/dist/mcp/index.js.map +1 -1
  66. package/dist/memory/index.d.ts +4 -4
  67. package/dist/memory/index.js +6 -7
  68. package/dist/middleware-KynLg_RW.d.ts +56 -0
  69. package/dist/observability/index.d.ts +6 -3
  70. package/dist/observability/index.js.map +1 -1
  71. package/dist/pipeline/index.d.ts +40 -47
  72. package/dist/pipeline/index.js +99 -99
  73. package/dist/pipeline/index.js.map +1 -1
  74. package/dist/retry-D3Ruy-ba.d.ts +15 -0
  75. package/dist/skills/index.d.ts +4 -4
  76. package/dist/skills/index.js +5 -6
  77. package/dist/streaming/index.js +37 -3
  78. package/dist/streaming/index.js.map +1 -1
  79. package/dist/{think-tool-DfCMuO8e.d.ts → think-tool-DZqZj2LV.d.ts} +5 -5
  80. package/dist/tool/index.d.ts +8 -6
  81. package/dist/tool/index.js +12 -15
  82. package/dist/tool-C_8GudXn.d.ts +49 -0
  83. package/dist/transcription/index.d.ts +14 -16
  84. package/dist/transcription/index.js +5 -57
  85. package/dist/transcription/index.js.map +1 -1
  86. package/dist/type-utils-CtHVDRn_.d.ts +6 -0
  87. package/dist/{types-G12i56s2.d.ts → types-B3A4YxaA.d.ts} +1 -1
  88. package/dist/{types-BrLbKnEz.d.ts → types-BBEGKB9m.d.ts} +1 -1
  89. package/dist/{types-O-abTIin.d.ts → types-DT3nEemY.d.ts} +3 -3
  90. package/dist/{types-04LqWrmy.d.ts → types-DhQfwiZn.d.ts} +1 -1
  91. package/dist/{types-JJCxRnaZ.d.ts → types-DulRCYdB.d.ts} +2 -2
  92. package/dist/{types-BCTRUGex.d.ts → types-p55Jc-sr.d.ts} +1 -1
  93. package/dist/ui/index.d.ts +1 -1
  94. package/dist/ui/index.js +1 -1
  95. package/dist/vector-store/index.d.ts +5 -5
  96. package/dist/vector-store/index.js +4 -4
  97. package/package.json +2 -10
  98. package/dist/agent-x3YTyv5i.d.ts +0 -222
  99. package/dist/chunk-2ODTMRHP.js +0 -54
  100. package/dist/chunk-2ODTMRHP.js.map +0 -1
  101. package/dist/chunk-BALBBVI3.js.map +0 -1
  102. package/dist/chunk-CWUJUSOS.js.map +0 -1
  103. package/dist/chunk-DALYP4PX.js +0 -225
  104. package/dist/chunk-DALYP4PX.js.map +0 -1
  105. package/dist/chunk-HYUYZEAJ.js +0 -223
  106. package/dist/chunk-HYUYZEAJ.js.map +0 -1
  107. package/dist/chunk-I6XOQ4LK.js.map +0 -1
  108. package/dist/chunk-JI5YZWNT.js +0 -220
  109. package/dist/chunk-JI5YZWNT.js.map +0 -1
  110. package/dist/chunk-MC3CCKEB.js.map +0 -1
  111. package/dist/chunk-MELYDKWQ.js.map +0 -1
  112. package/dist/chunk-MNWK2USR.js.map +0 -1
  113. package/dist/chunk-MRQLEK2B.js.map +0 -1
  114. package/dist/chunk-NCPN4SJR.js.map +0 -1
  115. package/dist/chunk-OIMLU4SF.js +0 -20
  116. package/dist/chunk-OIMLU4SF.js.map +0 -1
  117. package/dist/chunk-Q25IWLBT.js +0 -138
  118. package/dist/chunk-Q25IWLBT.js.map +0 -1
  119. package/dist/chunk-UQX6EXWG.js +0 -33
  120. package/dist/chunk-UQX6EXWG.js.map +0 -1
  121. package/dist/chunk-WQKHFADH.js.map +0 -1
  122. package/dist/chunk-XUUY2L2D.js +0 -42
  123. package/dist/chunk-XUUY2L2D.js.map +0 -1
  124. package/dist/chunk-YLMDBQO4.js +0 -141
  125. package/dist/chunk-YLMDBQO4.js.map +0 -1
  126. package/dist/hooks/index.d.ts +0 -12
  127. package/dist/hooks/index.js +0 -17
  128. package/dist/hooks/index.js.map +0 -1
  129. package/dist/index-BxSbmOMr.d.ts +0 -257
  130. package/dist/middleware-Dp3d_pxi.d.ts +0 -90
  131. package/dist/request/index.d.ts +0 -28
  132. package/dist/request/index.js +0 -25
  133. package/dist/request/index.js.map +0 -1
  134. package/dist/tool-Cohdv5GC.d.ts +0 -65
  135. package/dist/types-D9JpeAPF.d.ts +0 -114
@@ -0,0 +1,122 @@
1
+ import {
2
+ createCompletion
3
+ } from "./chunk-M3IOWB4Y.js";
4
+ import {
5
+ toProviderJsonSchema
6
+ } from "./chunk-RFDVKCIE.js";
7
+ import {
8
+ CompletionCapabilityError,
9
+ Message,
10
+ Usage
11
+ } from "./chunk-ADH7NNCS.js";
12
+ import {
13
+ resolveRetryOptions,
14
+ retryDelayMs,
15
+ waitForRetry
16
+ } from "./chunk-A3UBYTJT.js";
17
+
18
+ // src/extractor/extractor.ts
19
+ import { z } from "zod";
20
+ var SUBMIT_TOOL_NAME = "submit";
21
+ var DEFAULT_EXTRACTOR_INSTRUCTIONS = "You are an AI assistant whose purpose is to extract structured data from the provided text.\nYou have access to a `submit` function that defines the structure of the data to extract.\nAlways call the `submit` function with the structured data. Use default or null values when information is missing.";
22
+ var ExtractionError = class extends Error {
23
+ constructor(message, cause) {
24
+ super(message);
25
+ this.cause = cause;
26
+ this.name = "ExtractionError";
27
+ }
28
+ cause;
29
+ };
30
+ var Extractor = class {
31
+ model;
32
+ outputSchema;
33
+ instructions;
34
+ submitTool;
35
+ constructor(options) {
36
+ if (!(options.outputSchema instanceof z.ZodType)) {
37
+ throw new TypeError("Extractor outputSchema must be a Zod schema.");
38
+ }
39
+ this.model = options.model;
40
+ this.outputSchema = options.outputSchema;
41
+ this.instructions = options.instructions === void 0 || options.instructions.length === 0 ? DEFAULT_EXTRACTOR_INSTRUCTIONS : `${DEFAULT_EXTRACTOR_INSTRUCTIONS}
42
+
43
+ ${options.instructions}`;
44
+ this.submitTool = {
45
+ name: SUBMIT_TOOL_NAME,
46
+ description: "Submit the structured data extracted from the provided text.",
47
+ parameters: toProviderJsonSchema(this.outputSchema, { io: "input" })
48
+ };
49
+ }
50
+ async extract(text, options = {}) {
51
+ return (await this.extractResult(text, options)).data;
52
+ }
53
+ async extractResult(text, options = {}) {
54
+ const prompt = Message.user(text);
55
+ const retries = resolveExtractionRetries(options.retries);
56
+ const maxAttempts = retries?.maxAttempts ?? 1;
57
+ let usage = Usage.empty();
58
+ let lastError;
59
+ for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
60
+ try {
61
+ const result = await createCompletion(prompt, {
62
+ model: this.model,
63
+ instructions: this.instructions,
64
+ tools: [globalThis.structuredClone(this.submitTool)],
65
+ temperature: options.temperature,
66
+ maxTokens: options.maxTokens,
67
+ additionalParams: options.additionalParams,
68
+ toolChoice: "required"
69
+ });
70
+ const response = result.response;
71
+ usage = Usage.add(usage, response.usage);
72
+ const data = extractSubmittedData(response, this.outputSchema);
73
+ return {
74
+ data,
75
+ usage,
76
+ messages: [prompt, Message.assistant(response.choice, response.messageId)]
77
+ };
78
+ } catch (error) {
79
+ if (error instanceof CompletionCapabilityError) {
80
+ throw error;
81
+ }
82
+ lastError = error;
83
+ if (retries === void 0 || attempt >= retries.maxAttempts || !retries.shouldRetry({
84
+ error,
85
+ attempt,
86
+ maxAttempts: retries.maxAttempts,
87
+ streaming: false
88
+ })) {
89
+ break;
90
+ }
91
+ await waitForRetry(retryDelayMs(retries, attempt));
92
+ }
93
+ }
94
+ throw new ExtractionError("No data extracted", lastError);
95
+ }
96
+ };
97
+ function resolveExtractionRetries(options) {
98
+ if (options === void 0) {
99
+ return void 0;
100
+ }
101
+ return resolveRetryOptions({
102
+ ...options,
103
+ shouldRetry: options.shouldRetry ?? (() => true)
104
+ });
105
+ }
106
+ function extractSubmittedData(response, schema) {
107
+ const submitted = response.choice.filter((content) => content.type === "tool_call").filter((toolCall) => toolCall.function.name === SUBMIT_TOOL_NAME).at(-1);
108
+ if (submitted === void 0) {
109
+ throw new ExtractionError("The model did not call the submit tool");
110
+ }
111
+ try {
112
+ return schema.parse(submitted.function.arguments);
113
+ } catch (error) {
114
+ throw new ExtractionError("Submitted data failed output schema validation", error);
115
+ }
116
+ }
117
+
118
+ export {
119
+ ExtractionError,
120
+ Extractor
121
+ };
122
+ //# sourceMappingURL=chunk-J6GNQART.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/extractor/extractor.ts"],"sourcesContent":["import { z } from \"zod\";\nimport {\n CompletionCapabilityError,\n type CompletionModel,\n type CompletionResponse,\n createCompletion,\n type JsonValue,\n type Message,\n Message as MessageFactory,\n type ToolDefinition,\n Usage,\n} from \"../completion/index\";\nimport {\n type ResolvedRetryOptions,\n type RetryOptions,\n resolveRetryOptions,\n retryDelayMs,\n waitForRetry,\n} from \"../retry\";\nimport { toProviderJsonSchema, type ZodSchema } from \"../schema/zod-schema\";\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 ExtractorOptions<T, M extends CompletionModel = CompletionModel> = {\n model: M;\n outputSchema: ZodSchema<T>;\n instructions?: string | undefined;\n};\n\nexport type ExtractOptions = {\n retries?: RetryOptions | undefined;\n temperature?: number | undefined;\n maxTokens?: number | undefined;\n additionalParams?: JsonValue | undefined;\n};\n\nexport type ExtractionResult<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\n/** Converts text into data validated and transformed by a Zod output schema. */\nexport class Extractor<T, M extends CompletionModel = CompletionModel> {\n readonly model: M;\n readonly outputSchema: ZodSchema<T>;\n\n private readonly instructions: string;\n private readonly submitTool: ToolDefinition;\n\n constructor(options: ExtractorOptions<T, M>) {\n if (!(options.outputSchema instanceof z.ZodType)) {\n throw new TypeError(\"Extractor outputSchema must be a Zod schema.\");\n }\n\n this.model = options.model;\n this.outputSchema = options.outputSchema;\n this.instructions =\n options.instructions === undefined || options.instructions.length === 0\n ? DEFAULT_EXTRACTOR_INSTRUCTIONS\n : `${DEFAULT_EXTRACTOR_INSTRUCTIONS}\\n\\n${options.instructions}`;\n this.submitTool = {\n name: SUBMIT_TOOL_NAME,\n description: \"Submit the structured data extracted from the provided text.\",\n parameters: toProviderJsonSchema(this.outputSchema, { io: \"input\" }),\n };\n }\n\n async extract(text: string, options: ExtractOptions = {}): Promise<T> {\n return (await this.extractResult(text, options)).data;\n }\n\n async extractResult(text: string, options: ExtractOptions = {}): Promise<ExtractionResult<T>> {\n const prompt = MessageFactory.user(text);\n const retries = resolveExtractionRetries(options.retries);\n const maxAttempts = retries?.maxAttempts ?? 1;\n let usage = Usage.empty();\n let lastError: unknown;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {\n try {\n const result = await createCompletion(prompt, {\n model: this.model,\n instructions: this.instructions,\n tools: [globalThis.structuredClone(this.submitTool)],\n temperature: options.temperature,\n maxTokens: options.maxTokens,\n additionalParams: options.additionalParams,\n toolChoice: \"required\",\n });\n const response = result.response;\n usage = Usage.add(usage, response.usage);\n const data = extractSubmittedData(response, this.outputSchema);\n return {\n data,\n usage,\n messages: [prompt, MessageFactory.assistant(response.choice, response.messageId)],\n };\n } catch (error) {\n if (error instanceof CompletionCapabilityError) {\n throw error;\n }\n lastError = error;\n if (\n retries === undefined ||\n attempt >= retries.maxAttempts ||\n !retries.shouldRetry({\n error,\n attempt,\n maxAttempts: retries.maxAttempts,\n streaming: false,\n })\n ) {\n break;\n }\n await waitForRetry(retryDelayMs(retries, attempt));\n }\n }\n\n throw new ExtractionError(\"No data extracted\", lastError);\n }\n}\n\nfunction resolveExtractionRetries(\n options: RetryOptions | undefined,\n): ResolvedRetryOptions | undefined {\n if (options === undefined) {\n return undefined;\n }\n return resolveRetryOptions({\n ...options,\n shouldRetry: options.shouldRetry ?? (() => true),\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 try {\n return schema.parse(submitted.function.arguments);\n } catch (error) {\n throw new ExtractionError(\"Submitted data failed output schema validation\", error);\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,72 +1,32 @@
1
+ import {
2
+ toProviderJsonSchema
3
+ } from "./chunk-RFDVKCIE.js";
1
4
  import {
2
5
  Message,
6
+ Usage,
3
7
  assertCompletionRequestSupported,
4
8
  isProviderTool,
5
9
  textFromAssistantContent
6
10
  } from "./chunk-ADH7NNCS.js";
7
11
  import {
8
- toProviderJsonSchema
9
- } from "./chunk-WQKHFADH.js";
12
+ resolveRetryOptions,
13
+ retryDelayMs,
14
+ retryOptionsForFailure,
15
+ runWithRetries,
16
+ waitForRetry
17
+ } from "./chunk-A3UBYTJT.js";
10
18
 
11
- // src/completion/create-completion.ts
12
- function createCompletion(model, options) {
13
- return sendCompletion(model, options);
14
- }
15
- function createCompletionStream(model, options) {
16
- const request = toCompletionRequest(options);
17
- if (!isStreamingCompletionModel(model) || !model.capabilities.streaming) {
18
- throw new Error("This completion model does not support streaming");
19
- }
20
- assertCompletionRequestSupported(model, request, { streaming: true });
21
- return model.streamCompletion(request);
22
- }
23
- async function createParsedCompletion(model, options) {
24
- const { schema, ...completionOptions } = options;
25
- const request = toCompletionRequest(
26
- {
27
- ...completionOptions,
28
- outputSchema: toProviderJsonSchema(schema)
29
- },
30
- "createParsedCompletion"
31
- );
32
- assertCompletionRequestSupported(model, request);
33
- const response = await model.completion(request);
34
- const text = textFromAssistantContent(response.choice);
35
- return {
36
- data: parseCompletionData(text, schema),
37
- text,
38
- content: response.choice,
39
- usage: response.usage,
40
- response
41
- };
42
- }
43
- async function sendCompletion(model, options) {
44
- const request = toCompletionRequest(options);
45
- assertCompletionRequestSupported(model, request);
46
- const response = await model.completion(request);
47
- return {
48
- text: textFromAssistantContent(response.choice),
49
- content: response.choice,
50
- usage: response.usage,
51
- response
52
- };
53
- }
54
- function toCompletionRequest(options, helperName = "createCompletion") {
55
- const chatHistory = [
56
- ...messagesFromMessages(options.messages),
57
- ...messagesFromInput(options.input)
58
- ];
59
- if (chatHistory.length === 0) {
60
- throw new Error(`${helperName} requires input or messages.`);
61
- }
19
+ // src/internal/completion-request.ts
20
+ function createCompletionRequest(input, options) {
62
21
  const configuredTools = options.tools ?? [];
63
22
  const request = {
64
- chatHistory,
23
+ chatHistory: messagesFromInput(input),
65
24
  documents: [...options.documents ?? []],
66
25
  tools: configuredTools.filter((tool) => !isProviderTool(tool))
67
26
  };
68
27
  const providerTools = configuredTools.filter(isProviderTool);
69
28
  if (providerTools.length > 0) request.providerTools = providerTools;
29
+ if (options.modelOverride !== void 0) request.model = options.modelOverride;
70
30
  if (options.instructions !== void 0 && options.instructions.length > 0) {
71
31
  request.instructions = options.instructions;
72
32
  }
@@ -74,30 +34,27 @@ function toCompletionRequest(options, helperName = "createCompletion") {
74
34
  if (options.maxTokens !== void 0) request.maxTokens = options.maxTokens;
75
35
  if (options.toolChoice !== void 0) request.toolChoice = options.toolChoice;
76
36
  if (options.outputSchema !== void 0) request.outputSchema = options.outputSchema;
77
- if (options.params !== void 0) request.additionalParams = options.params;
37
+ if (options.additionalParams !== void 0) request.additionalParams = options.additionalParams;
78
38
  return request;
79
39
  }
80
40
  function messagesFromInput(input) {
81
- if (input === void 0) {
82
- return [];
83
- }
84
41
  if (typeof input === "string") {
85
42
  return [Message.user(input)];
86
43
  }
87
44
  if (Array.isArray(input)) {
88
- return normalizeMessageArray(input, "input");
45
+ return normalizeMessageArray(input);
89
46
  }
90
47
  if (!isCoreMessage(input)) {
91
48
  throw new TypeError("input must be a string, Message, or Message[].");
92
49
  }
93
50
  return [input];
94
51
  }
95
- function messagesFromMessages(messages) {
96
- return messages === void 0 ? [] : normalizeMessageArray(messages, "messages");
97
- }
98
- function normalizeMessageArray(messages, fieldName) {
52
+ function normalizeMessageArray(messages) {
53
+ if (messages.length === 0) {
54
+ throw new Error("input must contain at least one Message.");
55
+ }
99
56
  if (!messages.every(isCoreMessage)) {
100
- throw new TypeError(`${fieldName} must contain only Message values.`);
57
+ throw new TypeError("input must contain only Message values.");
101
58
  }
102
59
  return [...messages];
103
60
  }
@@ -197,6 +154,107 @@ function isDocumentContent(value) {
197
154
  function isRecord(value) {
198
155
  return typeof value === "object" && value !== null;
199
156
  }
157
+
158
+ // src/completion/create-completion.ts
159
+ async function createCompletion(input, options) {
160
+ const request = createCompletionRequest(input, options);
161
+ assertCompletionRequestSupported(options.model, request);
162
+ const retries = resolveOptionalRetries(options.retries);
163
+ return sendCompletion(options.model, request, retries);
164
+ }
165
+ function createCompletionStream(input, options) {
166
+ const request = createCompletionRequest(input, options);
167
+ if (!isStreamingCompletionModel(options.model) || !options.model.capabilities.streaming) {
168
+ throw new Error("This completion model does not support streaming");
169
+ }
170
+ assertCompletionRequestSupported(options.model, request, { streaming: true });
171
+ const retries = resolveOptionalRetries(options.retries);
172
+ return streamCompletionWithRetries(options.model, request, retries);
173
+ }
174
+ async function createParsedCompletion(input, options) {
175
+ const { schema, ...completionOptions } = options;
176
+ const result = await createCompletion(input, {
177
+ ...completionOptions,
178
+ outputSchema: toProviderJsonSchema(schema)
179
+ });
180
+ return {
181
+ ...result,
182
+ data: parseCompletionData(result.text, schema)
183
+ };
184
+ }
185
+ async function sendCompletion(model, request, retries) {
186
+ const response = await runWithRetries(
187
+ () => model.completion(request),
188
+ retries,
189
+ { streaming: false }
190
+ );
191
+ return {
192
+ text: textFromAssistantContent(response.choice),
193
+ content: response.choice,
194
+ usage: response.usage,
195
+ response
196
+ };
197
+ }
198
+ function resolveOptionalRetries(options) {
199
+ return options === void 0 ? void 0 : resolveRetryOptions(options);
200
+ }
201
+ async function* streamCompletionWithRetries(model, request, retries) {
202
+ let attempt = 1;
203
+ let swallowedUsage = Usage.empty();
204
+ while (true) {
205
+ let exposedEvent = false;
206
+ let retryDelay;
207
+ try {
208
+ const events = model.streamCompletion(request);
209
+ for await (const event of events) {
210
+ if (event.type === "error" && !exposedEvent) {
211
+ const retryOptions = retryOptionsForFailure(retries, {
212
+ error: event.error,
213
+ attempt,
214
+ streaming: true
215
+ });
216
+ if (retryOptions !== void 0) {
217
+ if (event.usage !== void 0) {
218
+ swallowedUsage = Usage.add(swallowedUsage, event.usage);
219
+ }
220
+ retryDelay = retryDelayMs(retryOptions, attempt);
221
+ break;
222
+ }
223
+ }
224
+ exposedEvent = true;
225
+ if (event.type === "final" && swallowedUsage.totalTokens > 0) {
226
+ yield {
227
+ ...event,
228
+ response: {
229
+ ...event.response,
230
+ usage: Usage.add(swallowedUsage, event.response.usage)
231
+ }
232
+ };
233
+ } else if (event.type === "error" && swallowedUsage.totalTokens > 0) {
234
+ yield {
235
+ ...event,
236
+ usage: Usage.add(swallowedUsage, event.usage ?? Usage.empty())
237
+ };
238
+ } else {
239
+ yield event;
240
+ }
241
+ }
242
+ if (retryDelay === void 0) return;
243
+ await waitForRetry(retryDelay);
244
+ attempt += 1;
245
+ } catch (error) {
246
+ if (exposedEvent) throw error;
247
+ const retryOptions = retryOptionsForFailure(retries, {
248
+ error,
249
+ attempt,
250
+ streaming: true
251
+ });
252
+ if (retryOptions === void 0) throw error;
253
+ await waitForRetry(retryDelayMs(retryOptions, attempt));
254
+ attempt += 1;
255
+ }
256
+ }
257
+ }
200
258
  function isStreamingCompletionModel(model) {
201
259
  return typeof model.streamCompletion === "function";
202
260
  }
@@ -213,9 +271,10 @@ function parseCompletionData(text, schema) {
213
271
  }
214
272
 
215
273
  export {
274
+ createCompletionRequest,
216
275
  createCompletion,
217
276
  createCompletionStream,
218
277
  createParsedCompletion,
219
278
  isStreamingCompletionModel
220
279
  };
221
- //# sourceMappingURL=chunk-MC3CCKEB.js.map
280
+ //# sourceMappingURL=chunk-M3IOWB4Y.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/internal/completion-request.ts","../src/completion/create-completion.ts"],"sourcesContent":["import type {\n CompletionModel,\n CompletionRequest,\n CompletionTool,\n Document,\n JsonObject,\n JsonValue,\n Message as MessageType,\n ToolChoice,\n ToolDefinition,\n} from \"../completion/types\";\nimport { isProviderTool, Message } from \"../completion/types\";\n\ntype ModelNameOf<Model extends CompletionModel> =\n Model extends CompletionModel<unknown, infer ModelName> ? ModelName : string;\n\nexport type CompletionRequestFor<Model extends CompletionModel> = CompletionRequest<\n ModelNameOf<Model>\n>;\n\nexport type CompletionRequestOptions<Model extends CompletionModel = CompletionModel> = {\n model: Model;\n modelOverride?: ModelNameOf<Model> | undefined;\n instructions?: string | undefined;\n documents?: readonly Document[] | undefined;\n tools?: readonly CompletionTool[] | undefined;\n temperature?: number | undefined;\n maxTokens?: number | undefined;\n toolChoice?: ToolChoice | undefined;\n outputSchema?: JsonObject | undefined;\n additionalParams?: JsonValue | undefined;\n};\n\nexport function createCompletionRequest<Model extends CompletionModel>(\n input: string | MessageType | readonly MessageType[],\n options: CompletionRequestOptions<Model>,\n): CompletionRequestFor<Model> {\n const configuredTools = options.tools ?? [];\n const request: CompletionRequestFor<Model> = {\n chatHistory: messagesFromInput(input),\n documents: [...(options.documents ?? [])],\n tools: configuredTools.filter((tool): tool is ToolDefinition => !isProviderTool(tool)),\n };\n const providerTools = configuredTools.filter(isProviderTool);\n\n if (providerTools.length > 0) request.providerTools = providerTools;\n if (options.modelOverride !== undefined) request.model = options.modelOverride;\n if (options.instructions !== undefined && options.instructions.length > 0) {\n request.instructions = options.instructions;\n }\n if (options.temperature !== undefined) request.temperature = options.temperature;\n if (options.maxTokens !== undefined) request.maxTokens = options.maxTokens;\n if (options.toolChoice !== undefined) request.toolChoice = options.toolChoice;\n if (options.outputSchema !== undefined) request.outputSchema = options.outputSchema;\n if (options.additionalParams !== undefined) request.additionalParams = options.additionalParams;\n\n return request;\n}\n\nfunction messagesFromInput(input: string | MessageType | readonly MessageType[]): MessageType[] {\n if (typeof input === \"string\") {\n return [Message.user(input)];\n }\n if (Array.isArray(input)) {\n return normalizeMessageArray(input);\n }\n if (!isCoreMessage(input)) {\n throw new TypeError(\"input must be a string, Message, or Message[].\");\n }\n return [input];\n}\n\nfunction normalizeMessageArray(messages: readonly MessageType[]): MessageType[] {\n if (messages.length === 0) {\n throw new Error(\"input must contain at least one Message.\");\n }\n if (!messages.every(isCoreMessage)) {\n throw new TypeError(\"input must contain only Message values.\");\n }\n\n return [...messages];\n}\n\nfunction isCoreMessage(value: unknown): value is MessageType {\n if (!isRecord(value)) {\n return false;\n }\n\n if (value.role === \"system\") {\n return typeof value.content === \"string\";\n }\n\n if (value.role === \"user\") {\n return Array.isArray(value.content) && value.content.every(isUserContent);\n }\n\n if (value.role === \"assistant\") {\n return (\n (value.id === undefined || typeof value.id === \"string\") &&\n Array.isArray(value.content) &&\n value.content.every(isAssistantContent)\n );\n }\n\n if (value.role === \"tool\") {\n return Array.isArray(value.content) && value.content.every(isToolContent);\n }\n\n return false;\n}\n\nfunction isUserContent(value: unknown): boolean {\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 isAssistantContent(value: unknown): boolean {\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 === \"reasoning\") {\n return (\n typeof value.text === \"string\" &&\n (value.id === undefined || typeof value.id === \"string\") &&\n (value.content === undefined || Array.isArray(value.content))\n );\n }\n\n if (value.type === \"tool_call\") {\n return (\n typeof value.id === \"string\" &&\n (value.callId === undefined || typeof value.callId === \"string\") &&\n isRecord(value.function) &&\n typeof value.function.name === \"string\" &&\n \"arguments\" in value.function\n );\n }\n\n if (value.type === \"image\") {\n return isImageContent(value);\n }\n\n return false;\n}\n\nfunction isToolContent(value: unknown): boolean {\n return (\n isRecord(value) &&\n value.type === \"tool_result\" &&\n typeof value.id === \"string\" &&\n (value.callId === undefined || typeof value.callId === \"string\") &&\n (value.toolName === undefined || typeof value.toolName === \"string\") &&\n Array.isArray(value.content) &&\n value.content.every(isToolResultContent)\n );\n}\n\nfunction isToolResultContent(value: unknown): boolean {\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 (\n typeof value.data === \"string\" &&\n (value.mediaType === undefined || typeof value.mediaType === \"string\")\n );\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 isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n","import { createCompletionRequest } from \"../internal/completion-request\";\nimport {\n type ResolvedRetryOptions,\n type RetryOptions,\n resolveRetryOptions,\n retryDelayMs,\n retryOptionsForFailure,\n runWithRetries,\n waitForRetry,\n} from \"../retry\";\nimport { toProviderJsonSchema, type ZodSchema } from \"../schema/zod-schema\";\nimport type {\n AssistantContent,\n CompletionModel,\n CompletionRequest,\n CompletionResponse,\n CompletionStreamEvent,\n CompletionTool,\n Document,\n JsonObject,\n JsonValue,\n Message as MessageType,\n StreamingCompletionModel,\n ToolChoice,\n} from \"./types\";\nimport { assertCompletionRequestSupported, textFromAssistantContent, Usage } from \"./types\";\n\nexport type CreateCompletionInput = string | MessageType | MessageType[];\n\nexport type CreateCompletionBaseOptions<Model extends CompletionModel = CompletionModel> = {\n model: Model;\n instructions?: string | undefined;\n documents?: Document[] | undefined;\n tools?: CompletionTool[] | undefined;\n temperature?: number | undefined;\n maxTokens?: number | undefined;\n toolChoice?: ToolChoice | undefined;\n outputSchema?: JsonObject | undefined;\n additionalParams?: JsonValue | undefined;\n retries?: RetryOptions | undefined;\n};\n\nexport type CreateCompletionOptions<Model extends CompletionModel = CompletionModel> =\n CreateCompletionBaseOptions<Model>;\n\nexport type CreateCompletionStreamOptions<\n Model extends StreamingCompletionModel = StreamingCompletionModel,\n> = CreateCompletionBaseOptions<Model>;\n\nexport type CreateParsedCompletionOptions<\n T,\n Model extends CompletionModel = CompletionModel,\n> = Omit<CreateCompletionBaseOptions<Model>, \"outputSchema\"> & { schema: ZodSchema<T> };\n\nexport type CreateCompletionResult<RawResponse = unknown> = {\n text: string;\n content: AssistantContent[];\n usage: Usage;\n response: CompletionResponse<RawResponse>;\n};\n\nexport type CreateParsedCompletionResult<\n T,\n RawResponse = unknown,\n> = CreateCompletionResult<RawResponse> & {\n data: T;\n};\n\ntype RawResponseOf<Model> =\n Model extends CompletionModel<infer RawResponse, infer _ModelName> ? RawResponse : unknown;\n\nexport async function createCompletion<Model extends CompletionModel>(\n input: CreateCompletionInput,\n options: CreateCompletionOptions<Model>,\n): Promise<CreateCompletionResult<RawResponseOf<Model>>> {\n const request = createCompletionRequest(input, options);\n assertCompletionRequestSupported(options.model, request);\n const retries = resolveOptionalRetries(options.retries);\n return sendCompletion(options.model, request, retries);\n}\n\nexport function createCompletionStream<Model extends StreamingCompletionModel>(\n input: CreateCompletionInput,\n options: CreateCompletionStreamOptions<Model>,\n): AsyncIterable<CompletionStreamEvent<RawResponseOf<Model>>> {\n const request = createCompletionRequest(input, options);\n if (!isStreamingCompletionModel(options.model) || !options.model.capabilities.streaming) {\n throw new Error(\"This completion model does not support streaming\");\n }\n assertCompletionRequestSupported(options.model, request, { streaming: true });\n const retries = resolveOptionalRetries(options.retries);\n return streamCompletionWithRetries(options.model, request, retries);\n}\n\nexport async function createParsedCompletion<T, Model extends CompletionModel>(\n input: CreateCompletionInput,\n options: CreateParsedCompletionOptions<T, Model>,\n): Promise<CreateParsedCompletionResult<T, RawResponseOf<Model>>> {\n const { schema, ...completionOptions } = options;\n const result = await createCompletion(input, {\n ...completionOptions,\n outputSchema: toProviderJsonSchema(schema),\n });\n return {\n ...result,\n data: parseCompletionData(result.text, schema),\n };\n}\n\nasync function sendCompletion<Model extends CompletionModel>(\n model: Model,\n request: CompletionRequest,\n retries: ResolvedRetryOptions | undefined,\n): Promise<CreateCompletionResult<RawResponseOf<Model>>> {\n const response = await runWithRetries(\n () => model.completion(request) as Promise<CompletionResponse<RawResponseOf<Model>>>,\n retries,\n { streaming: false },\n );\n return {\n text: textFromAssistantContent(response.choice),\n content: response.choice,\n usage: response.usage,\n response,\n };\n}\n\nfunction resolveOptionalRetries(\n options: RetryOptions | undefined,\n): ResolvedRetryOptions | undefined {\n return options === undefined ? undefined : resolveRetryOptions(options);\n}\n\nasync function* streamCompletionWithRetries<Model extends StreamingCompletionModel>(\n model: Model,\n request: CompletionRequest,\n retries: ResolvedRetryOptions | undefined,\n): AsyncIterable<CompletionStreamEvent<RawResponseOf<Model>>> {\n let attempt = 1;\n let swallowedUsage = Usage.empty();\n\n while (true) {\n let exposedEvent = false;\n let retryDelay: number | undefined;\n try {\n const events = model.streamCompletion(request) as AsyncIterable<\n CompletionStreamEvent<RawResponseOf<Model>>\n >;\n for await (const event of events) {\n if (event.type === \"error\" && !exposedEvent) {\n const retryOptions = retryOptionsForFailure(retries, {\n error: event.error,\n attempt,\n streaming: true,\n });\n if (retryOptions !== undefined) {\n if (event.usage !== undefined) {\n swallowedUsage = Usage.add(swallowedUsage, event.usage);\n }\n retryDelay = retryDelayMs(retryOptions, attempt);\n break;\n }\n }\n\n exposedEvent = true;\n if (event.type === \"final\" && swallowedUsage.totalTokens > 0) {\n yield {\n ...event,\n response: {\n ...event.response,\n usage: Usage.add(swallowedUsage, event.response.usage),\n },\n };\n } else if (event.type === \"error\" && swallowedUsage.totalTokens > 0) {\n yield {\n ...event,\n usage: Usage.add(swallowedUsage, event.usage ?? Usage.empty()),\n };\n } else {\n yield event;\n }\n }\n if (retryDelay === undefined) return;\n await waitForRetry(retryDelay);\n attempt += 1;\n } catch (error) {\n if (exposedEvent) throw error;\n const retryOptions = retryOptionsForFailure(retries, {\n error,\n attempt,\n streaming: true,\n });\n if (retryOptions === undefined) throw error;\n await waitForRetry(retryDelayMs(retryOptions, attempt));\n attempt += 1;\n }\n }\n}\n\nexport function isStreamingCompletionModel(\n model: CompletionModel,\n): model is StreamingCompletionModel {\n return typeof (model as { streamCompletion?: unknown }).streamCompletion === \"function\";\n}\n\nfunction parseCompletionData<T>(text: string, schema: ZodSchema<T>): T {\n let json: unknown;\n try {\n json = JSON.parse(text);\n } catch (error) {\n throw new Error(\"createParsedCompletion expected the model response to be valid JSON.\", {\n cause: error,\n });\n }\n\n return schema.parse(json);\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,39 @@
1
+ import {
2
+ resolveRetryOptions,
3
+ runWithRetries
4
+ } from "./chunk-A3UBYTJT.js";
5
+
6
+ // src/transcription/transcribe.ts
7
+ function transcribe(audio, options) {
8
+ const data = toUint8Array(audio);
9
+ if (data.byteLength === 0) {
10
+ throw new Error("Transcription audio cannot be empty.");
11
+ }
12
+ if (typeof options.filename !== "string" || options.filename.trim().length === 0) {
13
+ throw new TypeError("Transcription filename must be a non-empty string.");
14
+ }
15
+ const request = { data, filename: options.filename };
16
+ if (options.language !== void 0) request.language = options.language;
17
+ if (options.prompt !== void 0) request.prompt = options.prompt;
18
+ if (options.temperature !== void 0) request.temperature = options.temperature;
19
+ if (options.additionalParams !== void 0) request.additionalParams = options.additionalParams;
20
+ const retries = options.retries === void 0 ? void 0 : resolveRetryOptions(options.retries);
21
+ return runWithRetries(
22
+ () => options.model.transcription(request),
23
+ retries,
24
+ { streaming: false }
25
+ );
26
+ }
27
+ function toUint8Array(bytes) {
28
+ if (bytes instanceof Uint8Array) {
29
+ return new Uint8Array(
30
+ bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength)
31
+ );
32
+ }
33
+ return new Uint8Array(bytes.slice(0));
34
+ }
35
+
36
+ export {
37
+ transcribe
38
+ };
39
+ //# sourceMappingURL=chunk-QY5GZ7HR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/transcription/transcribe.ts"],"sourcesContent":["import type { JsonValue } from \"../completion\";\nimport { type RetryOptions, resolveRetryOptions, runWithRetries } from \"../retry\";\nimport type { TranscriptionModel, TranscriptionRequest } from \"./types\";\n\nexport type TranscribeOptions<Model extends TranscriptionModel = TranscriptionModel> = {\n model: Model;\n filename: string;\n language?: string | undefined;\n prompt?: string | undefined;\n temperature?: number | undefined;\n additionalParams?: JsonValue | undefined;\n retries?: RetryOptions | undefined;\n};\n\nexport function transcribe<Model extends TranscriptionModel>(\n audio: Uint8Array | ArrayBuffer,\n options: TranscribeOptions<Model>,\n): Promise<Awaited<ReturnType<Model[\"transcription\"]>>> {\n const data = toUint8Array(audio);\n if (data.byteLength === 0) {\n throw new Error(\"Transcription audio cannot be empty.\");\n }\n if (typeof options.filename !== \"string\" || options.filename.trim().length === 0) {\n throw new TypeError(\"Transcription filename must be a non-empty string.\");\n }\n\n const request: TranscriptionRequest = { data, filename: options.filename };\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.additionalParams !== undefined) request.additionalParams = options.additionalParams;\n\n const retries = options.retries === undefined ? undefined : resolveRetryOptions(options.retries);\n return runWithRetries<Awaited<ReturnType<Model[\"transcription\"]>>>(\n () =>\n options.model.transcription(request) as Promise<Awaited<ReturnType<Model[\"transcription\"]>>>,\n retries,\n { streaming: false },\n );\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":";;;;;;AAcO,SAAS,WACd,OACA,SACsD;AACtD,QAAM,OAAO,aAAa,KAAK;AAC/B,MAAI,KAAK,eAAe,GAAG;AACzB,UAAM,IAAI,MAAM,sCAAsC;AAAA,EACxD;AACA,MAAI,OAAO,QAAQ,aAAa,YAAY,QAAQ,SAAS,KAAK,EAAE,WAAW,GAAG;AAChF,UAAM,IAAI,UAAU,oDAAoD;AAAA,EAC1E;AAEA,QAAM,UAAgC,EAAE,MAAM,UAAU,QAAQ,SAAS;AACzE,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,qBAAqB,OAAW,SAAQ,mBAAmB,QAAQ;AAE/E,QAAM,UAAU,QAAQ,YAAY,SAAY,SAAY,oBAAoB,QAAQ,OAAO;AAC/F,SAAO;AAAA,IACL,MACE,QAAQ,MAAM,cAAc,OAAO;AAAA,IACrC;AAAA,IACA,EAAE,WAAW,MAAM;AAAA,EACrB;AACF;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":[]}