@ziro-agent/anthropic 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +11 -14
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +11 -14
- package/dist/index.js.map +1 -1
- package/package.json +11 -6
package/dist/index.cjs
CHANGED
|
@@ -72,10 +72,7 @@ var AnthropicMessagesModel = class {
|
|
|
72
72
|
});
|
|
73
73
|
return {
|
|
74
74
|
text,
|
|
75
|
-
content: [
|
|
76
|
-
...text.length > 0 ? [{ type: "text", text }] : [],
|
|
77
|
-
...toolCalls
|
|
78
|
-
],
|
|
75
|
+
content: [...text.length > 0 ? [{ type: "text", text }] : [], ...toolCalls],
|
|
79
76
|
toolCalls,
|
|
80
77
|
finishReason: mapFinishReason(json.stop_reason),
|
|
81
78
|
usage: mapUsage(json.usage),
|
|
@@ -171,26 +168,26 @@ var AnthropicMessagesModel = class {
|
|
|
171
168
|
messages: messages.map(toAnthropicMessage),
|
|
172
169
|
max_tokens: options.maxTokens ?? 4096
|
|
173
170
|
};
|
|
174
|
-
if (system) body
|
|
175
|
-
if (stream) body
|
|
171
|
+
if (system) body.system = system;
|
|
172
|
+
if (stream) body.stream = true;
|
|
176
173
|
if (options.tools?.length) {
|
|
177
|
-
body
|
|
174
|
+
body.tools = options.tools.map((t) => ({
|
|
178
175
|
name: t.name,
|
|
179
176
|
...t.description !== void 0 ? { description: t.description } : {},
|
|
180
177
|
input_schema: t.parameters
|
|
181
178
|
}));
|
|
182
179
|
}
|
|
183
180
|
if (options.toolChoice !== void 0) {
|
|
184
|
-
if (options.toolChoice === "required") body
|
|
185
|
-
else if (options.toolChoice === "auto") body
|
|
181
|
+
if (options.toolChoice === "required") body.tool_choice = { type: "any" };
|
|
182
|
+
else if (options.toolChoice === "auto") body.tool_choice = { type: "auto" };
|
|
186
183
|
else if (options.toolChoice === "none") ; else if (typeof options.toolChoice === "object") {
|
|
187
|
-
body
|
|
184
|
+
body.tool_choice = { type: "tool", name: options.toolChoice.toolName };
|
|
188
185
|
}
|
|
189
186
|
}
|
|
190
|
-
if (options.temperature !== void 0) body
|
|
191
|
-
if (options.topP !== void 0) body
|
|
192
|
-
if (options.topK !== void 0) body
|
|
193
|
-
if (options.stopSequences !== void 0) body
|
|
187
|
+
if (options.temperature !== void 0) body.temperature = options.temperature;
|
|
188
|
+
if (options.topP !== void 0) body.top_p = options.topP;
|
|
189
|
+
if (options.topK !== void 0) body.top_k = options.topK;
|
|
190
|
+
if (options.stopSequences !== void 0) body.stop_sequences = options.stopSequences;
|
|
194
191
|
if (options.providerOptions) Object.assign(body, options.providerOptions);
|
|
195
192
|
return body;
|
|
196
193
|
}
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/util/sse.ts","../src/anthropic-messages-model.ts","../src/anthropic-provider.ts"],"names":["APICallError"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Anthropic streams SSE with explicit `event:` lines (e.g. `content_block_delta`).\n * We surface both the event name and the data payload — the model logic decides\n * how to interpret them.\n */\nexport interface SSEEvent {\n event?: string;\n data: string;\n}\n\nexport async function* parseSSEWithEvent(\n body: ReadableStream<Uint8Array>,\n): AsyncIterable<SSEEvent> {\n const reader = body.getReader();\n const decoder = new TextDecoder('utf-8');\n let buffer = '';\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n if (buffer.trim().length > 0) {\n const evt = parseBlock(buffer);\n if (evt) yield evt;\n }\n return;\n }\n buffer += decoder.decode(value, { stream: true });\n\n while (true) {\n const idx = findEventBoundary(buffer);\n if (idx === -1) break;\n const block = buffer.slice(0, idx);\n buffer = buffer.slice(idx).replace(/^(\\r?\\n){2}/, '');\n const evt = parseBlock(block);\n if (evt) yield evt;\n }\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nfunction findEventBoundary(s: string): number {\n const i1 = s.indexOf('\\n\\n');\n const i2 = s.indexOf('\\r\\n\\r\\n');\n if (i1 === -1) return i2;\n if (i2 === -1) return i1;\n return Math.min(i1, i2);\n}\n\nfunction parseBlock(block: string): SSEEvent | null {\n const lines = block.split(/\\r?\\n/);\n let event: string | undefined;\n const data: string[] = [];\n for (const line of lines) {\n if (line.startsWith('event:')) event = line.slice(6).trim();\n else if (line.startsWith('data:')) data.push(line.slice(5).replace(/^ /, ''));\n }\n if (data.length === 0 && !event) return null;\n return { ...(event !== undefined ? { event } : {}), data: data.join('\\n') };\n}\n","import {\n APICallError,\n type FinishReason,\n type LanguageModel,\n type ModelCallOptions,\n type ModelGenerateResult,\n type ModelStreamPart,\n type NormalizedMessage,\n type TokenUsage,\n type ToolCallPart,\n} from '@ziro-agent/core';\nimport { parseSSEWithEvent, type SSEEvent } from './util/sse.js';\n\nexport type AnthropicMessagesModelId =\n | 'claude-opus-4-1'\n | 'claude-opus-4'\n | 'claude-sonnet-4-5'\n | 'claude-sonnet-4'\n | 'claude-3-7-sonnet-latest'\n | 'claude-3-5-sonnet-latest'\n | 'claude-3-5-haiku-latest'\n | 'claude-3-haiku-20240307'\n | (string & {});\n\ninterface AnthropicMessagesModelConfig {\n modelId: AnthropicMessagesModelId;\n baseURL: string;\n headers: Record<string, string>;\n fetcher: typeof fetch;\n}\n\nexport class AnthropicMessagesModel implements LanguageModel {\n readonly provider = 'anthropic';\n readonly modelId: string;\n private readonly config: AnthropicMessagesModelConfig;\n\n constructor(config: AnthropicMessagesModelConfig) {\n this.modelId = config.modelId;\n this.config = config;\n }\n\n async generate(options: ModelCallOptions): Promise<ModelGenerateResult> {\n const body = this.buildBody(options, false);\n const res = await this.fetch('/messages', body, options);\n const json = (await res.json()) as AnthropicMessageResponse;\n\n const text = (json.content ?? [])\n .filter((b) => b.type === 'text')\n .map((b) => (b as { text: string }).text)\n .join('');\n\n const toolCalls: ToolCallPart[] = (json.content ?? [])\n .filter((b) => b.type === 'tool_use')\n .map((b) => {\n const tu = b as { id: string; name: string; input: unknown };\n return { type: 'tool-call', toolCallId: tu.id, toolName: tu.name, args: tu.input };\n });\n\n return {\n text,\n content: [\n ...(text.length > 0 ? [{ type: 'text' as const, text }] : []),\n ...toolCalls,\n ],\n toolCalls,\n finishReason: mapFinishReason(json.stop_reason),\n usage: mapUsage(json.usage),\n rawResponse: json,\n };\n }\n\n async stream(options: ModelCallOptions): Promise<ReadableStream<ModelStreamPart>> {\n const body = this.buildBody(options, true);\n const res = await this.fetch('/messages', body, options);\n if (!res.body) {\n throw new APICallError({\n message: 'Anthropic streaming response has no body.',\n statusCode: res.status,\n });\n }\n\n const events = parseSSEWithEvent(res.body);\n\n return new ReadableStream<ModelStreamPart>({\n async start(controller) {\n const toolBlocks = new Map<number, { id: string; name: string; argsBuffer: string }>();\n let finish: FinishReason = 'unknown';\n let usage: TokenUsage = {};\n\n try {\n for await (const evt of events) {\n const data = parseEvent(evt);\n if (!data) continue;\n\n switch (data.type) {\n case 'message_start': {\n const msg = data.message as { usage?: AnthropicUsage } | undefined;\n if (msg?.usage) usage = mergeUsage(usage, mapUsage(msg.usage));\n break;\n }\n case 'content_block_start': {\n const block = data.content_block as\n | { type: string; id?: string; name?: string }\n | undefined;\n if (block?.type === 'tool_use' && typeof data.index === 'number') {\n toolBlocks.set(data.index, {\n id: block.id ?? `tu_${data.index}`,\n name: block.name ?? '',\n argsBuffer: '',\n });\n }\n break;\n }\n case 'content_block_delta': {\n const delta = data.delta as\n | { type: string; text?: string; partial_json?: string }\n | undefined;\n if (delta?.type === 'text_delta' && delta.text) {\n controller.enqueue({ type: 'text-delta', textDelta: delta.text });\n } else if (\n delta?.type === 'input_json_delta' &&\n typeof data.index === 'number' &&\n delta.partial_json\n ) {\n const tb = toolBlocks.get(data.index);\n if (tb) {\n tb.argsBuffer += delta.partial_json;\n controller.enqueue({\n type: 'tool-call-delta',\n toolCallId: tb.id,\n toolName: tb.name,\n argsDelta: delta.partial_json,\n });\n }\n }\n break;\n }\n case 'message_delta': {\n const delta = data.delta as { stop_reason?: string } | undefined;\n if (delta?.stop_reason) finish = mapFinishReason(delta.stop_reason);\n if (data.usage) usage = mergeUsage(usage, mapUsage(data.usage as AnthropicUsage));\n break;\n }\n case 'message_stop': {\n break;\n }\n }\n }\n\n for (const tb of toolBlocks.values()) {\n controller.enqueue({\n type: 'tool-call',\n toolCallId: tb.id,\n toolName: tb.name,\n args: safeParseJSON(tb.argsBuffer),\n });\n }\n\n controller.enqueue({ type: 'finish', finishReason: finish, usage });\n controller.close();\n } catch (err) {\n controller.enqueue({ type: 'error', error: err });\n controller.close();\n }\n },\n });\n }\n\n private buildBody(options: ModelCallOptions, stream: boolean): Record<string, unknown> {\n const { system, messages } = splitSystem(options.messages);\n\n const body: Record<string, unknown> = {\n model: this.modelId,\n messages: messages.map(toAnthropicMessage),\n max_tokens: options.maxTokens ?? 4096,\n };\n if (system) body['system'] = system;\n if (stream) body['stream'] = true;\n if (options.tools?.length) {\n body['tools'] = options.tools.map((t) => ({\n name: t.name,\n ...(t.description !== undefined ? { description: t.description } : {}),\n input_schema: t.parameters,\n }));\n }\n if (options.toolChoice !== undefined) {\n if (options.toolChoice === 'required') body['tool_choice'] = { type: 'any' };\n else if (options.toolChoice === 'auto') body['tool_choice'] = { type: 'auto' };\n else if (options.toolChoice === 'none') {\n // Anthropic has no explicit \"none\" — skip.\n } else if (typeof options.toolChoice === 'object') {\n body['tool_choice'] = { type: 'tool', name: options.toolChoice.toolName };\n }\n }\n if (options.temperature !== undefined) body['temperature'] = options.temperature;\n if (options.topP !== undefined) body['top_p'] = options.topP;\n if (options.topK !== undefined) body['top_k'] = options.topK;\n if (options.stopSequences !== undefined) body['stop_sequences'] = options.stopSequences;\n if (options.providerOptions) Object.assign(body, options.providerOptions);\n return body;\n }\n\n private async fetch(\n path: string,\n body: unknown,\n options: ModelCallOptions,\n ): Promise<Response> {\n const url = `${this.config.baseURL}${path}`;\n const headers = { ...this.config.headers, ...options.headers };\n const init: RequestInit = {\n method: 'POST',\n headers,\n body: JSON.stringify(body),\n };\n if (options.abortSignal) init.signal = options.abortSignal;\n\n const res = await this.config.fetcher(url, init);\n if (!res.ok) {\n const text = await res.text().catch(() => '');\n throw new APICallError({\n message: `Anthropic API error: ${res.status} ${res.statusText}`,\n url,\n statusCode: res.status,\n responseBody: text,\n });\n }\n return res;\n }\n}\n\nfunction splitSystem(messages: NormalizedMessage[]): {\n system?: string;\n messages: NormalizedMessage[];\n} {\n const sys = messages.filter((m) => m.role === 'system');\n const rest = messages.filter((m) => m.role !== 'system');\n if (sys.length === 0) return { messages: rest };\n const text = sys\n .flatMap((m) => m.content)\n .filter((p) => p.type === 'text')\n .map((p) => (p as { text: string }).text)\n .join('\\n');\n return { system: text, messages: rest };\n}\n\nfunction toAnthropicMessage(m: NormalizedMessage): unknown {\n switch (m.role) {\n case 'user': {\n const blocks = m.content.map((p) => {\n if (p.type === 'text') return { type: 'text', text: p.text };\n if (p.type === 'image') {\n if (typeof p.image === 'string' && p.image.startsWith('http')) {\n return { type: 'image', source: { type: 'url', url: p.image } };\n }\n if (typeof p.image === 'string') {\n return { type: 'image', source: { type: 'url', url: p.image } };\n }\n return {\n type: 'image',\n source: {\n type: 'base64',\n media_type: p.mimeType ?? 'image/png',\n data: uint8ToBase64(p.image as Uint8Array),\n },\n };\n }\n return p;\n });\n return { role: 'user', content: blocks };\n }\n case 'assistant': {\n const blocks = m.content.map((p) => {\n if (p.type === 'text') return { type: 'text', text: p.text };\n if (p.type === 'tool-call') {\n return { type: 'tool_use', id: p.toolCallId, name: p.toolName, input: p.args };\n }\n return p;\n });\n return { role: 'assistant', content: blocks };\n }\n case 'tool': {\n return {\n role: 'user',\n content: m.content\n .filter((r): r is Extract<typeof r, { type: 'tool-result' }> => r.type === 'tool-result')\n .map((r) => ({\n type: 'tool_result',\n tool_use_id: r.toolCallId,\n content: typeof r.result === 'string' ? r.result : JSON.stringify(r.result),\n ...(r.isError ? { is_error: true } : {}),\n })),\n };\n }\n case 'system':\n return { role: 'user', content: '' };\n }\n}\n\nfunction parseEvent(evt: SSEEvent): { type: string; [k: string]: unknown } | null {\n if (!evt.data) return null;\n try {\n return JSON.parse(evt.data) as { type: string };\n } catch {\n return null;\n }\n}\n\nfunction safeParseJSON(text: string): unknown {\n if (!text) return {};\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\nfunction mapFinishReason(reason: string | null | undefined): FinishReason {\n switch (reason) {\n case 'end_turn':\n return 'stop';\n case 'max_tokens':\n return 'length';\n case 'tool_use':\n return 'tool-calls';\n case 'stop_sequence':\n return 'stop';\n case null:\n case undefined:\n return 'unknown';\n default:\n return 'other';\n }\n}\n\ninterface AnthropicUsage {\n input_tokens?: number;\n output_tokens?: number;\n cache_read_input_tokens?: number;\n cache_creation_input_tokens?: number;\n}\n\nfunction mapUsage(u: AnthropicUsage | undefined): TokenUsage {\n if (!u) return {};\n const promptTokens =\n (u.input_tokens ?? 0) +\n (u.cache_read_input_tokens ?? 0) +\n (u.cache_creation_input_tokens ?? 0);\n const out: TokenUsage = {\n promptTokens: u.input_tokens !== undefined ? promptTokens : undefined,\n completionTokens: u.output_tokens,\n };\n if (out.promptTokens !== undefined && out.completionTokens !== undefined) {\n out.totalTokens = out.promptTokens + out.completionTokens;\n }\n if (u.cache_read_input_tokens !== undefined) out.cachedPromptTokens = u.cache_read_input_tokens;\n return out;\n}\n\nfunction mergeUsage(a: TokenUsage, b: TokenUsage): TokenUsage {\n const sum = (x?: number, y?: number) =>\n x === undefined && y === undefined ? undefined : (x ?? 0) + (y ?? 0);\n return {\n promptTokens: sum(a.promptTokens, b.promptTokens),\n completionTokens: sum(a.completionTokens, b.completionTokens),\n totalTokens: sum(a.totalTokens, b.totalTokens),\n cachedPromptTokens: sum(a.cachedPromptTokens, b.cachedPromptTokens),\n };\n}\n\nfunction uint8ToBase64(arr: Uint8Array): string {\n let s = '';\n for (let i = 0; i < arr.byteLength; i++) s += String.fromCharCode(arr[i] as number);\n return typeof btoa !== 'undefined'\n ? btoa(s)\n : Buffer.from(s, 'binary').toString('base64');\n}\n\ninterface AnthropicMessageResponse {\n content?: Array<\n | { type: 'text'; text: string }\n | { type: 'tool_use'; id: string; name: string; input: unknown }\n >;\n stop_reason?: string;\n usage?: AnthropicUsage;\n}\n","import type { LanguageModel } from '@ziro-agent/core';\nimport {\n AnthropicMessagesModel,\n type AnthropicMessagesModelId,\n} from './anthropic-messages-model.js';\n\nexport interface AnthropicProviderOptions {\n /** Defaults to `process.env.ANTHROPIC_API_KEY`. */\n apiKey?: string;\n baseURL?: string;\n /** API version sent in `anthropic-version`. Defaults to `2023-06-01`. */\n version?: string;\n headers?: Record<string, string>;\n fetch?: typeof fetch;\n}\n\nexport interface AnthropicProvider {\n (modelId: AnthropicMessagesModelId): LanguageModel;\n messages(modelId: AnthropicMessagesModelId): LanguageModel;\n}\n\nexport function createAnthropic(options: AnthropicProviderOptions = {}): AnthropicProvider {\n const apiKey = options.apiKey ?? loadEnv('ANTHROPIC_API_KEY');\n const baseURL = options.baseURL ?? 'https://api.anthropic.com/v1';\n const version = options.version ?? '2023-06-01';\n const fetcher = options.fetch ?? globalThis.fetch;\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'anthropic-version': version,\n ...options.headers,\n };\n if (apiKey) headers['x-api-key'] = apiKey;\n\n const make = (modelId: AnthropicMessagesModelId): LanguageModel =>\n new AnthropicMessagesModel({\n modelId,\n baseURL,\n headers,\n fetcher,\n });\n\n const provider = ((modelId: AnthropicMessagesModelId) => make(modelId)) as AnthropicProvider;\n provider.messages = make;\n return provider;\n}\n\nexport const anthropic: AnthropicProvider = createAnthropic();\n\nfunction loadEnv(name: string): string | undefined {\n if (typeof process !== 'undefined' && process.env) {\n return process.env[name];\n }\n return undefined;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/util/sse.ts","../src/anthropic-messages-model.ts","../src/anthropic-provider.ts"],"names":["APICallError"],"mappings":";;;;;;;AAUA,gBAAuB,kBACrB,IAAA,EACyB;AACzB,EAAA,MAAM,MAAA,GAAS,KAAK,SAAA,EAAU;AAC9B,EAAA,MAAM,OAAA,GAAU,IAAI,WAAA,CAAY,OAAO,CAAA;AACvC,EAAA,IAAI,MAAA,GAAS,EAAA;AAEb,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,EAAM;AACX,MAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,IAAI,MAAA,CAAO,IAAA,EAAK,CAAE,MAAA,GAAS,CAAA,EAAG;AAC5B,UAAA,MAAM,GAAA,GAAM,WAAW,MAAM,CAAA;AAC7B,UAAA,IAAI,KAAK,MAAM,GAAA;AAAA,QACjB;AACA,QAAA;AAAA,MACF;AACA,MAAA,MAAA,IAAU,QAAQ,MAAA,CAAO,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AAEhD,MAAA,OAAO,IAAA,EAAM;AACX,QAAA,MAAM,GAAA,GAAM,kBAAkB,MAAM,CAAA;AACpC,QAAA,IAAI,QAAQ,CAAA,CAAA,EAAI;AAChB,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA;AACjC,QAAA,MAAA,GAAS,OAAO,KAAA,CAAM,GAAG,CAAA,CAAE,OAAA,CAAQ,eAAe,EAAE,CAAA;AACpD,QAAA,MAAM,GAAA,GAAM,WAAW,KAAK,CAAA;AAC5B,QAAA,IAAI,KAAK,MAAM,GAAA;AAAA,MACjB;AAAA,IACF;AAAA,EACF,CAAA,SAAE;AACA,IAAA,MAAA,CAAO,WAAA,EAAY;AAAA,EACrB;AACF;AAEA,SAAS,kBAAkB,CAAA,EAAmB;AAC5C,EAAA,MAAM,EAAA,GAAK,CAAA,CAAE,OAAA,CAAQ,MAAM,CAAA;AAC3B,EAAA,MAAM,EAAA,GAAK,CAAA,CAAE,OAAA,CAAQ,UAAU,CAAA;AAC/B,EAAA,IAAI,EAAA,KAAO,IAAI,OAAO,EAAA;AACtB,EAAA,IAAI,EAAA,KAAO,IAAI,OAAO,EAAA;AACtB,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,EAAE,CAAA;AACxB;AAEA,SAAS,WAAW,KAAA,EAAgC;AAClD,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,OAAO,CAAA;AACjC,EAAA,IAAI,KAAA;AACJ,EAAA,MAAM,OAAiB,EAAC;AACxB,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,IAAA,CAAK,WAAW,QAAQ,CAAA,UAAW,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,EAAK;AAAA,SAAA,IACjD,IAAA,CAAK,UAAA,CAAW,OAAO,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAAE,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAC,CAAA;AAAA,EAC9E;AACA,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,IAAK,CAAC,OAAO,OAAO,IAAA;AACxC,EAAA,OAAO,EAAE,GAAI,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAM,GAAI,EAAC,EAAI,IAAA,EAAM,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,EAAE;AAC5E;;;AC9BO,IAAM,yBAAN,MAAsD;AAAA,EAClD,QAAA,GAAW,WAAA;AAAA,EACX,OAAA;AAAA,EACQ,MAAA;AAAA,EAEjB,YAAY,MAAA,EAAsC;AAChD,IAAA,IAAA,CAAK,UAAU,MAAA,CAAO,OAAA;AACtB,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA,EAEA,MAAM,SAAS,OAAA,EAAyD;AACtE,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,OAAA,EAAS,KAAK,CAAA;AAC1C,IAAA,MAAM,MAAM,MAAM,IAAA,CAAK,KAAA,CAAM,WAAA,EAAa,MAAM,OAAO,CAAA;AACvD,IAAA,MAAM,IAAA,GAAQ,MAAM,GAAA,CAAI,IAAA,EAAK;AAE7B,IAAA,MAAM,QAAQ,IAAA,CAAK,OAAA,IAAW,EAAC,EAC5B,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,MAAM,CAAA,CAC/B,IAAI,CAAC,CAAA,KAAO,EAAuB,IAAI,CAAA,CACvC,KAAK,EAAE,CAAA;AAEV,IAAA,MAAM,SAAA,GAAA,CAA6B,IAAA,CAAK,OAAA,IAAW,IAChD,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,UAAU,CAAA,CACnC,GAAA,CAAI,CAAC,CAAA,KAAM;AACV,MAAA,MAAM,EAAA,GAAK,CAAA;AACX,MAAA,OAAO,EAAE,IAAA,EAAM,WAAA,EAAa,UAAA,EAAY,EAAA,CAAG,EAAA,EAAI,QAAA,EAAU,EAAA,CAAG,IAAA,EAAM,IAAA,EAAM,EAAA,CAAG,KAAA,EAAM;AAAA,IACnF,CAAC,CAAA;AAEH,IAAA,OAAO;AAAA,MACL,IAAA;AAAA,MACA,SAAS,CAAC,GAAI,IAAA,CAAK,MAAA,GAAS,IAAI,CAAC,EAAE,IAAA,EAAM,MAAA,EAAiB,MAAM,CAAA,GAAI,EAAC,EAAI,GAAG,SAAS,CAAA;AAAA,MACrF,SAAA;AAAA,MACA,YAAA,EAAc,eAAA,CAAgB,IAAA,CAAK,WAAW,CAAA;AAAA,MAC9C,KAAA,EAAO,QAAA,CAAS,IAAA,CAAK,KAAK,CAAA;AAAA,MAC1B,WAAA,EAAa;AAAA,KACf;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,OAAA,EAAqE;AAChF,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,OAAA,EAAS,IAAI,CAAA;AACzC,IAAA,MAAM,MAAM,MAAM,IAAA,CAAK,KAAA,CAAM,WAAA,EAAa,MAAM,OAAO,CAAA;AACvD,IAAA,IAAI,CAAC,IAAI,IAAA,EAAM;AACb,MAAA,MAAM,IAAIA,iBAAA,CAAa;AAAA,QACrB,OAAA,EAAS,2CAAA;AAAA,QACT,YAAY,GAAA,CAAI;AAAA,OACjB,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,MAAA,GAAS,iBAAA,CAAkB,GAAA,CAAI,IAAI,CAAA;AAEzC,IAAA,OAAO,IAAI,cAAA,CAAgC;AAAA,MACzC,MAAM,MAAM,UAAA,EAAY;AACtB,QAAA,MAAM,UAAA,uBAAiB,GAAA,EAA8D;AACrF,QAAA,IAAI,MAAA,GAAuB,SAAA;AAC3B,QAAA,IAAI,QAAoB,EAAC;AAEzB,QAAA,IAAI;AACF,UAAA,WAAA,MAAiB,OAAO,MAAA,EAAQ;AAC9B,YAAA,MAAM,IAAA,GAAO,WAAW,GAAG,CAAA;AAC3B,YAAA,IAAI,CAAC,IAAA,EAAM;AAEX,YAAA,QAAQ,KAAK,IAAA;AAAM,cACjB,KAAK,eAAA,EAAiB;AACpB,gBAAA,MAAM,MAAM,IAAA,CAAK,OAAA;AACjB,gBAAA,IAAI,GAAA,EAAK,OAAO,KAAA,GAAQ,UAAA,CAAW,OAAO,QAAA,CAAS,GAAA,CAAI,KAAK,CAAC,CAAA;AAC7D,gBAAA;AAAA,cACF;AAAA,cACA,KAAK,qBAAA,EAAuB;AAC1B,gBAAA,MAAM,QAAQ,IAAA,CAAK,aAAA;AAGnB,gBAAA,IAAI,OAAO,IAAA,KAAS,UAAA,IAAc,OAAO,IAAA,CAAK,UAAU,QAAA,EAAU;AAChE,kBAAA,UAAA,CAAW,GAAA,CAAI,KAAK,KAAA,EAAO;AAAA,oBACzB,EAAA,EAAI,KAAA,CAAM,EAAA,IAAM,CAAA,GAAA,EAAM,KAAK,KAAK,CAAA,CAAA;AAAA,oBAChC,IAAA,EAAM,MAAM,IAAA,IAAQ,EAAA;AAAA,oBACpB,UAAA,EAAY;AAAA,mBACb,CAAA;AAAA,gBACH;AACA,gBAAA;AAAA,cACF;AAAA,cACA,KAAK,qBAAA,EAAuB;AAC1B,gBAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AAGnB,gBAAA,IAAI,KAAA,EAAO,IAAA,KAAS,YAAA,IAAgB,KAAA,CAAM,IAAA,EAAM;AAC9C,kBAAA,UAAA,CAAW,QAAQ,EAAE,IAAA,EAAM,cAAc,SAAA,EAAW,KAAA,CAAM,MAAM,CAAA;AAAA,gBAClE,CAAA,MAAA,IACE,OAAO,IAAA,KAAS,kBAAA,IAChB,OAAO,IAAA,CAAK,KAAA,KAAU,QAAA,IACtB,KAAA,CAAM,YAAA,EACN;AACA,kBAAA,MAAM,EAAA,GAAK,UAAA,CAAW,GAAA,CAAI,IAAA,CAAK,KAAK,CAAA;AACpC,kBAAA,IAAI,EAAA,EAAI;AACN,oBAAA,EAAA,CAAG,cAAc,KAAA,CAAM,YAAA;AACvB,oBAAA,UAAA,CAAW,OAAA,CAAQ;AAAA,sBACjB,IAAA,EAAM,iBAAA;AAAA,sBACN,YAAY,EAAA,CAAG,EAAA;AAAA,sBACf,UAAU,EAAA,CAAG,IAAA;AAAA,sBACb,WAAW,KAAA,CAAM;AAAA,qBAClB,CAAA;AAAA,kBACH;AAAA,gBACF;AACA,gBAAA;AAAA,cACF;AAAA,cACA,KAAK,eAAA,EAAiB;AACpB,gBAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AACnB,gBAAA,IAAI,KAAA,EAAO,WAAA,EAAa,MAAA,GAAS,eAAA,CAAgB,MAAM,WAAW,CAAA;AAClE,gBAAA,IAAI,IAAA,CAAK,OAAO,KAAA,GAAQ,UAAA,CAAW,OAAO,QAAA,CAAS,IAAA,CAAK,KAAuB,CAAC,CAAA;AAChF,gBAAA;AAAA,cACF;AAAA,cACA,KAAK,cAAA,EAAgB;AACnB,gBAAA;AAAA,cACF;AAAA;AACF,UACF;AAEA,UAAA,KAAA,MAAW,EAAA,IAAM,UAAA,CAAW,MAAA,EAAO,EAAG;AACpC,YAAA,UAAA,CAAW,OAAA,CAAQ;AAAA,cACjB,IAAA,EAAM,WAAA;AAAA,cACN,YAAY,EAAA,CAAG,EAAA;AAAA,cACf,UAAU,EAAA,CAAG,IAAA;AAAA,cACb,IAAA,EAAM,aAAA,CAAc,EAAA,CAAG,UAAU;AAAA,aAClC,CAAA;AAAA,UACH;AAEA,UAAA,UAAA,CAAW,QAAQ,EAAE,IAAA,EAAM,UAAU,YAAA,EAAc,MAAA,EAAQ,OAAO,CAAA;AAClE,UAAA,UAAA,CAAW,KAAA,EAAM;AAAA,QACnB,SAAS,GAAA,EAAK;AACZ,UAAA,UAAA,CAAW,QAAQ,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,KAAK,CAAA;AAChD,UAAA,UAAA,CAAW,KAAA,EAAM;AAAA,QACnB;AAAA,MACF;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEQ,SAAA,CAAU,SAA2B,MAAA,EAA0C;AACrF,IAAA,MAAM,EAAE,MAAA,EAAQ,QAAA,EAAS,GAAI,WAAA,CAAY,QAAQ,QAAQ,CAAA;AAEzD,IAAA,MAAM,IAAA,GAAgC;AAAA,MACpC,OAAO,IAAA,CAAK,OAAA;AAAA,MACZ,QAAA,EAAU,QAAA,CAAS,GAAA,CAAI,kBAAkB,CAAA;AAAA,MACzC,UAAA,EAAY,QAAQ,SAAA,IAAa;AAAA,KACnC;AACA,IAAA,IAAI,MAAA,OAAa,MAAA,GAAS,MAAA;AAC1B,IAAA,IAAI,MAAA,OAAa,MAAA,GAAS,IAAA;AAC1B,IAAA,IAAI,OAAA,CAAQ,OAAO,MAAA,EAAQ;AACzB,MAAA,IAAA,CAAK,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,QACrC,MAAM,CAAA,CAAE,IAAA;AAAA,QACR,GAAI,EAAE,WAAA,KAAgB,MAAA,GAAY,EAAE,WAAA,EAAa,CAAA,CAAE,WAAA,EAAY,GAAI,EAAC;AAAA,QACpE,cAAc,CAAA,CAAE;AAAA,OAClB,CAAE,CAAA;AAAA,IACJ;AACA,IAAA,IAAI,OAAA,CAAQ,eAAe,MAAA,EAAW;AACpC,MAAA,IAAI,QAAQ,UAAA,KAAe,UAAA,OAAiB,WAAA,GAAc,EAAE,MAAM,KAAA,EAAM;AAAA,WAAA,IAC/D,QAAQ,UAAA,KAAe,MAAA,OAAa,WAAA,GAAc,EAAE,MAAM,MAAA,EAAO;AAAA,WAAA,IACjE,OAAA,CAAQ,eAAe,MAAA,EAAQ,CAExC,MAAA,IAAW,OAAO,OAAA,CAAQ,UAAA,KAAe,QAAA,EAAU;AACjD,QAAA,IAAA,CAAK,cAAc,EAAE,IAAA,EAAM,QAAQ,IAAA,EAAM,OAAA,CAAQ,WAAW,QAAA,EAAS;AAAA,MACvE;AAAA,IACF;AACA,IAAA,IAAI,OAAA,CAAQ,WAAA,KAAgB,MAAA,EAAW,IAAA,CAAK,cAAc,OAAA,CAAQ,WAAA;AAClE,IAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,MAAA,EAAW,IAAA,CAAK,QAAQ,OAAA,CAAQ,IAAA;AACrD,IAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,MAAA,EAAW,IAAA,CAAK,QAAQ,OAAA,CAAQ,IAAA;AACrD,IAAA,IAAI,OAAA,CAAQ,aAAA,KAAkB,MAAA,EAAW,IAAA,CAAK,iBAAiB,OAAA,CAAQ,aAAA;AACvE,IAAA,IAAI,QAAQ,eAAA,EAAiB,MAAA,CAAO,MAAA,CAAO,IAAA,EAAM,QAAQ,eAAe,CAAA;AACxE,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAc,KAAA,CAAM,IAAA,EAAc,IAAA,EAAe,OAAA,EAA8C;AAC7F,IAAA,MAAM,MAAM,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,OAAO,GAAG,IAAI,CAAA,CAAA;AACzC,IAAA,MAAM,OAAA,GAAU,EAAE,GAAG,IAAA,CAAK,OAAO,OAAA,EAAS,GAAG,QAAQ,OAAA,EAAQ;AAC7D,IAAA,MAAM,IAAA,GAAoB;AAAA,MACxB,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA;AAAA,MACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI;AAAA,KAC3B;AACA,IAAA,IAAI,OAAA,CAAQ,WAAA,EAAa,IAAA,CAAK,MAAA,GAAS,OAAA,CAAQ,WAAA;AAE/C,IAAA,MAAM,MAAM,MAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,IAAI,CAAA;AAC/C,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,MAAA,MAAM,OAAO,MAAM,GAAA,CAAI,MAAK,CAAE,KAAA,CAAM,MAAM,EAAE,CAAA;AAC5C,MAAA,MAAM,IAAIA,iBAAA,CAAa;AAAA,QACrB,SAAS,CAAA,qBAAA,EAAwB,GAAA,CAAI,MAAM,CAAA,CAAA,EAAI,IAAI,UAAU,CAAA,CAAA;AAAA,QAC7D,GAAA;AAAA,QACA,YAAY,GAAA,CAAI,MAAA;AAAA,QAChB,YAAA,EAAc;AAAA,OACf,CAAA;AAAA,IACH;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AACF,CAAA;AAEA,SAAS,YAAY,QAAA,EAGnB;AACA,EAAA,MAAM,MAAM,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,QAAQ,CAAA;AACtD,EAAA,MAAM,OAAO,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,QAAQ,CAAA;AACvD,EAAA,IAAI,IAAI,MAAA,KAAW,CAAA,EAAG,OAAO,EAAE,UAAU,IAAA,EAAK;AAC9C,EAAA,MAAM,IAAA,GAAO,IACV,OAAA,CAAQ,CAAC,MAAM,CAAA,CAAE,OAAO,CAAA,CACxB,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,IAAA,KAAS,MAAM,EAC/B,GAAA,CAAI,CAAC,MAAO,CAAA,CAAuB,IAAI,CAAA,CACvC,IAAA,CAAK,IAAI,CAAA;AACZ,EAAA,OAAO,EAAE,MAAA,EAAQ,IAAA,EAAM,QAAA,EAAU,IAAA,EAAK;AACxC;AAEA,SAAS,mBAAmB,CAAA,EAA+B;AACzD,EAAA,QAAQ,EAAE,IAAA;AAAM,IACd,KAAK,MAAA,EAAQ;AACX,MAAA,MAAM,MAAA,GAAS,CAAA,CAAE,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM;AAClC,QAAA,IAAI,CAAA,CAAE,SAAS,MAAA,EAAQ,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,CAAA,CAAE,IAAA,EAAK;AAC3D,QAAA,IAAI,CAAA,CAAE,SAAS,OAAA,EAAS;AACtB,UAAA,IAAI,OAAO,EAAE,KAAA,KAAU,QAAA,IAAY,EAAE,KAAA,CAAM,UAAA,CAAW,MAAM,CAAA,EAAG;AAC7D,YAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,MAAA,EAAQ,EAAE,MAAM,KAAA,EAAO,GAAA,EAAK,CAAA,CAAE,KAAA,EAAM,EAAE;AAAA,UAChE;AACA,UAAA,IAAI,OAAO,CAAA,CAAE,KAAA,KAAU,QAAA,EAAU;AAC/B,YAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,MAAA,EAAQ,EAAE,MAAM,KAAA,EAAO,GAAA,EAAK,CAAA,CAAE,KAAA,EAAM,EAAE;AAAA,UAChE;AACA,UAAA,OAAO;AAAA,YACL,IAAA,EAAM,OAAA;AAAA,YACN,MAAA,EAAQ;AAAA,cACN,IAAA,EAAM,QAAA;AAAA,cACN,UAAA,EAAY,EAAE,QAAA,IAAY,WAAA;AAAA,cAC1B,IAAA,EAAM,aAAA,CAAc,CAAA,CAAE,KAAmB;AAAA;AAC3C,WACF;AAAA,QACF;AACA,QAAA,OAAO,CAAA;AAAA,MACT,CAAC,CAAA;AACD,MAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,MAAA,EAAO;AAAA,IACzC;AAAA,IACA,KAAK,WAAA,EAAa;AAChB,MAAA,MAAM,MAAA,GAAS,CAAA,CAAE,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM;AAClC,QAAA,IAAI,CAAA,CAAE,SAAS,MAAA,EAAQ,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,CAAA,CAAE,IAAA,EAAK;AAC3D,QAAA,IAAI,CAAA,CAAE,SAAS,WAAA,EAAa;AAC1B,UAAA,OAAO,EAAE,IAAA,EAAM,UAAA,EAAY,EAAA,EAAI,CAAA,CAAE,UAAA,EAAY,IAAA,EAAM,CAAA,CAAE,QAAA,EAAU,KAAA,EAAO,CAAA,CAAE,IAAA,EAAK;AAAA,QAC/E;AACA,QAAA,OAAO,CAAA;AAAA,MACT,CAAC,CAAA;AACD,MAAA,OAAO,EAAE,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,MAAA,EAAO;AAAA,IAC9C;AAAA,IACA,KAAK,MAAA,EAAQ;AACX,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,MAAA;AAAA,QACN,OAAA,EAAS,CAAA,CAAE,OAAA,CACR,MAAA,CAAO,CAAC,CAAA,KAAuD,CAAA,CAAE,IAAA,KAAS,aAAa,CAAA,CACvF,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,UACX,IAAA,EAAM,aAAA;AAAA,UACN,aAAa,CAAA,CAAE,UAAA;AAAA,UACf,OAAA,EAAS,OAAO,CAAA,CAAE,MAAA,KAAW,QAAA,GAAW,EAAE,MAAA,GAAS,IAAA,CAAK,SAAA,CAAU,CAAA,CAAE,MAAM,CAAA;AAAA,UAC1E,GAAI,CAAA,CAAE,OAAA,GAAU,EAAE,QAAA,EAAU,IAAA,KAAS;AAAC,SACxC,CAAE;AAAA,OACN;AAAA,IACF;AAAA,IACA,KAAK,QAAA;AACH,MAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,EAAA,EAAG;AAAA;AAEzC;AAEA,SAAS,WAAW,GAAA,EAA8D;AAChF,EAAA,IAAI,CAAC,GAAA,CAAI,IAAA,EAAM,OAAO,IAAA;AACtB,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,IAAI,CAAA;AAAA,EAC5B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEA,SAAS,cAAc,IAAA,EAAuB;AAC5C,EAAA,IAAI,CAAC,IAAA,EAAM,OAAO,EAAC;AACnB,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,EACxB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEA,SAAS,gBAAgB,MAAA,EAAiD;AACxE,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,UAAA;AACH,MAAA,OAAO,MAAA;AAAA,IACT,KAAK,YAAA;AACH,MAAA,OAAO,QAAA;AAAA,IACT,KAAK,UAAA;AACH,MAAA,OAAO,YAAA;AAAA,IACT,KAAK,eAAA;AACH,MAAA,OAAO,MAAA;AAAA,IACT,KAAK,IAAA;AAAA,IACL,KAAK,MAAA;AACH,MAAA,OAAO,SAAA;AAAA,IACT;AACE,MAAA,OAAO,OAAA;AAAA;AAEb;AASA,SAAS,SAAS,CAAA,EAA2C;AAC3D,EAAA,IAAI,CAAC,CAAA,EAAG,OAAO,EAAC;AAChB,EAAA,MAAM,YAAA,GAAA,CACH,EAAE,YAAA,IAAgB,CAAA,KAAM,EAAE,uBAAA,IAA2B,CAAA,CAAA,IAAM,EAAE,2BAAA,IAA+B,CAAA,CAAA;AAC/F,EAAA,MAAM,GAAA,GAAkB;AAAA,IACtB,YAAA,EAAc,CAAA,CAAE,YAAA,KAAiB,MAAA,GAAY,YAAA,GAAe,MAAA;AAAA,IAC5D,kBAAkB,CAAA,CAAE;AAAA,GACtB;AACA,EAAA,IAAI,GAAA,CAAI,YAAA,KAAiB,MAAA,IAAa,GAAA,CAAI,qBAAqB,MAAA,EAAW;AACxE,IAAA,GAAA,CAAI,WAAA,GAAc,GAAA,CAAI,YAAA,GAAe,GAAA,CAAI,gBAAA;AAAA,EAC3C;AACA,EAAA,IAAI,CAAA,CAAE,uBAAA,KAA4B,MAAA,EAAW,GAAA,CAAI,qBAAqB,CAAA,CAAE,uBAAA;AACxE,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,UAAA,CAAW,GAAe,CAAA,EAA2B;AAC5D,EAAA,MAAM,GAAA,GAAM,CAAC,CAAA,EAAY,CAAA,KACvB,CAAA,KAAM,MAAA,IAAa,CAAA,KAAM,MAAA,GAAY,MAAA,GAAA,CAAa,CAAA,IAAK,CAAA,KAAM,CAAA,IAAK,CAAA,CAAA;AACpE,EAAA,OAAO;AAAA,IACL,YAAA,EAAc,GAAA,CAAI,CAAA,CAAE,YAAA,EAAc,EAAE,YAAY,CAAA;AAAA,IAChD,gBAAA,EAAkB,GAAA,CAAI,CAAA,CAAE,gBAAA,EAAkB,EAAE,gBAAgB,CAAA;AAAA,IAC5D,WAAA,EAAa,GAAA,CAAI,CAAA,CAAE,WAAA,EAAa,EAAE,WAAW,CAAA;AAAA,IAC7C,kBAAA,EAAoB,GAAA,CAAI,CAAA,CAAE,kBAAA,EAAoB,EAAE,kBAAkB;AAAA,GACpE;AACF;AAEA,SAAS,cAAc,GAAA,EAAyB;AAC9C,EAAA,IAAI,CAAA,GAAI,EAAA;AACR,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,UAAA,EAAY,CAAA,EAAA,EAAK,CAAA,IAAK,MAAA,CAAO,YAAA,CAAa,GAAA,CAAI,CAAC,CAAW,CAAA;AAClF,EAAA,OAAO,OAAO,IAAA,KAAS,WAAA,GAAc,IAAA,CAAK,CAAC,CAAA,GAAI,MAAA,CAAO,IAAA,CAAK,CAAA,EAAG,QAAQ,CAAA,CAAE,QAAA,CAAS,QAAQ,CAAA;AAC3F;;;ACvVO,SAAS,eAAA,CAAgB,OAAA,GAAoC,EAAC,EAAsB;AACzF,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAA,IAAU,OAAA,CAAQ,mBAAmB,CAAA;AAC5D,EAAA,MAAM,OAAA,GAAU,QAAQ,OAAA,IAAW,8BAAA;AACnC,EAAA,MAAM,OAAA,GAAU,QAAQ,OAAA,IAAW,YAAA;AACnC,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,KAAA,IAAS,UAAA,CAAW,KAAA;AAE5C,EAAA,MAAM,OAAA,GAAkC;AAAA,IACtC,cAAA,EAAgB,kBAAA;AAAA,IAChB,mBAAA,EAAqB,OAAA;AAAA,IACrB,GAAG,OAAA,CAAQ;AAAA,GACb;AACA,EAAA,IAAI,MAAA,EAAQ,OAAA,CAAQ,WAAW,CAAA,GAAI,MAAA;AAEnC,EAAA,MAAM,IAAA,GAAO,CAAC,OAAA,KACZ,IAAI,sBAAA,CAAuB;AAAA,IACzB,OAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACD,CAAA;AAEH,EAAA,MAAM,QAAA,IAAY,CAAC,OAAA,KAAsC,IAAA,CAAK,OAAO,CAAA,CAAA;AACrE,EAAA,QAAA,CAAS,QAAA,GAAW,IAAA;AACpB,EAAA,OAAO,QAAA;AACT;AAEO,IAAM,YAA+B,eAAA;AAE5C,SAAS,QAAQ,IAAA,EAAkC;AACjD,EAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,OAAA,CAAQ,GAAA,EAAK;AACjD,IAAA,OAAO,OAAA,CAAQ,IAAI,IAAI,CAAA;AAAA,EACzB;AACA,EAAA,OAAO,MAAA;AACT","file":"index.cjs","sourcesContent":["/**\n * Anthropic streams SSE with explicit `event:` lines (e.g. `content_block_delta`).\n * We surface both the event name and the data payload — the model logic decides\n * how to interpret them.\n */\nexport interface SSEEvent {\n event?: string;\n data: string;\n}\n\nexport async function* parseSSEWithEvent(\n body: ReadableStream<Uint8Array>,\n): AsyncIterable<SSEEvent> {\n const reader = body.getReader();\n const decoder = new TextDecoder('utf-8');\n let buffer = '';\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n if (buffer.trim().length > 0) {\n const evt = parseBlock(buffer);\n if (evt) yield evt;\n }\n return;\n }\n buffer += decoder.decode(value, { stream: true });\n\n while (true) {\n const idx = findEventBoundary(buffer);\n if (idx === -1) break;\n const block = buffer.slice(0, idx);\n buffer = buffer.slice(idx).replace(/^(\\r?\\n){2}/, '');\n const evt = parseBlock(block);\n if (evt) yield evt;\n }\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nfunction findEventBoundary(s: string): number {\n const i1 = s.indexOf('\\n\\n');\n const i2 = s.indexOf('\\r\\n\\r\\n');\n if (i1 === -1) return i2;\n if (i2 === -1) return i1;\n return Math.min(i1, i2);\n}\n\nfunction parseBlock(block: string): SSEEvent | null {\n const lines = block.split(/\\r?\\n/);\n let event: string | undefined;\n const data: string[] = [];\n for (const line of lines) {\n if (line.startsWith('event:')) event = line.slice(6).trim();\n else if (line.startsWith('data:')) data.push(line.slice(5).replace(/^ /, ''));\n }\n if (data.length === 0 && !event) return null;\n return { ...(event !== undefined ? { event } : {}), data: data.join('\\n') };\n}\n","import {\n APICallError,\n type FinishReason,\n type LanguageModel,\n type ModelCallOptions,\n type ModelGenerateResult,\n type ModelStreamPart,\n type NormalizedMessage,\n type TokenUsage,\n type ToolCallPart,\n} from '@ziro-agent/core';\nimport { parseSSEWithEvent, type SSEEvent } from './util/sse.js';\n\nexport type AnthropicMessagesModelId =\n | 'claude-opus-4-1'\n | 'claude-opus-4'\n | 'claude-sonnet-4-5'\n | 'claude-sonnet-4'\n | 'claude-3-7-sonnet-latest'\n | 'claude-3-5-sonnet-latest'\n | 'claude-3-5-haiku-latest'\n | 'claude-3-haiku-20240307'\n | (string & {});\n\ninterface AnthropicMessagesModelConfig {\n modelId: AnthropicMessagesModelId;\n baseURL: string;\n headers: Record<string, string>;\n fetcher: typeof fetch;\n}\n\nexport class AnthropicMessagesModel implements LanguageModel {\n readonly provider = 'anthropic';\n readonly modelId: string;\n private readonly config: AnthropicMessagesModelConfig;\n\n constructor(config: AnthropicMessagesModelConfig) {\n this.modelId = config.modelId;\n this.config = config;\n }\n\n async generate(options: ModelCallOptions): Promise<ModelGenerateResult> {\n const body = this.buildBody(options, false);\n const res = await this.fetch('/messages', body, options);\n const json = (await res.json()) as AnthropicMessageResponse;\n\n const text = (json.content ?? [])\n .filter((b) => b.type === 'text')\n .map((b) => (b as { text: string }).text)\n .join('');\n\n const toolCalls: ToolCallPart[] = (json.content ?? [])\n .filter((b) => b.type === 'tool_use')\n .map((b) => {\n const tu = b as { id: string; name: string; input: unknown };\n return { type: 'tool-call', toolCallId: tu.id, toolName: tu.name, args: tu.input };\n });\n\n return {\n text,\n content: [...(text.length > 0 ? [{ type: 'text' as const, text }] : []), ...toolCalls],\n toolCalls,\n finishReason: mapFinishReason(json.stop_reason),\n usage: mapUsage(json.usage),\n rawResponse: json,\n };\n }\n\n async stream(options: ModelCallOptions): Promise<ReadableStream<ModelStreamPart>> {\n const body = this.buildBody(options, true);\n const res = await this.fetch('/messages', body, options);\n if (!res.body) {\n throw new APICallError({\n message: 'Anthropic streaming response has no body.',\n statusCode: res.status,\n });\n }\n\n const events = parseSSEWithEvent(res.body);\n\n return new ReadableStream<ModelStreamPart>({\n async start(controller) {\n const toolBlocks = new Map<number, { id: string; name: string; argsBuffer: string }>();\n let finish: FinishReason = 'unknown';\n let usage: TokenUsage = {};\n\n try {\n for await (const evt of events) {\n const data = parseEvent(evt);\n if (!data) continue;\n\n switch (data.type) {\n case 'message_start': {\n const msg = data.message as { usage?: AnthropicUsage } | undefined;\n if (msg?.usage) usage = mergeUsage(usage, mapUsage(msg.usage));\n break;\n }\n case 'content_block_start': {\n const block = data.content_block as\n | { type: string; id?: string; name?: string }\n | undefined;\n if (block?.type === 'tool_use' && typeof data.index === 'number') {\n toolBlocks.set(data.index, {\n id: block.id ?? `tu_${data.index}`,\n name: block.name ?? '',\n argsBuffer: '',\n });\n }\n break;\n }\n case 'content_block_delta': {\n const delta = data.delta as\n | { type: string; text?: string; partial_json?: string }\n | undefined;\n if (delta?.type === 'text_delta' && delta.text) {\n controller.enqueue({ type: 'text-delta', textDelta: delta.text });\n } else if (\n delta?.type === 'input_json_delta' &&\n typeof data.index === 'number' &&\n delta.partial_json\n ) {\n const tb = toolBlocks.get(data.index);\n if (tb) {\n tb.argsBuffer += delta.partial_json;\n controller.enqueue({\n type: 'tool-call-delta',\n toolCallId: tb.id,\n toolName: tb.name,\n argsDelta: delta.partial_json,\n });\n }\n }\n break;\n }\n case 'message_delta': {\n const delta = data.delta as { stop_reason?: string } | undefined;\n if (delta?.stop_reason) finish = mapFinishReason(delta.stop_reason);\n if (data.usage) usage = mergeUsage(usage, mapUsage(data.usage as AnthropicUsage));\n break;\n }\n case 'message_stop': {\n break;\n }\n }\n }\n\n for (const tb of toolBlocks.values()) {\n controller.enqueue({\n type: 'tool-call',\n toolCallId: tb.id,\n toolName: tb.name,\n args: safeParseJSON(tb.argsBuffer),\n });\n }\n\n controller.enqueue({ type: 'finish', finishReason: finish, usage });\n controller.close();\n } catch (err) {\n controller.enqueue({ type: 'error', error: err });\n controller.close();\n }\n },\n });\n }\n\n private buildBody(options: ModelCallOptions, stream: boolean): Record<string, unknown> {\n const { system, messages } = splitSystem(options.messages);\n\n const body: Record<string, unknown> = {\n model: this.modelId,\n messages: messages.map(toAnthropicMessage),\n max_tokens: options.maxTokens ?? 4096,\n };\n if (system) body.system = system;\n if (stream) body.stream = true;\n if (options.tools?.length) {\n body.tools = options.tools.map((t) => ({\n name: t.name,\n ...(t.description !== undefined ? { description: t.description } : {}),\n input_schema: t.parameters,\n }));\n }\n if (options.toolChoice !== undefined) {\n if (options.toolChoice === 'required') body.tool_choice = { type: 'any' };\n else if (options.toolChoice === 'auto') body.tool_choice = { type: 'auto' };\n else if (options.toolChoice === 'none') {\n // Anthropic has no explicit \"none\" — skip.\n } else if (typeof options.toolChoice === 'object') {\n body.tool_choice = { type: 'tool', name: options.toolChoice.toolName };\n }\n }\n if (options.temperature !== undefined) body.temperature = options.temperature;\n if (options.topP !== undefined) body.top_p = options.topP;\n if (options.topK !== undefined) body.top_k = options.topK;\n if (options.stopSequences !== undefined) body.stop_sequences = options.stopSequences;\n if (options.providerOptions) Object.assign(body, options.providerOptions);\n return body;\n }\n\n private async fetch(path: string, body: unknown, options: ModelCallOptions): Promise<Response> {\n const url = `${this.config.baseURL}${path}`;\n const headers = { ...this.config.headers, ...options.headers };\n const init: RequestInit = {\n method: 'POST',\n headers,\n body: JSON.stringify(body),\n };\n if (options.abortSignal) init.signal = options.abortSignal;\n\n const res = await this.config.fetcher(url, init);\n if (!res.ok) {\n const text = await res.text().catch(() => '');\n throw new APICallError({\n message: `Anthropic API error: ${res.status} ${res.statusText}`,\n url,\n statusCode: res.status,\n responseBody: text,\n });\n }\n return res;\n }\n}\n\nfunction splitSystem(messages: NormalizedMessage[]): {\n system?: string;\n messages: NormalizedMessage[];\n} {\n const sys = messages.filter((m) => m.role === 'system');\n const rest = messages.filter((m) => m.role !== 'system');\n if (sys.length === 0) return { messages: rest };\n const text = sys\n .flatMap((m) => m.content)\n .filter((p) => p.type === 'text')\n .map((p) => (p as { text: string }).text)\n .join('\\n');\n return { system: text, messages: rest };\n}\n\nfunction toAnthropicMessage(m: NormalizedMessage): unknown {\n switch (m.role) {\n case 'user': {\n const blocks = m.content.map((p) => {\n if (p.type === 'text') return { type: 'text', text: p.text };\n if (p.type === 'image') {\n if (typeof p.image === 'string' && p.image.startsWith('http')) {\n return { type: 'image', source: { type: 'url', url: p.image } };\n }\n if (typeof p.image === 'string') {\n return { type: 'image', source: { type: 'url', url: p.image } };\n }\n return {\n type: 'image',\n source: {\n type: 'base64',\n media_type: p.mimeType ?? 'image/png',\n data: uint8ToBase64(p.image as Uint8Array),\n },\n };\n }\n return p;\n });\n return { role: 'user', content: blocks };\n }\n case 'assistant': {\n const blocks = m.content.map((p) => {\n if (p.type === 'text') return { type: 'text', text: p.text };\n if (p.type === 'tool-call') {\n return { type: 'tool_use', id: p.toolCallId, name: p.toolName, input: p.args };\n }\n return p;\n });\n return { role: 'assistant', content: blocks };\n }\n case 'tool': {\n return {\n role: 'user',\n content: m.content\n .filter((r): r is Extract<typeof r, { type: 'tool-result' }> => r.type === 'tool-result')\n .map((r) => ({\n type: 'tool_result',\n tool_use_id: r.toolCallId,\n content: typeof r.result === 'string' ? r.result : JSON.stringify(r.result),\n ...(r.isError ? { is_error: true } : {}),\n })),\n };\n }\n case 'system':\n return { role: 'user', content: '' };\n }\n}\n\nfunction parseEvent(evt: SSEEvent): { type: string; [k: string]: unknown } | null {\n if (!evt.data) return null;\n try {\n return JSON.parse(evt.data) as { type: string };\n } catch {\n return null;\n }\n}\n\nfunction safeParseJSON(text: string): unknown {\n if (!text) return {};\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\nfunction mapFinishReason(reason: string | null | undefined): FinishReason {\n switch (reason) {\n case 'end_turn':\n return 'stop';\n case 'max_tokens':\n return 'length';\n case 'tool_use':\n return 'tool-calls';\n case 'stop_sequence':\n return 'stop';\n case null:\n case undefined:\n return 'unknown';\n default:\n return 'other';\n }\n}\n\ninterface AnthropicUsage {\n input_tokens?: number;\n output_tokens?: number;\n cache_read_input_tokens?: number;\n cache_creation_input_tokens?: number;\n}\n\nfunction mapUsage(u: AnthropicUsage | undefined): TokenUsage {\n if (!u) return {};\n const promptTokens =\n (u.input_tokens ?? 0) + (u.cache_read_input_tokens ?? 0) + (u.cache_creation_input_tokens ?? 0);\n const out: TokenUsage = {\n promptTokens: u.input_tokens !== undefined ? promptTokens : undefined,\n completionTokens: u.output_tokens,\n };\n if (out.promptTokens !== undefined && out.completionTokens !== undefined) {\n out.totalTokens = out.promptTokens + out.completionTokens;\n }\n if (u.cache_read_input_tokens !== undefined) out.cachedPromptTokens = u.cache_read_input_tokens;\n return out;\n}\n\nfunction mergeUsage(a: TokenUsage, b: TokenUsage): TokenUsage {\n const sum = (x?: number, y?: number) =>\n x === undefined && y === undefined ? undefined : (x ?? 0) + (y ?? 0);\n return {\n promptTokens: sum(a.promptTokens, b.promptTokens),\n completionTokens: sum(a.completionTokens, b.completionTokens),\n totalTokens: sum(a.totalTokens, b.totalTokens),\n cachedPromptTokens: sum(a.cachedPromptTokens, b.cachedPromptTokens),\n };\n}\n\nfunction uint8ToBase64(arr: Uint8Array): string {\n let s = '';\n for (let i = 0; i < arr.byteLength; i++) s += String.fromCharCode(arr[i] as number);\n return typeof btoa !== 'undefined' ? btoa(s) : Buffer.from(s, 'binary').toString('base64');\n}\n\ninterface AnthropicMessageResponse {\n content?: Array<\n { type: 'text'; text: string } | { type: 'tool_use'; id: string; name: string; input: unknown }\n >;\n stop_reason?: string;\n usage?: AnthropicUsage;\n}\n","import type { LanguageModel } from '@ziro-agent/core';\nimport {\n AnthropicMessagesModel,\n type AnthropicMessagesModelId,\n} from './anthropic-messages-model.js';\n\nexport interface AnthropicProviderOptions {\n /** Defaults to `process.env.ANTHROPIC_API_KEY`. */\n apiKey?: string;\n baseURL?: string;\n /** API version sent in `anthropic-version`. Defaults to `2023-06-01`. */\n version?: string;\n headers?: Record<string, string>;\n fetch?: typeof fetch;\n}\n\nexport interface AnthropicProvider {\n (modelId: AnthropicMessagesModelId): LanguageModel;\n messages(modelId: AnthropicMessagesModelId): LanguageModel;\n}\n\nexport function createAnthropic(options: AnthropicProviderOptions = {}): AnthropicProvider {\n const apiKey = options.apiKey ?? loadEnv('ANTHROPIC_API_KEY');\n const baseURL = options.baseURL ?? 'https://api.anthropic.com/v1';\n const version = options.version ?? '2023-06-01';\n const fetcher = options.fetch ?? globalThis.fetch;\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'anthropic-version': version,\n ...options.headers,\n };\n if (apiKey) headers['x-api-key'] = apiKey;\n\n const make = (modelId: AnthropicMessagesModelId): LanguageModel =>\n new AnthropicMessagesModel({\n modelId,\n baseURL,\n headers,\n fetcher,\n });\n\n const provider = ((modelId: AnthropicMessagesModelId) => make(modelId)) as AnthropicProvider;\n provider.messages = make;\n return provider;\n}\n\nexport const anthropic: AnthropicProvider = createAnthropic();\n\nfunction loadEnv(name: string): string | undefined {\n if (typeof process !== 'undefined' && process.env) {\n return process.env[name];\n }\n return undefined;\n}\n"]}
|
package/dist/index.js
CHANGED
|
@@ -70,10 +70,7 @@ var AnthropicMessagesModel = class {
|
|
|
70
70
|
});
|
|
71
71
|
return {
|
|
72
72
|
text,
|
|
73
|
-
content: [
|
|
74
|
-
...text.length > 0 ? [{ type: "text", text }] : [],
|
|
75
|
-
...toolCalls
|
|
76
|
-
],
|
|
73
|
+
content: [...text.length > 0 ? [{ type: "text", text }] : [], ...toolCalls],
|
|
77
74
|
toolCalls,
|
|
78
75
|
finishReason: mapFinishReason(json.stop_reason),
|
|
79
76
|
usage: mapUsage(json.usage),
|
|
@@ -169,26 +166,26 @@ var AnthropicMessagesModel = class {
|
|
|
169
166
|
messages: messages.map(toAnthropicMessage),
|
|
170
167
|
max_tokens: options.maxTokens ?? 4096
|
|
171
168
|
};
|
|
172
|
-
if (system) body
|
|
173
|
-
if (stream) body
|
|
169
|
+
if (system) body.system = system;
|
|
170
|
+
if (stream) body.stream = true;
|
|
174
171
|
if (options.tools?.length) {
|
|
175
|
-
body
|
|
172
|
+
body.tools = options.tools.map((t) => ({
|
|
176
173
|
name: t.name,
|
|
177
174
|
...t.description !== void 0 ? { description: t.description } : {},
|
|
178
175
|
input_schema: t.parameters
|
|
179
176
|
}));
|
|
180
177
|
}
|
|
181
178
|
if (options.toolChoice !== void 0) {
|
|
182
|
-
if (options.toolChoice === "required") body
|
|
183
|
-
else if (options.toolChoice === "auto") body
|
|
179
|
+
if (options.toolChoice === "required") body.tool_choice = { type: "any" };
|
|
180
|
+
else if (options.toolChoice === "auto") body.tool_choice = { type: "auto" };
|
|
184
181
|
else if (options.toolChoice === "none") ; else if (typeof options.toolChoice === "object") {
|
|
185
|
-
body
|
|
182
|
+
body.tool_choice = { type: "tool", name: options.toolChoice.toolName };
|
|
186
183
|
}
|
|
187
184
|
}
|
|
188
|
-
if (options.temperature !== void 0) body
|
|
189
|
-
if (options.topP !== void 0) body
|
|
190
|
-
if (options.topK !== void 0) body
|
|
191
|
-
if (options.stopSequences !== void 0) body
|
|
185
|
+
if (options.temperature !== void 0) body.temperature = options.temperature;
|
|
186
|
+
if (options.topP !== void 0) body.top_p = options.topP;
|
|
187
|
+
if (options.topK !== void 0) body.top_k = options.topK;
|
|
188
|
+
if (options.stopSequences !== void 0) body.stop_sequences = options.stopSequences;
|
|
192
189
|
if (options.providerOptions) Object.assign(body, options.providerOptions);
|
|
193
190
|
return body;
|
|
194
191
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/util/sse.ts","../src/anthropic-messages-model.ts","../src/anthropic-provider.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Anthropic streams SSE with explicit `event:` lines (e.g. `content_block_delta`).\n * We surface both the event name and the data payload — the model logic decides\n * how to interpret them.\n */\nexport interface SSEEvent {\n event?: string;\n data: string;\n}\n\nexport async function* parseSSEWithEvent(\n body: ReadableStream<Uint8Array>,\n): AsyncIterable<SSEEvent> {\n const reader = body.getReader();\n const decoder = new TextDecoder('utf-8');\n let buffer = '';\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n if (buffer.trim().length > 0) {\n const evt = parseBlock(buffer);\n if (evt) yield evt;\n }\n return;\n }\n buffer += decoder.decode(value, { stream: true });\n\n while (true) {\n const idx = findEventBoundary(buffer);\n if (idx === -1) break;\n const block = buffer.slice(0, idx);\n buffer = buffer.slice(idx).replace(/^(\\r?\\n){2}/, '');\n const evt = parseBlock(block);\n if (evt) yield evt;\n }\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nfunction findEventBoundary(s: string): number {\n const i1 = s.indexOf('\\n\\n');\n const i2 = s.indexOf('\\r\\n\\r\\n');\n if (i1 === -1) return i2;\n if (i2 === -1) return i1;\n return Math.min(i1, i2);\n}\n\nfunction parseBlock(block: string): SSEEvent | null {\n const lines = block.split(/\\r?\\n/);\n let event: string | undefined;\n const data: string[] = [];\n for (const line of lines) {\n if (line.startsWith('event:')) event = line.slice(6).trim();\n else if (line.startsWith('data:')) data.push(line.slice(5).replace(/^ /, ''));\n }\n if (data.length === 0 && !event) return null;\n return { ...(event !== undefined ? { event } : {}), data: data.join('\\n') };\n}\n","import {\n APICallError,\n type FinishReason,\n type LanguageModel,\n type ModelCallOptions,\n type ModelGenerateResult,\n type ModelStreamPart,\n type NormalizedMessage,\n type TokenUsage,\n type ToolCallPart,\n} from '@ziro-agent/core';\nimport { parseSSEWithEvent, type SSEEvent } from './util/sse.js';\n\nexport type AnthropicMessagesModelId =\n | 'claude-opus-4-1'\n | 'claude-opus-4'\n | 'claude-sonnet-4-5'\n | 'claude-sonnet-4'\n | 'claude-3-7-sonnet-latest'\n | 'claude-3-5-sonnet-latest'\n | 'claude-3-5-haiku-latest'\n | 'claude-3-haiku-20240307'\n | (string & {});\n\ninterface AnthropicMessagesModelConfig {\n modelId: AnthropicMessagesModelId;\n baseURL: string;\n headers: Record<string, string>;\n fetcher: typeof fetch;\n}\n\nexport class AnthropicMessagesModel implements LanguageModel {\n readonly provider = 'anthropic';\n readonly modelId: string;\n private readonly config: AnthropicMessagesModelConfig;\n\n constructor(config: AnthropicMessagesModelConfig) {\n this.modelId = config.modelId;\n this.config = config;\n }\n\n async generate(options: ModelCallOptions): Promise<ModelGenerateResult> {\n const body = this.buildBody(options, false);\n const res = await this.fetch('/messages', body, options);\n const json = (await res.json()) as AnthropicMessageResponse;\n\n const text = (json.content ?? [])\n .filter((b) => b.type === 'text')\n .map((b) => (b as { text: string }).text)\n .join('');\n\n const toolCalls: ToolCallPart[] = (json.content ?? [])\n .filter((b) => b.type === 'tool_use')\n .map((b) => {\n const tu = b as { id: string; name: string; input: unknown };\n return { type: 'tool-call', toolCallId: tu.id, toolName: tu.name, args: tu.input };\n });\n\n return {\n text,\n content: [\n ...(text.length > 0 ? [{ type: 'text' as const, text }] : []),\n ...toolCalls,\n ],\n toolCalls,\n finishReason: mapFinishReason(json.stop_reason),\n usage: mapUsage(json.usage),\n rawResponse: json,\n };\n }\n\n async stream(options: ModelCallOptions): Promise<ReadableStream<ModelStreamPart>> {\n const body = this.buildBody(options, true);\n const res = await this.fetch('/messages', body, options);\n if (!res.body) {\n throw new APICallError({\n message: 'Anthropic streaming response has no body.',\n statusCode: res.status,\n });\n }\n\n const events = parseSSEWithEvent(res.body);\n\n return new ReadableStream<ModelStreamPart>({\n async start(controller) {\n const toolBlocks = new Map<number, { id: string; name: string; argsBuffer: string }>();\n let finish: FinishReason = 'unknown';\n let usage: TokenUsage = {};\n\n try {\n for await (const evt of events) {\n const data = parseEvent(evt);\n if (!data) continue;\n\n switch (data.type) {\n case 'message_start': {\n const msg = data.message as { usage?: AnthropicUsage } | undefined;\n if (msg?.usage) usage = mergeUsage(usage, mapUsage(msg.usage));\n break;\n }\n case 'content_block_start': {\n const block = data.content_block as\n | { type: string; id?: string; name?: string }\n | undefined;\n if (block?.type === 'tool_use' && typeof data.index === 'number') {\n toolBlocks.set(data.index, {\n id: block.id ?? `tu_${data.index}`,\n name: block.name ?? '',\n argsBuffer: '',\n });\n }\n break;\n }\n case 'content_block_delta': {\n const delta = data.delta as\n | { type: string; text?: string; partial_json?: string }\n | undefined;\n if (delta?.type === 'text_delta' && delta.text) {\n controller.enqueue({ type: 'text-delta', textDelta: delta.text });\n } else if (\n delta?.type === 'input_json_delta' &&\n typeof data.index === 'number' &&\n delta.partial_json\n ) {\n const tb = toolBlocks.get(data.index);\n if (tb) {\n tb.argsBuffer += delta.partial_json;\n controller.enqueue({\n type: 'tool-call-delta',\n toolCallId: tb.id,\n toolName: tb.name,\n argsDelta: delta.partial_json,\n });\n }\n }\n break;\n }\n case 'message_delta': {\n const delta = data.delta as { stop_reason?: string } | undefined;\n if (delta?.stop_reason) finish = mapFinishReason(delta.stop_reason);\n if (data.usage) usage = mergeUsage(usage, mapUsage(data.usage as AnthropicUsage));\n break;\n }\n case 'message_stop': {\n break;\n }\n }\n }\n\n for (const tb of toolBlocks.values()) {\n controller.enqueue({\n type: 'tool-call',\n toolCallId: tb.id,\n toolName: tb.name,\n args: safeParseJSON(tb.argsBuffer),\n });\n }\n\n controller.enqueue({ type: 'finish', finishReason: finish, usage });\n controller.close();\n } catch (err) {\n controller.enqueue({ type: 'error', error: err });\n controller.close();\n }\n },\n });\n }\n\n private buildBody(options: ModelCallOptions, stream: boolean): Record<string, unknown> {\n const { system, messages } = splitSystem(options.messages);\n\n const body: Record<string, unknown> = {\n model: this.modelId,\n messages: messages.map(toAnthropicMessage),\n max_tokens: options.maxTokens ?? 4096,\n };\n if (system) body['system'] = system;\n if (stream) body['stream'] = true;\n if (options.tools?.length) {\n body['tools'] = options.tools.map((t) => ({\n name: t.name,\n ...(t.description !== undefined ? { description: t.description } : {}),\n input_schema: t.parameters,\n }));\n }\n if (options.toolChoice !== undefined) {\n if (options.toolChoice === 'required') body['tool_choice'] = { type: 'any' };\n else if (options.toolChoice === 'auto') body['tool_choice'] = { type: 'auto' };\n else if (options.toolChoice === 'none') {\n // Anthropic has no explicit \"none\" — skip.\n } else if (typeof options.toolChoice === 'object') {\n body['tool_choice'] = { type: 'tool', name: options.toolChoice.toolName };\n }\n }\n if (options.temperature !== undefined) body['temperature'] = options.temperature;\n if (options.topP !== undefined) body['top_p'] = options.topP;\n if (options.topK !== undefined) body['top_k'] = options.topK;\n if (options.stopSequences !== undefined) body['stop_sequences'] = options.stopSequences;\n if (options.providerOptions) Object.assign(body, options.providerOptions);\n return body;\n }\n\n private async fetch(\n path: string,\n body: unknown,\n options: ModelCallOptions,\n ): Promise<Response> {\n const url = `${this.config.baseURL}${path}`;\n const headers = { ...this.config.headers, ...options.headers };\n const init: RequestInit = {\n method: 'POST',\n headers,\n body: JSON.stringify(body),\n };\n if (options.abortSignal) init.signal = options.abortSignal;\n\n const res = await this.config.fetcher(url, init);\n if (!res.ok) {\n const text = await res.text().catch(() => '');\n throw new APICallError({\n message: `Anthropic API error: ${res.status} ${res.statusText}`,\n url,\n statusCode: res.status,\n responseBody: text,\n });\n }\n return res;\n }\n}\n\nfunction splitSystem(messages: NormalizedMessage[]): {\n system?: string;\n messages: NormalizedMessage[];\n} {\n const sys = messages.filter((m) => m.role === 'system');\n const rest = messages.filter((m) => m.role !== 'system');\n if (sys.length === 0) return { messages: rest };\n const text = sys\n .flatMap((m) => m.content)\n .filter((p) => p.type === 'text')\n .map((p) => (p as { text: string }).text)\n .join('\\n');\n return { system: text, messages: rest };\n}\n\nfunction toAnthropicMessage(m: NormalizedMessage): unknown {\n switch (m.role) {\n case 'user': {\n const blocks = m.content.map((p) => {\n if (p.type === 'text') return { type: 'text', text: p.text };\n if (p.type === 'image') {\n if (typeof p.image === 'string' && p.image.startsWith('http')) {\n return { type: 'image', source: { type: 'url', url: p.image } };\n }\n if (typeof p.image === 'string') {\n return { type: 'image', source: { type: 'url', url: p.image } };\n }\n return {\n type: 'image',\n source: {\n type: 'base64',\n media_type: p.mimeType ?? 'image/png',\n data: uint8ToBase64(p.image as Uint8Array),\n },\n };\n }\n return p;\n });\n return { role: 'user', content: blocks };\n }\n case 'assistant': {\n const blocks = m.content.map((p) => {\n if (p.type === 'text') return { type: 'text', text: p.text };\n if (p.type === 'tool-call') {\n return { type: 'tool_use', id: p.toolCallId, name: p.toolName, input: p.args };\n }\n return p;\n });\n return { role: 'assistant', content: blocks };\n }\n case 'tool': {\n return {\n role: 'user',\n content: m.content\n .filter((r): r is Extract<typeof r, { type: 'tool-result' }> => r.type === 'tool-result')\n .map((r) => ({\n type: 'tool_result',\n tool_use_id: r.toolCallId,\n content: typeof r.result === 'string' ? r.result : JSON.stringify(r.result),\n ...(r.isError ? { is_error: true } : {}),\n })),\n };\n }\n case 'system':\n return { role: 'user', content: '' };\n }\n}\n\nfunction parseEvent(evt: SSEEvent): { type: string; [k: string]: unknown } | null {\n if (!evt.data) return null;\n try {\n return JSON.parse(evt.data) as { type: string };\n } catch {\n return null;\n }\n}\n\nfunction safeParseJSON(text: string): unknown {\n if (!text) return {};\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\nfunction mapFinishReason(reason: string | null | undefined): FinishReason {\n switch (reason) {\n case 'end_turn':\n return 'stop';\n case 'max_tokens':\n return 'length';\n case 'tool_use':\n return 'tool-calls';\n case 'stop_sequence':\n return 'stop';\n case null:\n case undefined:\n return 'unknown';\n default:\n return 'other';\n }\n}\n\ninterface AnthropicUsage {\n input_tokens?: number;\n output_tokens?: number;\n cache_read_input_tokens?: number;\n cache_creation_input_tokens?: number;\n}\n\nfunction mapUsage(u: AnthropicUsage | undefined): TokenUsage {\n if (!u) return {};\n const promptTokens =\n (u.input_tokens ?? 0) +\n (u.cache_read_input_tokens ?? 0) +\n (u.cache_creation_input_tokens ?? 0);\n const out: TokenUsage = {\n promptTokens: u.input_tokens !== undefined ? promptTokens : undefined,\n completionTokens: u.output_tokens,\n };\n if (out.promptTokens !== undefined && out.completionTokens !== undefined) {\n out.totalTokens = out.promptTokens + out.completionTokens;\n }\n if (u.cache_read_input_tokens !== undefined) out.cachedPromptTokens = u.cache_read_input_tokens;\n return out;\n}\n\nfunction mergeUsage(a: TokenUsage, b: TokenUsage): TokenUsage {\n const sum = (x?: number, y?: number) =>\n x === undefined && y === undefined ? undefined : (x ?? 0) + (y ?? 0);\n return {\n promptTokens: sum(a.promptTokens, b.promptTokens),\n completionTokens: sum(a.completionTokens, b.completionTokens),\n totalTokens: sum(a.totalTokens, b.totalTokens),\n cachedPromptTokens: sum(a.cachedPromptTokens, b.cachedPromptTokens),\n };\n}\n\nfunction uint8ToBase64(arr: Uint8Array): string {\n let s = '';\n for (let i = 0; i < arr.byteLength; i++) s += String.fromCharCode(arr[i] as number);\n return typeof btoa !== 'undefined'\n ? btoa(s)\n : Buffer.from(s, 'binary').toString('base64');\n}\n\ninterface AnthropicMessageResponse {\n content?: Array<\n | { type: 'text'; text: string }\n | { type: 'tool_use'; id: string; name: string; input: unknown }\n >;\n stop_reason?: string;\n usage?: AnthropicUsage;\n}\n","import type { LanguageModel } from '@ziro-agent/core';\nimport {\n AnthropicMessagesModel,\n type AnthropicMessagesModelId,\n} from './anthropic-messages-model.js';\n\nexport interface AnthropicProviderOptions {\n /** Defaults to `process.env.ANTHROPIC_API_KEY`. */\n apiKey?: string;\n baseURL?: string;\n /** API version sent in `anthropic-version`. Defaults to `2023-06-01`. */\n version?: string;\n headers?: Record<string, string>;\n fetch?: typeof fetch;\n}\n\nexport interface AnthropicProvider {\n (modelId: AnthropicMessagesModelId): LanguageModel;\n messages(modelId: AnthropicMessagesModelId): LanguageModel;\n}\n\nexport function createAnthropic(options: AnthropicProviderOptions = {}): AnthropicProvider {\n const apiKey = options.apiKey ?? loadEnv('ANTHROPIC_API_KEY');\n const baseURL = options.baseURL ?? 'https://api.anthropic.com/v1';\n const version = options.version ?? '2023-06-01';\n const fetcher = options.fetch ?? globalThis.fetch;\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'anthropic-version': version,\n ...options.headers,\n };\n if (apiKey) headers['x-api-key'] = apiKey;\n\n const make = (modelId: AnthropicMessagesModelId): LanguageModel =>\n new AnthropicMessagesModel({\n modelId,\n baseURL,\n headers,\n fetcher,\n });\n\n const provider = ((modelId: AnthropicMessagesModelId) => make(modelId)) as AnthropicProvider;\n provider.messages = make;\n return provider;\n}\n\nexport const anthropic: AnthropicProvider = createAnthropic();\n\nfunction loadEnv(name: string): string | undefined {\n if (typeof process !== 'undefined' && process.env) {\n return process.env[name];\n }\n return undefined;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/util/sse.ts","../src/anthropic-messages-model.ts","../src/anthropic-provider.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Anthropic streams SSE with explicit `event:` lines (e.g. `content_block_delta`).\n * We surface both the event name and the data payload — the model logic decides\n * how to interpret them.\n */\nexport interface SSEEvent {\n event?: string;\n data: string;\n}\n\nexport async function* parseSSEWithEvent(\n body: ReadableStream<Uint8Array>,\n): AsyncIterable<SSEEvent> {\n const reader = body.getReader();\n const decoder = new TextDecoder('utf-8');\n let buffer = '';\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n if (buffer.trim().length > 0) {\n const evt = parseBlock(buffer);\n if (evt) yield evt;\n }\n return;\n }\n buffer += decoder.decode(value, { stream: true });\n\n while (true) {\n const idx = findEventBoundary(buffer);\n if (idx === -1) break;\n const block = buffer.slice(0, idx);\n buffer = buffer.slice(idx).replace(/^(\\r?\\n){2}/, '');\n const evt = parseBlock(block);\n if (evt) yield evt;\n }\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nfunction findEventBoundary(s: string): number {\n const i1 = s.indexOf('\\n\\n');\n const i2 = s.indexOf('\\r\\n\\r\\n');\n if (i1 === -1) return i2;\n if (i2 === -1) return i1;\n return Math.min(i1, i2);\n}\n\nfunction parseBlock(block: string): SSEEvent | null {\n const lines = block.split(/\\r?\\n/);\n let event: string | undefined;\n const data: string[] = [];\n for (const line of lines) {\n if (line.startsWith('event:')) event = line.slice(6).trim();\n else if (line.startsWith('data:')) data.push(line.slice(5).replace(/^ /, ''));\n }\n if (data.length === 0 && !event) return null;\n return { ...(event !== undefined ? { event } : {}), data: data.join('\\n') };\n}\n","import {\n APICallError,\n type FinishReason,\n type LanguageModel,\n type ModelCallOptions,\n type ModelGenerateResult,\n type ModelStreamPart,\n type NormalizedMessage,\n type TokenUsage,\n type ToolCallPart,\n} from '@ziro-agent/core';\nimport { parseSSEWithEvent, type SSEEvent } from './util/sse.js';\n\nexport type AnthropicMessagesModelId =\n | 'claude-opus-4-1'\n | 'claude-opus-4'\n | 'claude-sonnet-4-5'\n | 'claude-sonnet-4'\n | 'claude-3-7-sonnet-latest'\n | 'claude-3-5-sonnet-latest'\n | 'claude-3-5-haiku-latest'\n | 'claude-3-haiku-20240307'\n | (string & {});\n\ninterface AnthropicMessagesModelConfig {\n modelId: AnthropicMessagesModelId;\n baseURL: string;\n headers: Record<string, string>;\n fetcher: typeof fetch;\n}\n\nexport class AnthropicMessagesModel implements LanguageModel {\n readonly provider = 'anthropic';\n readonly modelId: string;\n private readonly config: AnthropicMessagesModelConfig;\n\n constructor(config: AnthropicMessagesModelConfig) {\n this.modelId = config.modelId;\n this.config = config;\n }\n\n async generate(options: ModelCallOptions): Promise<ModelGenerateResult> {\n const body = this.buildBody(options, false);\n const res = await this.fetch('/messages', body, options);\n const json = (await res.json()) as AnthropicMessageResponse;\n\n const text = (json.content ?? [])\n .filter((b) => b.type === 'text')\n .map((b) => (b as { text: string }).text)\n .join('');\n\n const toolCalls: ToolCallPart[] = (json.content ?? [])\n .filter((b) => b.type === 'tool_use')\n .map((b) => {\n const tu = b as { id: string; name: string; input: unknown };\n return { type: 'tool-call', toolCallId: tu.id, toolName: tu.name, args: tu.input };\n });\n\n return {\n text,\n content: [...(text.length > 0 ? [{ type: 'text' as const, text }] : []), ...toolCalls],\n toolCalls,\n finishReason: mapFinishReason(json.stop_reason),\n usage: mapUsage(json.usage),\n rawResponse: json,\n };\n }\n\n async stream(options: ModelCallOptions): Promise<ReadableStream<ModelStreamPart>> {\n const body = this.buildBody(options, true);\n const res = await this.fetch('/messages', body, options);\n if (!res.body) {\n throw new APICallError({\n message: 'Anthropic streaming response has no body.',\n statusCode: res.status,\n });\n }\n\n const events = parseSSEWithEvent(res.body);\n\n return new ReadableStream<ModelStreamPart>({\n async start(controller) {\n const toolBlocks = new Map<number, { id: string; name: string; argsBuffer: string }>();\n let finish: FinishReason = 'unknown';\n let usage: TokenUsage = {};\n\n try {\n for await (const evt of events) {\n const data = parseEvent(evt);\n if (!data) continue;\n\n switch (data.type) {\n case 'message_start': {\n const msg = data.message as { usage?: AnthropicUsage } | undefined;\n if (msg?.usage) usage = mergeUsage(usage, mapUsage(msg.usage));\n break;\n }\n case 'content_block_start': {\n const block = data.content_block as\n | { type: string; id?: string; name?: string }\n | undefined;\n if (block?.type === 'tool_use' && typeof data.index === 'number') {\n toolBlocks.set(data.index, {\n id: block.id ?? `tu_${data.index}`,\n name: block.name ?? '',\n argsBuffer: '',\n });\n }\n break;\n }\n case 'content_block_delta': {\n const delta = data.delta as\n | { type: string; text?: string; partial_json?: string }\n | undefined;\n if (delta?.type === 'text_delta' && delta.text) {\n controller.enqueue({ type: 'text-delta', textDelta: delta.text });\n } else if (\n delta?.type === 'input_json_delta' &&\n typeof data.index === 'number' &&\n delta.partial_json\n ) {\n const tb = toolBlocks.get(data.index);\n if (tb) {\n tb.argsBuffer += delta.partial_json;\n controller.enqueue({\n type: 'tool-call-delta',\n toolCallId: tb.id,\n toolName: tb.name,\n argsDelta: delta.partial_json,\n });\n }\n }\n break;\n }\n case 'message_delta': {\n const delta = data.delta as { stop_reason?: string } | undefined;\n if (delta?.stop_reason) finish = mapFinishReason(delta.stop_reason);\n if (data.usage) usage = mergeUsage(usage, mapUsage(data.usage as AnthropicUsage));\n break;\n }\n case 'message_stop': {\n break;\n }\n }\n }\n\n for (const tb of toolBlocks.values()) {\n controller.enqueue({\n type: 'tool-call',\n toolCallId: tb.id,\n toolName: tb.name,\n args: safeParseJSON(tb.argsBuffer),\n });\n }\n\n controller.enqueue({ type: 'finish', finishReason: finish, usage });\n controller.close();\n } catch (err) {\n controller.enqueue({ type: 'error', error: err });\n controller.close();\n }\n },\n });\n }\n\n private buildBody(options: ModelCallOptions, stream: boolean): Record<string, unknown> {\n const { system, messages } = splitSystem(options.messages);\n\n const body: Record<string, unknown> = {\n model: this.modelId,\n messages: messages.map(toAnthropicMessage),\n max_tokens: options.maxTokens ?? 4096,\n };\n if (system) body.system = system;\n if (stream) body.stream = true;\n if (options.tools?.length) {\n body.tools = options.tools.map((t) => ({\n name: t.name,\n ...(t.description !== undefined ? { description: t.description } : {}),\n input_schema: t.parameters,\n }));\n }\n if (options.toolChoice !== undefined) {\n if (options.toolChoice === 'required') body.tool_choice = { type: 'any' };\n else if (options.toolChoice === 'auto') body.tool_choice = { type: 'auto' };\n else if (options.toolChoice === 'none') {\n // Anthropic has no explicit \"none\" — skip.\n } else if (typeof options.toolChoice === 'object') {\n body.tool_choice = { type: 'tool', name: options.toolChoice.toolName };\n }\n }\n if (options.temperature !== undefined) body.temperature = options.temperature;\n if (options.topP !== undefined) body.top_p = options.topP;\n if (options.topK !== undefined) body.top_k = options.topK;\n if (options.stopSequences !== undefined) body.stop_sequences = options.stopSequences;\n if (options.providerOptions) Object.assign(body, options.providerOptions);\n return body;\n }\n\n private async fetch(path: string, body: unknown, options: ModelCallOptions): Promise<Response> {\n const url = `${this.config.baseURL}${path}`;\n const headers = { ...this.config.headers, ...options.headers };\n const init: RequestInit = {\n method: 'POST',\n headers,\n body: JSON.stringify(body),\n };\n if (options.abortSignal) init.signal = options.abortSignal;\n\n const res = await this.config.fetcher(url, init);\n if (!res.ok) {\n const text = await res.text().catch(() => '');\n throw new APICallError({\n message: `Anthropic API error: ${res.status} ${res.statusText}`,\n url,\n statusCode: res.status,\n responseBody: text,\n });\n }\n return res;\n }\n}\n\nfunction splitSystem(messages: NormalizedMessage[]): {\n system?: string;\n messages: NormalizedMessage[];\n} {\n const sys = messages.filter((m) => m.role === 'system');\n const rest = messages.filter((m) => m.role !== 'system');\n if (sys.length === 0) return { messages: rest };\n const text = sys\n .flatMap((m) => m.content)\n .filter((p) => p.type === 'text')\n .map((p) => (p as { text: string }).text)\n .join('\\n');\n return { system: text, messages: rest };\n}\n\nfunction toAnthropicMessage(m: NormalizedMessage): unknown {\n switch (m.role) {\n case 'user': {\n const blocks = m.content.map((p) => {\n if (p.type === 'text') return { type: 'text', text: p.text };\n if (p.type === 'image') {\n if (typeof p.image === 'string' && p.image.startsWith('http')) {\n return { type: 'image', source: { type: 'url', url: p.image } };\n }\n if (typeof p.image === 'string') {\n return { type: 'image', source: { type: 'url', url: p.image } };\n }\n return {\n type: 'image',\n source: {\n type: 'base64',\n media_type: p.mimeType ?? 'image/png',\n data: uint8ToBase64(p.image as Uint8Array),\n },\n };\n }\n return p;\n });\n return { role: 'user', content: blocks };\n }\n case 'assistant': {\n const blocks = m.content.map((p) => {\n if (p.type === 'text') return { type: 'text', text: p.text };\n if (p.type === 'tool-call') {\n return { type: 'tool_use', id: p.toolCallId, name: p.toolName, input: p.args };\n }\n return p;\n });\n return { role: 'assistant', content: blocks };\n }\n case 'tool': {\n return {\n role: 'user',\n content: m.content\n .filter((r): r is Extract<typeof r, { type: 'tool-result' }> => r.type === 'tool-result')\n .map((r) => ({\n type: 'tool_result',\n tool_use_id: r.toolCallId,\n content: typeof r.result === 'string' ? r.result : JSON.stringify(r.result),\n ...(r.isError ? { is_error: true } : {}),\n })),\n };\n }\n case 'system':\n return { role: 'user', content: '' };\n }\n}\n\nfunction parseEvent(evt: SSEEvent): { type: string; [k: string]: unknown } | null {\n if (!evt.data) return null;\n try {\n return JSON.parse(evt.data) as { type: string };\n } catch {\n return null;\n }\n}\n\nfunction safeParseJSON(text: string): unknown {\n if (!text) return {};\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\nfunction mapFinishReason(reason: string | null | undefined): FinishReason {\n switch (reason) {\n case 'end_turn':\n return 'stop';\n case 'max_tokens':\n return 'length';\n case 'tool_use':\n return 'tool-calls';\n case 'stop_sequence':\n return 'stop';\n case null:\n case undefined:\n return 'unknown';\n default:\n return 'other';\n }\n}\n\ninterface AnthropicUsage {\n input_tokens?: number;\n output_tokens?: number;\n cache_read_input_tokens?: number;\n cache_creation_input_tokens?: number;\n}\n\nfunction mapUsage(u: AnthropicUsage | undefined): TokenUsage {\n if (!u) return {};\n const promptTokens =\n (u.input_tokens ?? 0) + (u.cache_read_input_tokens ?? 0) + (u.cache_creation_input_tokens ?? 0);\n const out: TokenUsage = {\n promptTokens: u.input_tokens !== undefined ? promptTokens : undefined,\n completionTokens: u.output_tokens,\n };\n if (out.promptTokens !== undefined && out.completionTokens !== undefined) {\n out.totalTokens = out.promptTokens + out.completionTokens;\n }\n if (u.cache_read_input_tokens !== undefined) out.cachedPromptTokens = u.cache_read_input_tokens;\n return out;\n}\n\nfunction mergeUsage(a: TokenUsage, b: TokenUsage): TokenUsage {\n const sum = (x?: number, y?: number) =>\n x === undefined && y === undefined ? undefined : (x ?? 0) + (y ?? 0);\n return {\n promptTokens: sum(a.promptTokens, b.promptTokens),\n completionTokens: sum(a.completionTokens, b.completionTokens),\n totalTokens: sum(a.totalTokens, b.totalTokens),\n cachedPromptTokens: sum(a.cachedPromptTokens, b.cachedPromptTokens),\n };\n}\n\nfunction uint8ToBase64(arr: Uint8Array): string {\n let s = '';\n for (let i = 0; i < arr.byteLength; i++) s += String.fromCharCode(arr[i] as number);\n return typeof btoa !== 'undefined' ? btoa(s) : Buffer.from(s, 'binary').toString('base64');\n}\n\ninterface AnthropicMessageResponse {\n content?: Array<\n { type: 'text'; text: string } | { type: 'tool_use'; id: string; name: string; input: unknown }\n >;\n stop_reason?: string;\n usage?: AnthropicUsage;\n}\n","import type { LanguageModel } from '@ziro-agent/core';\nimport {\n AnthropicMessagesModel,\n type AnthropicMessagesModelId,\n} from './anthropic-messages-model.js';\n\nexport interface AnthropicProviderOptions {\n /** Defaults to `process.env.ANTHROPIC_API_KEY`. */\n apiKey?: string;\n baseURL?: string;\n /** API version sent in `anthropic-version`. Defaults to `2023-06-01`. */\n version?: string;\n headers?: Record<string, string>;\n fetch?: typeof fetch;\n}\n\nexport interface AnthropicProvider {\n (modelId: AnthropicMessagesModelId): LanguageModel;\n messages(modelId: AnthropicMessagesModelId): LanguageModel;\n}\n\nexport function createAnthropic(options: AnthropicProviderOptions = {}): AnthropicProvider {\n const apiKey = options.apiKey ?? loadEnv('ANTHROPIC_API_KEY');\n const baseURL = options.baseURL ?? 'https://api.anthropic.com/v1';\n const version = options.version ?? '2023-06-01';\n const fetcher = options.fetch ?? globalThis.fetch;\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'anthropic-version': version,\n ...options.headers,\n };\n if (apiKey) headers['x-api-key'] = apiKey;\n\n const make = (modelId: AnthropicMessagesModelId): LanguageModel =>\n new AnthropicMessagesModel({\n modelId,\n baseURL,\n headers,\n fetcher,\n });\n\n const provider = ((modelId: AnthropicMessagesModelId) => make(modelId)) as AnthropicProvider;\n provider.messages = make;\n return provider;\n}\n\nexport const anthropic: AnthropicProvider = createAnthropic();\n\nfunction loadEnv(name: string): string | undefined {\n if (typeof process !== 'undefined' && process.env) {\n return process.env[name];\n }\n return undefined;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ziro-agent/anthropic",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Anthropic (Claude) provider for ZiroAgent SDK.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"homepage": "https://github.com/ziroagent/sdk-typescript/tree/main/packages/providers-anthropic",
|
|
@@ -26,9 +26,14 @@
|
|
|
26
26
|
"types": "./dist/index.d.ts",
|
|
27
27
|
"exports": {
|
|
28
28
|
".": {
|
|
29
|
-
"
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
"import": {
|
|
30
|
+
"types": "./dist/index.d.ts",
|
|
31
|
+
"default": "./dist/index.js"
|
|
32
|
+
},
|
|
33
|
+
"require": {
|
|
34
|
+
"types": "./dist/index.d.cts",
|
|
35
|
+
"default": "./dist/index.cjs"
|
|
36
|
+
}
|
|
32
37
|
},
|
|
33
38
|
"./package.json": "./package.json"
|
|
34
39
|
},
|
|
@@ -38,7 +43,7 @@
|
|
|
38
43
|
"LICENSE"
|
|
39
44
|
],
|
|
40
45
|
"dependencies": {
|
|
41
|
-
"@ziro-agent/core": "0.1.
|
|
46
|
+
"@ziro-agent/core": "0.1.2"
|
|
42
47
|
},
|
|
43
48
|
"devDependencies": {
|
|
44
49
|
"@arethetypeswrong/cli": "^0.18.2",
|
|
@@ -62,6 +67,6 @@
|
|
|
62
67
|
"typecheck": "tsc --noEmit",
|
|
63
68
|
"clean": "rm -rf dist .turbo *.tsbuildinfo",
|
|
64
69
|
"publint": "publint",
|
|
65
|
-
"attw": "attw --pack ."
|
|
70
|
+
"attw": "attw --pack . --profile=node16"
|
|
66
71
|
}
|
|
67
72
|
}
|