@codehz/ai 0.1.5 → 0.1.7

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.d.mts CHANGED
@@ -94,13 +94,13 @@ type AIRequest = {
94
94
  //#region src/types/response.d.ts
95
95
  type StopReason = "end_turn" | "tool_call" | "max_output_tokens" | "content_filter" | "error" | "unknown";
96
96
  type Usage = {
97
- inputTokens?: number;
98
- outputTokens?: number;
97
+ /** Provider prompt / input token count */inputTokens?: number; /** Provider completion / output token count */
98
+ outputTokens?: number; /** Reasoning tokens when provider exposes output breakdown (e.g. OpenAI Responses) */
99
99
  reasoningTokens?: number;
100
- totalTokens?: number;
101
- cachedInputTokens?: number;
102
- cacheWriteInputTokens?: number;
103
- billableInputTokens?: number;
100
+ totalTokens?: number; /** Tokens read from prompt cache (OpenAI cached_tokens, Anthropic cache_read_input_tokens) */
101
+ cachedInputTokens?: number; /** Tokens written to prompt cache (Anthropic cache_creation_input_tokens) */
102
+ cacheWriteInputTokens?: number; /** Best-effort billable input (full-rate input; excludes discounted cache reads where known) */
103
+ billableInputTokens?: number; /** Best-effort billable output (non-reasoning slice when provider gives reasoning breakdown) */
104
104
  billableOutputTokens?: number;
105
105
  };
106
106
  type BillingInfo = {
@@ -1046,5 +1046,49 @@ type SyntheticStreamOptions = {
1046
1046
  */
1047
1047
  declare function syntheticStream(options: SyntheticStreamOptions): AsyncIterable<AIStreamEvent>;
1048
1048
  //#endregion
1049
- export { type AIClient, AIError, AIMappingError, AIProviderError, type AIRequest, AIRequestError, type AIResponse, AIStreamError, type AIStreamEvent, AdapterAuxiliaryState, AdapterBase, AuxiliaryCollector, type AuxiliaryFinalizeOptions, type AuxiliaryFinalizeResult, type AuxiliaryInfo, type BackendAdapter, type BackendTrace, type BillingInfo, type BillingPostprocessHook, type BillingSource, ChatCompletionsAdapter, type ChatCompletionsAdapterOptions, type ContentBlock, type CreateAIClientOptions, type EventFactory, type EventFactoryBackend, type EventFactoryState, type FetchFn, type IncludeSettings, type InputItem, type InstructionBlock, type JsonContentBlock, type LookupResult, type MessageCompletedEvent, type MessageDeltaEvent, type MessageItem, type MessageStartedEvent, MessagesAdapter, type MessagesAdapterOptions, MockAdapter, type MockAdapterOptions, type MockAuxiliaryStep, type MockCompleteStep, type MockErrorStep, type MockHandler, type MockHandlerContext, type MockHistoryRecord, type MockInputExpectation, type MockInterruptStep, type MockMessageStep, type MockOutputStep, type MockReasoningStep, type MockRequestExpectation, type MockStaticHandler, type MockStep, type MockTextStreamOptions, type MockThrowStep, type MockToolCallStep, type MockWarningStep, type NormalizeOptions, type NormalizedRequest, OllamaAdapter, type OllamaAdapterOptions, type OpaqueItem, type OutputItem, type ReasoningCompletedEvent, type ReasoningDeltaEvent, type ReasoningItem, type ReasoningStartedEvent, type ReplayItem, type ResponseAuxiliaryEvent, type ResponseCompletedEvent, type ResponseStartedEvent, type ResponseWarningEvent, ResponsesAdapter, type ResponsesAdapterOptions, type SSEEvent, type StopReason, type StreamEventBase, type StreamResult, type SyntheticStreamOptions, type TextContentBlock, type ToolCallCompletedEvent, type ToolCallDeltaEvent, type ToolCallItem, type ToolCallStartedEvent, type ToolChoice, type ToolDefinition, type ToolResultItem, type Usage, type UsageSource, type ValidationIssue, WarningCode, aggregateEvents, assertMockRequest, assertValidRequest, blockToText, collectStream, contentBlocksToText, createAIClient, createEventFactory, emitMalformedStreamWarning, extractText, imageBlock, instructionsToText, jsonBlock, mapReasoningVisibility, mapStopReason, messageItem, metadataSourceList, normalizeRequest, opaqueBlock, opaqueItem, parseSSEEvents, reasoningItem, replayFromOutput, syntheticStream, textBlock, toolCallItem, toolResultItem, validateRequest, withMockStreaming };
1049
+ //#region src/helpers/usage-mapping.d.ts
1050
+ /** OpenAI Chat Completions `usage` */
1051
+ declare function usageFromChatCompletions(raw: {
1052
+ prompt_tokens?: number;
1053
+ completion_tokens?: number;
1054
+ total_tokens?: number;
1055
+ prompt_tokens_details?: {
1056
+ cached_tokens?: number;
1057
+ [key: string]: unknown;
1058
+ };
1059
+ completion_tokens_details?: {
1060
+ reasoning_tokens?: number;
1061
+ [key: string]: unknown;
1062
+ };
1063
+ }): Partial<Usage>;
1064
+ /** OpenAI Responses API `usage` */
1065
+ declare function usageFromOpenAIResponses(raw: {
1066
+ input_tokens?: number;
1067
+ output_tokens?: number;
1068
+ total_tokens?: number;
1069
+ input_tokens_details?: {
1070
+ cached_tokens?: number;
1071
+ [key: string]: unknown;
1072
+ };
1073
+ output_tokens_details?: {
1074
+ reasoning_tokens?: number;
1075
+ [key: string]: unknown;
1076
+ };
1077
+ [key: string]: unknown;
1078
+ }): Partial<Usage>;
1079
+ /** Anthropic Messages `usage`(message_start / message_delta) */
1080
+ declare function usageFromAnthropicMessages(raw: {
1081
+ input_tokens?: number;
1082
+ output_tokens?: number;
1083
+ cache_creation_input_tokens?: number;
1084
+ cache_read_input_tokens?: number;
1085
+ [key: string]: unknown;
1086
+ }): Partial<Usage>;
1087
+ /** Ollama 流式 chunk(无 cache / reasoning 细分时仅填基础与 billable 镜像) */
1088
+ declare function usageFromOllama(raw: {
1089
+ prompt_eval_count?: number;
1090
+ eval_count?: number;
1091
+ }): Partial<Usage>;
1092
+ //#endregion
1093
+ export { type AIClient, AIError, AIMappingError, AIProviderError, type AIRequest, AIRequestError, type AIResponse, AIStreamError, type AIStreamEvent, AdapterAuxiliaryState, AdapterBase, AuxiliaryCollector, type AuxiliaryFinalizeOptions, type AuxiliaryFinalizeResult, type AuxiliaryInfo, type BackendAdapter, type BackendTrace, type BillingInfo, type BillingPostprocessHook, type BillingSource, ChatCompletionsAdapter, type ChatCompletionsAdapterOptions, type ContentBlock, type CreateAIClientOptions, type EventFactory, type EventFactoryBackend, type EventFactoryState, type FetchFn, type IncludeSettings, type InputItem, type InstructionBlock, type JsonContentBlock, type LookupResult, type MessageCompletedEvent, type MessageDeltaEvent, type MessageItem, type MessageStartedEvent, MessagesAdapter, type MessagesAdapterOptions, MockAdapter, type MockAdapterOptions, type MockAuxiliaryStep, type MockCompleteStep, type MockErrorStep, type MockHandler, type MockHandlerContext, type MockHistoryRecord, type MockInputExpectation, type MockInterruptStep, type MockMessageStep, type MockOutputStep, type MockReasoningStep, type MockRequestExpectation, type MockStaticHandler, type MockStep, type MockTextStreamOptions, type MockThrowStep, type MockToolCallStep, type MockWarningStep, type NormalizeOptions, type NormalizedRequest, OllamaAdapter, type OllamaAdapterOptions, type OpaqueItem, type OutputItem, type ReasoningCompletedEvent, type ReasoningDeltaEvent, type ReasoningItem, type ReasoningStartedEvent, type ReplayItem, type ResponseAuxiliaryEvent, type ResponseCompletedEvent, type ResponseStartedEvent, type ResponseWarningEvent, ResponsesAdapter, type ResponsesAdapterOptions, type SSEEvent, type StopReason, type StreamEventBase, type StreamResult, type SyntheticStreamOptions, type TextContentBlock, type ToolCallCompletedEvent, type ToolCallDeltaEvent, type ToolCallItem, type ToolCallStartedEvent, type ToolChoice, type ToolDefinition, type ToolResultItem, type Usage, type UsageSource, type ValidationIssue, WarningCode, aggregateEvents, assertMockRequest, assertValidRequest, blockToText, collectStream, contentBlocksToText, createAIClient, createEventFactory, emitMalformedStreamWarning, extractText, imageBlock, instructionsToText, jsonBlock, mapReasoningVisibility, mapStopReason, messageItem, metadataSourceList, normalizeRequest, opaqueBlock, opaqueItem, parseSSEEvents, reasoningItem, replayFromOutput, syntheticStream, textBlock, toolCallItem, toolResultItem, usageFromAnthropicMessages, usageFromChatCompletions, usageFromOllama, usageFromOpenAIResponses, validateRequest, withMockStreaming };
1050
1094
  //# sourceMappingURL=index.d.mts.map
package/dist/index.mjs CHANGED
@@ -1011,6 +1011,93 @@ function mergeWarnings(...groups) {
1011
1011
  return merged.length > 0 ? merged : void 0;
1012
1012
  }
1013
1013
  //#endregion
1014
+ //#region src/helpers/usage-mapping.ts
1015
+ function num(value) {
1016
+ return typeof value === "number" && Number.isFinite(value) ? value : void 0;
1017
+ }
1018
+ function record(obj) {
1019
+ const out = {};
1020
+ for (const [key, value] of Object.entries(obj)) if (value !== void 0) out[key] = value;
1021
+ return out;
1022
+ }
1023
+ function billableFromOpenAIStyle(inputTokens, outputTokens, cachedInputTokens, reasoningTokens) {
1024
+ let billableInputTokens;
1025
+ if (inputTokens !== void 0) billableInputTokens = cachedInputTokens !== void 0 ? Math.max(0, inputTokens - cachedInputTokens) : inputTokens;
1026
+ let billableOutputTokens;
1027
+ if (outputTokens !== void 0) billableOutputTokens = reasoningTokens !== void 0 ? Math.max(0, outputTokens - reasoningTokens) : outputTokens;
1028
+ return record({
1029
+ billableInputTokens,
1030
+ billableOutputTokens
1031
+ });
1032
+ }
1033
+ /** OpenAI Chat Completions `usage` */
1034
+ function usageFromChatCompletions(raw) {
1035
+ const inputTokens = num(raw.prompt_tokens);
1036
+ const outputTokens = num(raw.completion_tokens);
1037
+ const cachedInputTokens = num(raw.prompt_tokens_details?.cached_tokens);
1038
+ const reasoningTokens = num(raw.completion_tokens_details?.reasoning_tokens);
1039
+ return record({
1040
+ inputTokens,
1041
+ outputTokens,
1042
+ totalTokens: num(raw.total_tokens) ?? (inputTokens !== void 0 && outputTokens !== void 0 ? inputTokens + outputTokens : void 0),
1043
+ cachedInputTokens,
1044
+ reasoningTokens,
1045
+ ...billableFromOpenAIStyle(inputTokens, outputTokens, cachedInputTokens, reasoningTokens)
1046
+ });
1047
+ }
1048
+ /** OpenAI Responses API `usage` */
1049
+ function usageFromOpenAIResponses(raw) {
1050
+ const inputTokens = num(raw.input_tokens);
1051
+ const outputTokens = num(raw.output_tokens);
1052
+ const cachedInputTokens = num(raw.input_tokens_details?.cached_tokens);
1053
+ const reasoningTokens = num(raw.output_tokens_details?.reasoning_tokens);
1054
+ return record({
1055
+ inputTokens,
1056
+ outputTokens,
1057
+ totalTokens: num(raw.total_tokens) ?? (inputTokens !== void 0 && outputTokens !== void 0 ? inputTokens + outputTokens : void 0),
1058
+ cachedInputTokens,
1059
+ reasoningTokens,
1060
+ ...billableFromOpenAIStyle(inputTokens, outputTokens, cachedInputTokens, reasoningTokens)
1061
+ });
1062
+ }
1063
+ /** Anthropic Messages `usage`(message_start / message_delta) */
1064
+ function usageFromAnthropicMessages(raw) {
1065
+ const inputTokens = num(raw.input_tokens);
1066
+ const outputTokens = num(raw.output_tokens);
1067
+ const cacheWriteInputTokens = num(raw.cache_creation_input_tokens);
1068
+ const cachedInputTokens = num(raw.cache_read_input_tokens);
1069
+ const inputParts = [
1070
+ inputTokens,
1071
+ cacheWriteInputTokens,
1072
+ cachedInputTokens
1073
+ ].filter((n) => n !== void 0);
1074
+ const summedInput = inputParts.length > 0 ? inputParts.reduce((sum, n) => sum + n, 0) : void 0;
1075
+ const totalTokens = summedInput !== void 0 && outputTokens !== void 0 ? summedInput + outputTokens : void 0;
1076
+ let billableInputTokens;
1077
+ if (inputTokens !== void 0 || cacheWriteInputTokens !== void 0) billableInputTokens = (inputTokens ?? 0) + (cacheWriteInputTokens ?? 0);
1078
+ return record({
1079
+ inputTokens,
1080
+ outputTokens,
1081
+ totalTokens,
1082
+ cachedInputTokens,
1083
+ cacheWriteInputTokens,
1084
+ billableInputTokens,
1085
+ billableOutputTokens: outputTokens
1086
+ });
1087
+ }
1088
+ /** Ollama 流式 chunk(无 cache / reasoning 细分时仅填基础与 billable 镜像) */
1089
+ function usageFromOllama(raw) {
1090
+ const inputTokens = num(raw.prompt_eval_count);
1091
+ const outputTokens = num(raw.eval_count);
1092
+ return record({
1093
+ inputTokens,
1094
+ outputTokens,
1095
+ totalTokens: inputTokens !== void 0 && outputTokens !== void 0 ? inputTokens + outputTokens : void 0,
1096
+ billableInputTokens: inputTokens,
1097
+ billableOutputTokens: outputTokens
1098
+ });
1099
+ }
1100
+ //#endregion
1014
1101
  //#region src/helpers/sse-parser.ts
1015
1102
  /**
1016
1103
  * 将 SSE 文本块解析为事件数组。
@@ -1313,11 +1400,7 @@ var ResponsesAdapter = class extends AdapterBase {
1313
1400
  let rawResponseId;
1314
1401
  if (completedResponse) {
1315
1402
  rawResponseId = completedResponse.id;
1316
- if (completedResponse.usage) auxiliary.recordUsage({
1317
- inputTokens: completedResponse.usage.input_tokens,
1318
- outputTokens: completedResponse.usage.output_tokens,
1319
- totalTokens: completedResponse.usage.total_tokens
1320
- }, "final", completedResponse.usage);
1403
+ if (completedResponse.usage) auxiliary.recordUsage(usageFromOpenAIResponses(completedResponse.usage), "final", completedResponse.usage);
1321
1404
  }
1322
1405
  const replay = [...replayFromOutput(output)];
1323
1406
  if (completedResponse?.id) replay.push(opaqueItem("responses", "replay", { id: completedResponse.id }));
@@ -1456,78 +1539,86 @@ var MessagesAdapter = class extends AdapterBase {
1456
1539
  buildRequest(request) {
1457
1540
  const messages = [];
1458
1541
  let systemPrompt;
1542
+ let pendingToolResultMessage;
1459
1543
  if (request.instructions) systemPrompt = instructionsToMessagesText(request.instructions);
1460
- for (const item of request.input) switch (item.type) {
1461
- case "message": {
1462
- const role = item.role === "user" ? "user" : "assistant";
1463
- const supportedContent = ensureMessagesTextBlocks(item.content, `input message (${item.role}) content`);
1464
- if (supportedContent.length === 1 && supportedContent[0]?.type === "text") messages.push({
1465
- role,
1466
- content: supportedContent[0].text
1467
- });
1468
- else messages.push({
1469
- role,
1470
- content: supportedContent.map(canonicalToMessagesBlock)
1471
- });
1472
- break;
1473
- }
1474
- case "tool_call": {
1475
- const lastMsg = messages[messages.length - 1];
1476
- const toolBlock = {
1477
- type: "tool_use",
1478
- id: item.id,
1479
- name: item.name,
1480
- input: item.argumentsJson ?? parseToolUseInput(item.argumentsText)
1481
- };
1482
- if (lastMsg && lastMsg.role === "assistant" && typeof lastMsg.content !== "string") lastMsg.content.push(toolBlock);
1483
- else messages.push({
1484
- role: "assistant",
1485
- content: [toolBlock]
1486
- });
1487
- break;
1488
- }
1489
- case "tool_result": {
1490
- assertMessagesToolResultOutcome(item.outcome);
1491
- const content = ensureMessagesTextBlocks(item.content, `tool_result ${item.callId} content`).map(blockToText).join("\n");
1492
- const block = {
1493
- type: "tool_result",
1494
- tool_use_id: item.callId,
1495
- content,
1496
- is_error: item.outcome === "error"
1497
- };
1498
- messages.push({
1499
- role: "user",
1500
- content: [block]
1501
- });
1502
- break;
1503
- }
1504
- case "reasoning": {
1505
- const block = {
1506
- type: "thinking",
1507
- thinking: contentBlocksToText(ensureMessagesReasoningBlocks(item.content, "reasoning content"))
1508
- };
1509
- const lastMsg = messages[messages.length - 1];
1510
- if (lastMsg && lastMsg.role === "assistant" && typeof lastMsg.content !== "string") lastMsg.content.push(block);
1511
- else messages.push({
1512
- role: "assistant",
1513
- content: [block]
1514
- });
1515
- break;
1516
- }
1517
- case "opaque":
1518
- if (item.purpose === "replay" && typeof item.payload === "object" && item.payload !== null) {
1519
- const payload = item.payload;
1520
- if (payload.role === "assistant" && Array.isArray(payload.content)) {
1521
- if (payload.content.every((b) => typeof b === "object" && b !== null && "type" in b && (b.type === "text" || b.type === "thinking" || b.type === "redacted_thinking" || b.type === "tool_use" || b.type === "tool_result"))) {
1522
- rollbackTrailingAssistantMessages$2(messages);
1523
- messages.push({
1524
- role: "assistant",
1525
- content: payload.content
1526
- });
1527
- }
1544
+ for (const item of request.input) {
1545
+ if (item.type !== "tool_result") pendingToolResultMessage = void 0;
1546
+ switch (item.type) {
1547
+ case "message": {
1548
+ const role = item.role === "user" ? "user" : "assistant";
1549
+ const supportedContent = ensureMessagesTextBlocks(item.content, `input message (${item.role}) content`);
1550
+ if (supportedContent.length === 1 && supportedContent[0]?.type === "text") messages.push({
1551
+ role,
1552
+ content: supportedContent[0].text
1553
+ });
1554
+ else messages.push({
1555
+ role,
1556
+ content: supportedContent.map(canonicalToMessagesBlock)
1557
+ });
1558
+ break;
1559
+ }
1560
+ case "tool_call": {
1561
+ const lastMsg = messages[messages.length - 1];
1562
+ const toolBlock = {
1563
+ type: "tool_use",
1564
+ id: item.id,
1565
+ name: item.name,
1566
+ input: item.argumentsJson ?? parseToolUseInput(item.argumentsText)
1567
+ };
1568
+ if (lastMsg && lastMsg.role === "assistant" && typeof lastMsg.content !== "string") lastMsg.content.push(toolBlock);
1569
+ else messages.push({
1570
+ role: "assistant",
1571
+ content: [toolBlock]
1572
+ });
1573
+ break;
1574
+ }
1575
+ case "tool_result": {
1576
+ assertMessagesToolResultOutcome(item.outcome);
1577
+ const content = ensureMessagesTextBlocks(item.content, `tool_result ${item.callId} content`).map(blockToText).join("\n");
1578
+ const block = {
1579
+ type: "tool_result",
1580
+ tool_use_id: item.callId,
1581
+ content,
1582
+ is_error: item.outcome === "error"
1583
+ };
1584
+ if (pendingToolResultMessage && typeof pendingToolResultMessage.content !== "string") pendingToolResultMessage.content.push(block);
1585
+ else {
1586
+ pendingToolResultMessage = {
1587
+ role: "user",
1588
+ content: [block]
1589
+ };
1590
+ messages.push(pendingToolResultMessage);
1528
1591
  }
1592
+ break;
1529
1593
  }
1530
- break;
1594
+ case "reasoning": {
1595
+ const block = {
1596
+ type: "thinking",
1597
+ thinking: contentBlocksToText(ensureMessagesReasoningBlocks(item.content, "reasoning content"))
1598
+ };
1599
+ const lastMsg = messages[messages.length - 1];
1600
+ if (lastMsg && lastMsg.role === "assistant" && typeof lastMsg.content !== "string") lastMsg.content.push(block);
1601
+ else messages.push({
1602
+ role: "assistant",
1603
+ content: [block]
1604
+ });
1605
+ break;
1606
+ }
1607
+ case "opaque":
1608
+ if (item.purpose === "replay" && typeof item.payload === "object" && item.payload !== null) {
1609
+ const payload = item.payload;
1610
+ if (payload.role === "assistant" && Array.isArray(payload.content)) {
1611
+ if (payload.content.every((b) => typeof b === "object" && b !== null && "type" in b && (b.type === "text" || b.type === "thinking" || b.type === "redacted_thinking" || b.type === "tool_use" || b.type === "tool_result"))) {
1612
+ rollbackTrailingAssistantMessages$2(messages);
1613
+ messages.push({
1614
+ role: "assistant",
1615
+ content: payload.content
1616
+ });
1617
+ }
1618
+ }
1619
+ }
1620
+ break;
1621
+ }
1531
1622
  }
1532
1623
  const body = {
1533
1624
  model: request.model,
@@ -1728,11 +1819,7 @@ var MessagesAdapter = class extends AdapterBase {
1728
1819
  stopReason = sseEvent.data.delta.stop_reason;
1729
1820
  stopSequence = sseEvent.data.delta.stop_sequence;
1730
1821
  const u = sseEvent.data.usage;
1731
- if (u) auxiliary.recordUsage({
1732
- inputTokens: u.input_tokens,
1733
- outputTokens: u.output_tokens,
1734
- totalTokens: u.input_tokens + u.output_tokens
1735
- }, "stream", u);
1822
+ if (u) auxiliary.recordUsage(usageFromAnthropicMessages(u), "stream", u);
1736
1823
  continue;
1737
1824
  }
1738
1825
  case "message_stop": break;
@@ -2067,11 +2154,7 @@ var ChatCompletionsAdapter = class extends AdapterBase {
2067
2154
  if (malformedWarning) yield malformedWarning;
2068
2155
  for (const chunk of chunks) {
2069
2156
  responseId = chunk.id;
2070
- if (chunk.usage) auxiliary.recordUsage({
2071
- inputTokens: chunk.usage.prompt_tokens,
2072
- outputTokens: chunk.usage.completion_tokens,
2073
- totalTokens: chunk.usage.total_tokens
2074
- }, "final", chunk.usage);
2157
+ if (chunk.usage) auxiliary.recordUsage(usageFromChatCompletions(chunk.usage), "final", chunk.usage);
2075
2158
  for (const choice of chunk.choices) {
2076
2159
  if (choice.index !== 0) continue;
2077
2160
  const delta = choice.delta;
@@ -2441,11 +2524,10 @@ var OllamaAdapter = class extends AdapterBase {
2441
2524
  yield factory.toolCallCompleted(toolCall);
2442
2525
  output.push(toolCall);
2443
2526
  }
2444
- if (request.include?.usage !== "off" && (chunk.prompt_eval_count !== void 0 || chunk.eval_count !== void 0)) auxiliary.recordUsage({
2445
- inputTokens: chunk.prompt_eval_count,
2446
- outputTokens: chunk.eval_count,
2447
- totalTokens: chunk.prompt_eval_count !== void 0 && chunk.eval_count !== void 0 ? chunk.prompt_eval_count + chunk.eval_count : void 0
2448
- }, "final", {
2527
+ if (request.include?.usage !== "off" && (chunk.prompt_eval_count !== void 0 || chunk.eval_count !== void 0)) auxiliary.recordUsage(usageFromOllama({
2528
+ prompt_eval_count: chunk.prompt_eval_count,
2529
+ eval_count: chunk.eval_count
2530
+ }), "final", {
2449
2531
  prompt_eval_count: chunk.prompt_eval_count,
2450
2532
  eval_count: chunk.eval_count
2451
2533
  });
@@ -3010,6 +3092,6 @@ function* emitToolCallEvents(item, factory) {
3010
3092
  yield factory.toolCallCompleted(item);
3011
3093
  }
3012
3094
  //#endregion
3013
- export { AIError, AIMappingError, AIProviderError, AIRequestError, AIStreamError, AdapterAuxiliaryState, AdapterBase, AuxiliaryCollector, ChatCompletionsAdapter, MessagesAdapter, MockAdapter, OllamaAdapter, ResponsesAdapter, WarningCode, aggregateEvents, assertMockRequest, assertValidRequest, blockToText, collectStream, contentBlocksToText, createAIClient, createEventFactory, emitMalformedStreamWarning, extractText, imageBlock, instructionsToText, jsonBlock, mapReasoningVisibility, mapStopReason, messageItem, metadataSourceList, normalizeRequest, opaqueBlock, opaqueItem, parseSSEEvents, reasoningItem, replayFromOutput, syntheticStream, textBlock, toolCallItem, toolResultItem, validateRequest, withMockStreaming };
3095
+ export { AIError, AIMappingError, AIProviderError, AIRequestError, AIStreamError, AdapterAuxiliaryState, AdapterBase, AuxiliaryCollector, ChatCompletionsAdapter, MessagesAdapter, MockAdapter, OllamaAdapter, ResponsesAdapter, WarningCode, aggregateEvents, assertMockRequest, assertValidRequest, blockToText, collectStream, contentBlocksToText, createAIClient, createEventFactory, emitMalformedStreamWarning, extractText, imageBlock, instructionsToText, jsonBlock, mapReasoningVisibility, mapStopReason, messageItem, metadataSourceList, normalizeRequest, opaqueBlock, opaqueItem, parseSSEEvents, reasoningItem, replayFromOutput, syntheticStream, textBlock, toolCallItem, toolResultItem, usageFromAnthropicMessages, usageFromChatCompletions, usageFromOllama, usageFromOpenAIResponses, validateRequest, withMockStreaming };
3014
3096
 
3015
3097
  //# sourceMappingURL=index.mjs.map