@anvia/core 0.12.8 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/dist/agent/index.d.ts +11 -11
  2. package/dist/agent/index.js +6 -6
  3. package/dist/{agent-BB9vVH6P.d.ts → agent-CXvjoW0J.d.ts} +7 -7
  4. package/dist/audio-generation/index.d.ts +1 -1
  5. package/dist/{chunk-SHORX7TZ.js → chunk-46IR5ZTN.js} +2 -2
  6. package/dist/{chunk-2STANSN6.js → chunk-7BV5JBJW.js} +4 -4
  7. package/dist/{chunk-QVFOCNF6.js → chunk-7H3TQN3I.js} +99 -10
  8. package/dist/chunk-7H3TQN3I.js.map +1 -0
  9. package/dist/{chunk-EGZCTSEW.js → chunk-HLISYYCB.js} +4 -4
  10. package/dist/{chunk-WRNPY5C6.js → chunk-JT4U4FGG.js} +3 -3
  11. package/dist/{chunk-UDISNNKR.js → chunk-MU3UPROJ.js} +51 -11
  12. package/dist/chunk-MU3UPROJ.js.map +1 -0
  13. package/dist/{chunk-IN5NPAWL.js → chunk-OCYL4AB6.js} +5 -5
  14. package/dist/{chunk-FUJ3POKH.js → chunk-W53PLBOL.js} +2 -2
  15. package/dist/completion/index.d.ts +3 -3
  16. package/dist/completion/index.js +4 -2
  17. package/dist/evals/index.d.ts +8 -8
  18. package/dist/evals/index.js +7 -7
  19. package/dist/extractor/index.d.ts +8 -8
  20. package/dist/extractor/index.js +7 -7
  21. package/dist/guardrails/index.d.ts +1 -1
  22. package/dist/hooks/index.d.ts +3 -3
  23. package/dist/image-generation/index.d.ts +1 -1
  24. package/dist/{index-CM-V4LS3.d.ts → index-ZQAiHW5Q.d.ts} +2 -2
  25. package/dist/index.d.ts +12 -12
  26. package/dist/index.js +10 -8
  27. package/dist/internal/agent.d.ts +8 -8
  28. package/dist/internal/agent.js +5 -5
  29. package/dist/{create-completion-CC8-Ep3w.d.ts → json-C5a6auAm.d.ts} +4 -2
  30. package/dist/loaders/index.d.ts +1 -1
  31. package/dist/mcp/index.d.ts +4 -4
  32. package/dist/memory/index.d.ts +3 -3
  33. package/dist/{middleware-i-jLsLom.d.ts → middleware-Cc_-sosu.d.ts} +3 -3
  34. package/dist/observability/index.d.ts +3 -3
  35. package/dist/pipeline/index.d.ts +8 -8
  36. package/dist/request/index.d.ts +8 -8
  37. package/dist/request/index.js +4 -4
  38. package/dist/skills/index.d.ts +4 -4
  39. package/dist/skills/index.js +2 -2
  40. package/dist/{think-tool-BKDCOJh5.d.ts → think-tool-DvhOlrL8.d.ts} +1 -1
  41. package/dist/tool/index.d.ts +5 -5
  42. package/dist/tool/index.js +2 -2
  43. package/dist/{tool-f2stpvUP.d.ts → tool-6f9bK92X.d.ts} +1 -1
  44. package/dist/transcription/index.d.ts +1 -1
  45. package/dist/{types-5JgWDgaM.d.ts → types-BG3s2WzI.d.ts} +2 -2
  46. package/dist/{types-b6fOVoW1.d.ts → types-BZQlZ4Vs.d.ts} +1 -1
  47. package/dist/{types-Dh7gfoGw.d.ts → types-BaYwqozV.d.ts} +1 -1
  48. package/dist/{types-DmvXANwl.d.ts → types-C708DOhL.d.ts} +1 -1
  49. package/dist/{types-bNDxj4Tt.d.ts → types-CNeDsGjw.d.ts} +1 -1
  50. package/dist/{types-C15r7N_4.d.ts → types-DzdJOf35.d.ts} +17 -6
  51. package/dist/ui/index.d.ts +1 -1
  52. package/dist/ui/index.js +2 -2
  53. package/dist/vector-store/index.d.ts +4 -4
  54. package/package.json +1 -1
  55. package/dist/chunk-QVFOCNF6.js.map +0 -1
  56. package/dist/chunk-UDISNNKR.js.map +0 -1
  57. /package/dist/{chunk-SHORX7TZ.js.map → chunk-46IR5ZTN.js.map} +0 -0
  58. /package/dist/{chunk-2STANSN6.js.map → chunk-7BV5JBJW.js.map} +0 -0
  59. /package/dist/{chunk-EGZCTSEW.js.map → chunk-HLISYYCB.js.map} +0 -0
  60. /package/dist/{chunk-WRNPY5C6.js.map → chunk-JT4U4FGG.js.map} +0 -0
  61. /package/dist/{chunk-IN5NPAWL.js.map → chunk-OCYL4AB6.js.map} +0 -0
  62. /package/dist/{chunk-FUJ3POKH.js.map → chunk-W53PLBOL.js.map} +0 -0
@@ -93,26 +93,37 @@ type ToolResult = {
93
93
  toolName?: string;
94
94
  content: ToolResultContent[];
95
95
  };
96
+ type MessageOptions = {
97
+ metadata?: JsonValue | undefined;
98
+ };
99
+ type AssistantMessageOptions = MessageOptions & {
100
+ id?: string | undefined;
101
+ };
96
102
  type ToolResultOptions = {
97
103
  callId?: string | undefined;
98
104
  toolName?: string | undefined;
99
105
  };
106
+ type ToolResultMessageOptions = ToolResultOptions & MessageOptions;
100
107
  type SystemMessage = {
101
108
  role: "system";
102
109
  content: string;
110
+ metadata?: JsonValue;
103
111
  };
104
112
  type UserMessage = {
105
113
  role: "user";
106
114
  content: UserContent[];
115
+ metadata?: JsonValue;
107
116
  };
108
117
  type AssistantMessage = {
109
118
  role: "assistant";
110
119
  id?: string;
111
120
  content: AssistantContent[];
121
+ metadata?: JsonValue;
112
122
  };
113
123
  type ToolMessage = {
114
124
  role: "tool";
115
125
  content: ToolContent[];
126
+ metadata?: JsonValue;
116
127
  };
117
128
  type UserContent = Text | ImageContent | DocumentContent;
118
129
  declare const UserContent: {
@@ -156,11 +167,11 @@ declare const AssistantContent: {
156
167
  declare function reasoningDisplayText(reasoning: Reasoning | ReasoningContent[]): string;
157
168
  type Message = SystemMessage | UserMessage | AssistantMessage | ToolMessage;
158
169
  declare const Message: {
159
- system(content: string): Message;
160
- user(content: string | UserContent[]): Message;
161
- assistant(content: string | AssistantContent[], id?: string): Message;
162
- tool(content: ToolContent | ToolContent[]): Message;
163
- toolResult(id: string, output: unknown, options?: ToolResultOptions): Message;
170
+ system(content: string, options?: MessageOptions): Message;
171
+ user(content: string | UserContent[], options?: MessageOptions): Message;
172
+ assistant(content: string | AssistantContent[], idOrOptions?: string | AssistantMessageOptions): Message;
173
+ tool(content: ToolContent | ToolContent[], options?: MessageOptions): Message;
174
+ toolResult(id: string, output: unknown, options?: ToolResultMessageOptions): Message;
164
175
  };
165
176
  type ToolChoice = "auto" | "required" | "none" | {
166
177
  type: "function";
@@ -258,4 +269,4 @@ declare function assertCompletionRequestSupported(model: CompletionModel, reques
258
269
  }): void;
259
270
  declare function textFromAssistantContent(content: AssistantContent[]): string;
260
271
 
261
- export { AssistantContent as A, reasoningDisplayText as B, type CompletionModel as C, type Document as D, textFromAssistantContent as E, type ImageContent as I, type JsonObject as J, Message as M, type Reasoning as R, type SystemMessage as S, type Text as T, Usage as U, type AssistantMessage as a, type CompletionRequest as b, type CompletionResponse as c, type JsonPrimitive as d, type JsonValue as e, type ToolCall as f, ToolContent as g, type ToolDefinition as h, type ToolMessage as i, type ToolResult as j, type ToolResultContent as k, UserContent as l, type UserMessage as m, type ToolChoice as n, type StreamingCompletionModel as o, type CompletionStreamEvent as p, isToolResultContentArray as q, CompletionCapabilityError as r, serializeToolResultOutput as s, type CompletionModelCapabilities as t, type DocumentContent as u, type ImageDetail as v, type ReasoningContent as w, type ReasoningContentType as x, type ToolFunction as y, assertCompletionRequestSupported as z };
272
+ export { AssistantContent as A, type ReasoningContentType as B, type CompletionModel as C, type Document as D, type StreamingCompletionModel as E, type ToolFunction as F, assertCompletionRequestSupported as G, reasoningDisplayText as H, type ImageContent as I, type JsonObject as J, textFromAssistantContent as K, Message as M, type Reasoning as R, type SystemMessage as S, type Text as T, Usage as U, type AssistantMessage as a, type AssistantMessageOptions as b, type CompletionRequest as c, type CompletionResponse as d, type JsonPrimitive as e, type JsonValue as f, type MessageOptions as g, type ToolCall as h, ToolContent as i, type ToolDefinition as j, type ToolMessage as k, type ToolResult as l, type ToolResultContent as m, type ToolResultMessageOptions as n, type ToolResultOptions as o, UserContent as p, type UserMessage as q, isToolResultContentArray as r, serializeToolResultOutput as s, type ToolChoice as t, CompletionCapabilityError as u, type CompletionModelCapabilities as v, type CompletionStreamEvent as w, type DocumentContent as x, type ImageDetail as y, type ReasoningContent as z };
@@ -1,4 +1,4 @@
1
- import { v as ImageDetail, e as JsonValue, U as Usage, M as Message } from '../types-C15r7N_4.js';
1
+ import { y as ImageDetail, f as JsonValue, U as Usage, M as Message } from '../types-DzdJOf35.js';
2
2
 
3
3
  type UIMessageRole = "system" | "user" | "assistant" | "tool";
4
4
  type UIError = {
package/dist/ui/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  coreMessagesToUIMessages,
3
3
  uiMessagesToCoreMessages
4
- } from "../chunk-UDISNNKR.js";
5
- import "../chunk-QVFOCNF6.js";
4
+ } from "../chunk-MU3UPROJ.js";
5
+ import "../chunk-7H3TQN3I.js";
6
6
  export {
7
7
  coreMessagesToUIMessages,
8
8
  uiMessagesToCoreMessages
@@ -1,8 +1,8 @@
1
1
  import { a as VectorMetadataValue, V as VectorMetadata, E as EmbeddingModel, c as EmbeddedDocument, d as Embedding } from '../types-DHHZztGO.js';
2
- import { T as Tool } from '../tool-f2stpvUP.js';
3
- import { V as VectorFilter, a as VectorSearchIndex, I as IndexStrategy, b as VectorSearchRequest, c as VectorSearchResult, d as VectorInspectRequest, e as VectorInspectPage, f as VectorSearchToolOptions } from '../types-DmvXANwl.js';
4
- export { L as LshOptions, g as VectorInspectItem } from '../types-DmvXANwl.js';
5
- import '../types-C15r7N_4.js';
2
+ import { T as Tool } from '../tool-6f9bK92X.js';
3
+ import { V as VectorFilter, a as VectorSearchIndex, I as IndexStrategy, b as VectorSearchRequest, c as VectorSearchResult, d as VectorInspectRequest, e as VectorInspectPage, f as VectorSearchToolOptions } from '../types-C708DOhL.js';
4
+ export { L as LshOptions, g as VectorInspectItem } from '../types-C708DOhL.js';
5
+ import '../types-DzdJOf35.js';
6
6
 
7
7
  declare const vectorFilter: {
8
8
  eq(key: string, value: VectorMetadataValue): VectorFilter;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anvia/core",
3
- "version": "0.12.8",
3
+ "version": "0.13.0",
4
4
  "description": "Core runtime primitives for context-aware Anvia agents.",
5
5
  "author": "anvia",
6
6
  "maintainer": "Indra Zulfi",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/completion/types.ts"],"sourcesContent":["export type JsonPrimitive = string | number | boolean | null;\nexport type JsonValue = JsonPrimitive | JsonObject | JsonValue[];\nexport type JsonObject = { [key: string]: JsonValue | undefined };\n\nexport type Document = {\n id: string;\n text: string;\n additionalProps?: Record<string, string>;\n};\n\nexport type Text = {\n type: \"text\";\n text: string;\n signature?: string;\n};\n\nexport type ImageDetail = \"auto\" | \"low\" | \"high\";\n\nexport type ImageContent = {\n type: \"image\";\n source:\n | {\n type: \"url\";\n url: string;\n }\n | {\n type: \"base64\";\n data: string;\n mediaType: string;\n };\n detail?: ImageDetail;\n};\n\nexport type DocumentContent = {\n type: \"document\";\n source:\n | {\n type: \"url\";\n url: string;\n mediaType: string;\n filename?: string;\n }\n | {\n type: \"base64\";\n data: string;\n mediaType: string;\n filename?: string;\n }\n | {\n type: \"text\";\n text: string;\n mediaType?: string;\n filename?: string;\n };\n};\n\nexport type Reasoning = {\n type: \"reasoning\";\n text: string;\n id?: string;\n content?: ReasoningContent[];\n};\n\nexport type ReasoningContent =\n | {\n type: \"text\";\n text: string;\n signature?: string;\n }\n | {\n type: \"summary\";\n text: string;\n }\n | {\n type: \"encrypted\";\n data: string;\n }\n | {\n type: \"redacted\";\n data: string;\n };\n\nexport type ReasoningContentType = ReasoningContent[\"type\"];\n\nexport type ToolFunction = {\n name: string;\n arguments: JsonValue;\n};\n\nexport type ToolCall = {\n type: \"tool_call\";\n id: string;\n callId?: string;\n function: ToolFunction;\n signature?: string;\n additionalParams?: JsonValue;\n};\n\nexport type ToolResultContent =\n | { type: \"text\"; text: string }\n | { type: \"image\"; data: string; mediaType?: string };\n\nexport type ToolResult = {\n type: \"tool_result\";\n id: string;\n callId?: string;\n toolName?: string;\n content: ToolResultContent[];\n};\n\ntype ToolResultOptions = {\n callId?: string | undefined;\n toolName?: string | undefined;\n};\n\nexport type UserContent = Text | ImageContent | DocumentContent;\nexport type AssistantContent = Text | ToolCall | Reasoning | ImageContent;\nexport type ToolContent = ToolResult;\n\nexport type SystemMessage = {\n role: \"system\";\n content: string;\n};\n\nexport type UserMessage = {\n role: \"user\";\n content: UserContent[];\n};\n\nexport type AssistantMessage = {\n role: \"assistant\";\n id?: string;\n content: AssistantContent[];\n};\n\nexport type ToolMessage = {\n role: \"tool\";\n content: ToolContent[];\n};\n\nexport type Message = SystemMessage | UserMessage | AssistantMessage | ToolMessage;\n\nexport const UserContent = {\n text(text: string): Text {\n return { type: \"text\", text };\n },\n imageUrl(url: string, options: { detail?: ImageDetail } = {}): ImageContent {\n const image: ImageContent = { type: \"image\", source: { type: \"url\", url } };\n if (options.detail !== undefined) {\n image.detail = options.detail;\n }\n return image;\n },\n imageBase64(\n data: string,\n mediaType: string,\n options: { detail?: ImageDetail } = {},\n ): ImageContent {\n const image: ImageContent = {\n type: \"image\",\n source: { type: \"base64\", data, mediaType },\n };\n if (options.detail !== undefined) {\n image.detail = options.detail;\n }\n return image;\n },\n documentUrl(\n url: string,\n mediaType: string,\n options: { filename?: string | undefined } = {},\n ): DocumentContent {\n return {\n type: \"document\",\n source:\n options.filename === undefined\n ? { type: \"url\", url, mediaType }\n : { type: \"url\", url, mediaType, filename: options.filename },\n };\n },\n documentBase64(\n data: string,\n mediaType: string,\n options: { filename?: string | undefined } = {},\n ): DocumentContent {\n return {\n type: \"document\",\n source:\n options.filename === undefined\n ? { type: \"base64\", data, mediaType }\n : { type: \"base64\", data, mediaType, filename: options.filename },\n };\n },\n documentText(text: string): Text {\n return { type: \"text\", text };\n },\n};\n\nexport const ToolContent = {\n toolResult(\n id: string,\n content: string | ToolResultContent[],\n callIdOrOptions?: string | ToolResultOptions,\n toolName?: string,\n ): ToolResult {\n const normalized =\n typeof content === \"string\" ? [{ type: \"text\" as const, text: content }] : content;\n const options = normalizeToolResultOptions(callIdOrOptions, toolName);\n const result: ToolResult = { type: \"tool_result\", id, content: normalized };\n if (options.callId !== undefined) {\n result.callId = options.callId;\n }\n if (options.toolName !== undefined) {\n result.toolName = options.toolName;\n }\n return result;\n },\n};\n\nfunction normalizeToolResultOptions(\n callIdOrOptions?: string | ToolResultOptions,\n toolName?: string,\n): ToolResultOptions {\n if (callIdOrOptions === undefined) {\n return toolName === undefined ? {} : { toolName };\n }\n if (typeof callIdOrOptions === \"string\") {\n return toolName === undefined\n ? { callId: callIdOrOptions }\n : { callId: callIdOrOptions, toolName };\n }\n return toolName === undefined ? callIdOrOptions : { ...callIdOrOptions, toolName };\n}\n\nexport function serializeToolResultOutput(output: unknown): string {\n if (typeof output === \"string\") {\n return output;\n }\n\n try {\n const serialized = JSON.stringify(output);\n return serialized === undefined ? String(output) : serialized;\n } catch {\n return String(output);\n }\n}\n\nexport function isToolResultContentArray(value: unknown): value is ToolResultContent[] {\n return (\n Array.isArray(value) &&\n value.length > 0 &&\n value.every((item) => {\n if (typeof item !== \"object\" || item === null || !(\"type\" in item)) {\n return false;\n }\n if (item.type === \"text\") {\n return \"text\" in item && typeof item.text === \"string\";\n }\n if (item.type === \"image\") {\n return (\n \"data\" in item &&\n typeof item.data === \"string\" &&\n (!(\"mediaType\" in item) ||\n item.mediaType === undefined ||\n typeof item.mediaType === \"string\")\n );\n }\n return false;\n })\n );\n}\n\nexport const AssistantContent = {\n text(text: string): Text {\n return { type: \"text\", text };\n },\n imageUrl(url: string, options: { detail?: ImageDetail } = {}): ImageContent {\n const image: ImageContent = { type: \"image\", source: { type: \"url\", url } };\n if (options.detail !== undefined) {\n image.detail = options.detail;\n }\n return image;\n },\n imageBase64(\n data: string,\n mediaType: string,\n options: { detail?: ImageDetail } = {},\n ): ImageContent {\n const image: ImageContent = {\n type: \"image\",\n source: { type: \"base64\", data, mediaType },\n };\n if (options.detail !== undefined) {\n image.detail = options.detail;\n }\n return image;\n },\n reasoning(text: string, id?: string): Reasoning {\n return id === undefined ? { type: \"reasoning\", text } : { type: \"reasoning\", text, id };\n },\n reasoningFromContent(content: ReasoningContent[], id?: string): Reasoning {\n const text = reasoningDisplayText(content);\n const reasoning: Reasoning = { type: \"reasoning\", text, content };\n return id === undefined ? reasoning : { ...reasoning, id };\n },\n reasoningSummary(text: string, id?: string): Reasoning {\n return AssistantContent.reasoningFromContent([{ type: \"summary\", text }], id);\n },\n reasoningEncrypted(data: string, id?: string): Reasoning {\n return AssistantContent.reasoningFromContent([{ type: \"encrypted\", data }], id);\n },\n reasoningRedacted(data: string, id?: string): Reasoning {\n return AssistantContent.reasoningFromContent([{ type: \"redacted\", data }], id);\n },\n toolCall(id: string, name: string, args: JsonValue, callId?: string): ToolCall {\n const base: ToolCall = {\n type: \"tool_call\",\n id,\n function: {\n name,\n arguments: args,\n },\n };\n return callId === undefined ? base : { ...base, callId };\n },\n};\n\nexport function reasoningDisplayText(reasoning: Reasoning | ReasoningContent[]): string {\n const content = Array.isArray(reasoning) ? reasoning : reasoning.content;\n if (content === undefined) {\n return Array.isArray(reasoning) ? \"\" : reasoning.text;\n }\n return content\n .flatMap((item) => {\n if (item.type === \"text\" || item.type === \"summary\") {\n return [item.text];\n }\n return [];\n })\n .join(\"\");\n}\n\nexport const Message = {\n system(content: string): Message {\n return { role: \"system\", content };\n },\n user(content: string | UserContent[]): Message {\n return {\n role: \"user\",\n content: typeof content === \"string\" ? [UserContent.text(content)] : content,\n };\n },\n assistant(content: string | AssistantContent[], id?: string): Message {\n const normalized = typeof content === \"string\" ? [AssistantContent.text(content)] : content;\n return id === undefined\n ? { role: \"assistant\", content: normalized }\n : { role: \"assistant\", id, content: normalized };\n },\n tool(content: ToolContent | ToolContent[]): Message {\n return {\n role: \"tool\",\n content: Array.isArray(content) ? content : [content],\n };\n },\n toolResult(id: string, output: unknown, options: ToolResultOptions = {}): Message {\n const content = isToolResultContentArray(output) ? output : serializeToolResultOutput(output);\n return Message.tool(ToolContent.toolResult(id, content, options));\n },\n};\n\nexport type ToolChoice =\n | \"auto\"\n | \"required\"\n | \"none\"\n | {\n type: \"function\";\n name: string;\n };\n\nexport type ToolDefinition = {\n name: string;\n description: string;\n parameters: JsonObject;\n};\n\nexport type Usage = {\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n cachedInputTokens: number;\n cacheCreationInputTokens: number;\n};\n\nexport const Usage = {\n empty(): Usage {\n return {\n inputTokens: 0,\n outputTokens: 0,\n totalTokens: 0,\n cachedInputTokens: 0,\n cacheCreationInputTokens: 0,\n };\n },\n add(left: Usage, right: Usage): Usage {\n return {\n inputTokens: left.inputTokens + right.inputTokens,\n outputTokens: left.outputTokens + right.outputTokens,\n totalTokens: left.totalTokens + right.totalTokens,\n cachedInputTokens: left.cachedInputTokens + right.cachedInputTokens,\n cacheCreationInputTokens: left.cacheCreationInputTokens + right.cacheCreationInputTokens,\n };\n },\n};\n\nexport type CompletionRequest<ModelName extends string = string> = {\n model?: ModelName;\n instructions?: string;\n chatHistory: Message[];\n documents: Document[];\n tools: ToolDefinition[];\n temperature?: number;\n maxTokens?: number;\n toolChoice?: ToolChoice;\n additionalParams?: JsonValue;\n outputSchema?: JsonObject;\n};\n\nexport type CompletionResponse<RawResponse = unknown> = {\n choice: AssistantContent[];\n usage: Usage;\n rawResponse: RawResponse;\n messageId?: string;\n};\n\nexport type CompletionModelCapabilities = {\n streaming: boolean;\n tools: boolean;\n toolChoice: boolean;\n imageInput: boolean;\n documentInput: boolean;\n outputSchema: boolean;\n reasoning: boolean;\n};\n\nexport interface CompletionModel<RawResponse = unknown, ModelName extends string = string> {\n readonly provider: string;\n readonly defaultModel: ModelName;\n readonly capabilities: CompletionModelCapabilities;\n traceRequest?(\n request: CompletionRequest<ModelName>,\n options?: { stream?: boolean | undefined },\n ): JsonObject | undefined;\n completion(request: CompletionRequest<ModelName>): Promise<CompletionResponse<RawResponse>>;\n}\n\nexport type CompletionStreamEvent<RawResponse = unknown> =\n | {\n type: \"text_delta\";\n delta: string;\n }\n | {\n type: \"reasoning_delta\";\n delta: string;\n id?: string;\n contentType?: ReasoningContentType;\n signature?: string;\n }\n | {\n type: \"tool_call_delta\";\n id: string;\n callId?: string;\n name?: string;\n argumentsDelta?: string;\n signature?: string;\n }\n | {\n type: \"tool_call\";\n toolCall: ToolCall;\n }\n | {\n type: \"message_id\";\n id: string;\n }\n | {\n type: \"final\";\n response: CompletionResponse<RawResponse>;\n }\n | {\n type: \"error\";\n error: unknown;\n };\n\nexport interface StreamingCompletionModel<RawResponse = unknown, ModelName extends string = string>\n extends CompletionModel<RawResponse, ModelName> {\n streamCompletion(\n request: CompletionRequest<ModelName>,\n ): AsyncIterable<CompletionStreamEvent<RawResponse>>;\n}\n\nexport class CompletionCapabilityError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"CompletionCapabilityError\";\n }\n}\n\nexport function assertCompletionRequestSupported(\n model: CompletionModel,\n request: CompletionRequest,\n options: { streaming?: boolean | undefined } = {},\n): void {\n const modelLabel = `${model.provider}:${request.model ?? model.defaultModel}`;\n const capabilities = model.capabilities;\n\n if (options.streaming === true && !capabilities.streaming) {\n throw new CompletionCapabilityError(`${modelLabel} does not support streaming completions.`);\n }\n\n if (request.tools.length > 0 && !capabilities.tools) {\n throw new CompletionCapabilityError(`${modelLabel} does not support tool definitions.`);\n }\n\n if (request.toolChoice !== undefined && !capabilities.toolChoice) {\n throw new CompletionCapabilityError(`${modelLabel} does not support tool choice.`);\n }\n\n if (request.outputSchema !== undefined && !capabilities.outputSchema) {\n throw new CompletionCapabilityError(`${modelLabel} does not support output schemas.`);\n }\n\n if (!capabilities.imageInput && requestHasImageInput(request)) {\n throw new CompletionCapabilityError(`${modelLabel} does not support image input.`);\n }\n\n if (!capabilities.documentInput && requestHasFileDocumentInput(request)) {\n throw new CompletionCapabilityError(`${modelLabel} does not support document file input.`);\n }\n}\n\nexport function textFromAssistantContent(content: AssistantContent[]): string {\n return content.flatMap((item) => (item.type === \"text\" ? [item.text] : [])).join(\"\\n\");\n}\n\nfunction requestHasImageInput(request: CompletionRequest): boolean {\n return request.chatHistory.some((message) =>\n message.role === \"system\" ? false : message.content.some((content) => content.type === \"image\"),\n );\n}\n\nfunction requestHasFileDocumentInput(request: CompletionRequest): boolean {\n return request.chatHistory.some((message) =>\n message.role === \"user\"\n ? message.content.some(\n (content) => content.type === \"document\" && content.source.type !== \"text\",\n )\n : false,\n );\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/ui/messages.ts"],"sourcesContent":["import {\n AssistantContent,\n type AssistantContent as AssistantContentType,\n type Message as CoreMessage,\n type DocumentContent,\n type ImageContent,\n type ImageDetail,\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 { UIAttachment, UIMessage, UIMessagePart } from \"./types\";\n\ntype UIToolPartLocation = {\n messageIndex: number;\n partIndex: number;\n};\n\ntype UIToolPartLocations = {\n byToolCallId: Map<string, UIToolPartLocation>;\n byCallId: Map<string, UIToolPartLocation>;\n};\n\ntype UIToolMessagePart = Extract<UIMessagePart, { type: \"tool\" }>;\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 === \"attachment\") {\n content.push(attachmentToUserContent(part.attachment));\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, attachment, 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(part.toolCallId, outputToToolResultContent(part.output), {\n callId: part.callId,\n toolName: part.toolName,\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(part.toolCallId, outputToToolResultContent(part.output), {\n callId: part.callId,\n toolName: part.toolName,\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 const toolPartLocations: UIToolPartLocations = {\n byToolCallId: new Map(),\n byCallId: new Map(),\n };\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: \"attachment\",\n attachment: userContentToAttachment(content),\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 const messageIndex = uiMessages.length;\n uiMessages.push({ id: message.id ?? createId(\"msg\"), role: \"assistant\", parts });\n registerToolPartLocations(parts, messageIndex, toolPartLocations);\n continue;\n }\n\n const parts: UIMessagePart[] = [];\n for (const content of message.content) {\n const part: UIToolMessagePart = {\n id: toolPartId(content.id),\n type: \"tool\",\n toolName: toolNameForResult(content, uiMessages, toolPartLocations),\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 if (mergeToolResultPart(uiMessages, toolPartLocations, part)) {\n continue;\n }\n parts.push(part);\n }\n if (parts.length > 0) {\n uiMessages.push({ id: createId(\"msg\"), role: \"tool\", parts });\n }\n }\n\n return uiMessages;\n}\n\nfunction registerToolPartLocations(\n parts: UIMessagePart[],\n messageIndex: number,\n toolPartLocations: UIToolPartLocations,\n): void {\n for (const [partIndex, part] of parts.entries()) {\n if (part.type !== \"tool\") {\n continue;\n }\n const location = { messageIndex, partIndex };\n toolPartLocations.byToolCallId.set(part.toolCallId, location);\n if (part.callId !== undefined) {\n toolPartLocations.byCallId.set(part.callId, location);\n }\n }\n}\n\nfunction mergeToolResultPart(\n uiMessages: UIMessage[],\n toolPartLocations: UIToolPartLocations,\n resultPart: UIMessagePart,\n): boolean {\n if (resultPart.type !== \"tool\") {\n return false;\n }\n\n const location = findToolPartLocation(\n resultPart.toolCallId,\n resultPart.callId,\n toolPartLocations,\n );\n if (location === undefined) {\n return false;\n }\n\n const message = uiMessages[location.messageIndex];\n const currentPart = message?.parts[location.partIndex];\n if (message === undefined || currentPart?.type !== \"tool\") {\n return false;\n }\n\n const mergedPart: UIToolMessagePart = {\n ...currentPart,\n toolName: resultPart.toolName === \"tool\" ? currentPart.toolName : resultPart.toolName,\n state: \"output-available\",\n ...(resultPart.output === undefined ? {} : { output: resultPart.output }),\n };\n if (currentPart.callId === undefined && resultPart.callId !== undefined) {\n mergedPart.callId = resultPart.callId;\n toolPartLocations.byCallId.set(resultPart.callId, location);\n }\n\n const nextParts = [...message.parts];\n nextParts[location.partIndex] = mergedPart;\n uiMessages[location.messageIndex] = { ...message, parts: nextParts };\n return true;\n}\n\nfunction findToolPartLocation(\n toolCallId: string,\n callId: string | undefined,\n toolPartLocations: UIToolPartLocations,\n): UIToolPartLocation | undefined {\n return (\n (callId === undefined ? undefined : toolPartLocations.byCallId.get(callId)) ??\n toolPartLocations.byToolCallId.get(toolCallId)\n );\n}\n\nfunction toolNameForResult(\n content: ToolContentType,\n uiMessages: UIMessage[],\n toolPartLocations: UIToolPartLocations,\n): string {\n if (content.toolName !== undefined) {\n return content.toolName;\n }\n\n const location = findToolPartLocation(content.id, content.callId, toolPartLocations);\n const part =\n location === undefined\n ? undefined\n : uiMessages[location.messageIndex]?.parts[location.partIndex];\n return part?.type === \"tool\" ? part.toolName : \"tool\";\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 attachmentToUserContent(attachment: UIAttachment): UserContentType {\n if (attachment.type === \"image\" || isImageFileAttachment(attachment)) {\n if (attachment.url !== undefined) {\n return UserContent.imageUrl(attachment.url, imageOptions(attachment));\n }\n if (attachment.data !== undefined && attachment.mediaType !== undefined) {\n return UserContent.imageBase64(\n attachment.data,\n attachment.mediaType,\n imageOptions(attachment),\n );\n }\n throw new TypeError(\"Image attachments require a url or base64 data with mediaType.\");\n }\n\n if (attachment.text !== undefined) {\n return {\n type: \"document\",\n source: {\n type: \"text\",\n text: attachment.text,\n ...(attachment.mediaType === undefined ? {} : { mediaType: attachment.mediaType }),\n ...(attachment.name === undefined ? {} : { filename: attachment.name }),\n },\n };\n }\n\n const mediaType = attachment.mediaType ?? \"application/octet-stream\";\n if (attachment.url !== undefined) {\n return UserContent.documentUrl(attachment.url, mediaType, documentOptions(attachment));\n }\n if (attachment.data !== undefined) {\n return UserContent.documentBase64(attachment.data, mediaType, documentOptions(attachment));\n }\n\n throw new TypeError(\"Document attachments require a url, base64 data, or text.\");\n}\n\nfunction userContentToAttachment(content: ImageContent | DocumentContent): UIAttachment {\n if (content.type === \"image\") {\n const attachment: UIAttachment = {\n id: createId(\"attachment\"),\n type: \"image\",\n ...(content.detail === undefined ? {} : { detail: content.detail }),\n };\n if (content.source.type === \"url\") {\n attachment.url = content.source.url;\n } else {\n attachment.data = content.source.data;\n attachment.mediaType = content.source.mediaType;\n }\n return attachment;\n }\n\n const attachment: UIAttachment = {\n id: createId(\"attachment\"),\n type: \"document\",\n };\n if (content.source.type === \"url\") {\n attachment.url = content.source.url;\n attachment.mediaType = content.source.mediaType;\n if (content.source.filename !== undefined) {\n attachment.name = content.source.filename;\n }\n } else if (content.source.type === \"base64\") {\n attachment.data = content.source.data;\n attachment.mediaType = content.source.mediaType;\n if (content.source.filename !== undefined) {\n attachment.name = content.source.filename;\n }\n } else {\n attachment.text = content.source.text;\n if (content.source.mediaType !== undefined) {\n attachment.mediaType = content.source.mediaType;\n }\n if (content.source.filename !== undefined) {\n attachment.name = content.source.filename;\n }\n }\n return attachment;\n}\n\nfunction isImageFileAttachment(attachment: UIAttachment): boolean {\n return attachment.type === \"file\" && attachment.mediaType?.startsWith(\"image/\") === true;\n}\n\nfunction imageOptions(attachment: UIAttachment): { detail?: ImageDetail } {\n return attachment.detail === undefined ? {} : { detail: attachment.detail };\n}\n\nfunction documentOptions(attachment: UIAttachment): { filename?: string } {\n return attachment.name === undefined ? {} : { filename: attachment.name };\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","attachment"]}