{"version":3,"file":"stream.cjs","names":["AIMessage"],"sources":["../../src/language_models/stream.ts"],"sourcesContent":["/**\n * Typed stream classes for chat model streaming.\n *\n * @module\n */\n\nimport { AIMessage } from \"../messages/ai.js\";\nimport type { ContentBlock } from \"../messages/content/index.js\";\nimport type { UsageMetadata } from \"../messages/metadata.js\";\nimport type { ChatModelStreamEvent, ContentBlockDelta } from \"./event.js\";\n\ntype UsageMetadataLike = Partial<UsageMetadata>;\n\n/**\n * A buffer that caches emitted events for replay.\n *\n * Multiple consumers can independently iterate the same buffer —\n * each gets its own cursor. Events are never consumed or removed.\n *\n * @internal\n */\nclass ReplayBuffer {\n  private events: ChatModelStreamEvent[] = [];\n  private finished = false;\n  private waiters: Array<() => void> = [];\n  private error: Error | null = null;\n\n  push(event: ChatModelStreamEvent): void {\n    this.events.push(event);\n    const toWake = this.waiters.splice(0);\n    for (const waiter of toWake) {\n      waiter();\n    }\n  }\n\n  finish(): void {\n    this.finished = true;\n    const toWake = this.waiters.splice(0);\n    for (const waiter of toWake) {\n      waiter();\n    }\n  }\n\n  setError(err: Error): void {\n    this.error = err;\n    this.finished = true;\n    const toWake = this.waiters.splice(0);\n    for (const waiter of toWake) {\n      waiter();\n    }\n  }\n\n  async *iterate(): AsyncGenerator<ChatModelStreamEvent> {\n    if (this.finished) {\n      if (this.error) throw this.error;\n      yield* this.events;\n      return;\n    }\n\n    let cursor = 0;\n    while (true) {\n      while (cursor < this.events.length) {\n        yield this.events[cursor]!;\n        cursor++;\n      }\n      if (this.finished) {\n        if (this.error) throw this.error;\n        return;\n      }\n      await new Promise<void>((resolve) => {\n        if (cursor < this.events.length || this.finished) {\n          resolve();\n          return;\n        }\n        this.waiters.push(resolve);\n      });\n    }\n  }\n}\n\n/**\n * Apply a typed delta to an accumulated content block.\n *\n * - `text-delta` → append text\n * - `reasoning-delta` → append reasoning text\n * - `data-delta` → append encoded data to `data`\n * - `block-delta` → shallow merge fields\n *\n * @internal\n */\nfunction applyDelta(\n  block: ContentBlock,\n  delta: ContentBlockDelta\n): ContentBlock {\n  switch (delta.type) {\n    case \"text-delta\":\n      if (block.type === \"text\") {\n        return {\n          ...block,\n          text: (block.text ?? \"\") + delta.text,\n        };\n      }\n      return block;\n    case \"reasoning-delta\":\n      if (block.type === \"thinking\") {\n        return {\n          ...block,\n          thinking: (block.thinking ?? \"\") + delta.reasoning,\n        };\n      }\n      if (block.type === \"reasoning\") {\n        return {\n          ...block,\n          reasoning: (block.reasoning ?? \"\") + delta.reasoning,\n        };\n      }\n      return block;\n    case \"data-delta\":\n      return {\n        ...block,\n        data: (block.data ?? \"\") + delta.data,\n      };\n    case \"block-delta\":\n      return { ...block, ...delta.fields } as ContentBlock;\n    default:\n      throw new Error(`Unknown delta type: ${JSON.stringify(delta)}`);\n  }\n}\n\n/**\n * Returns the typed delta carried by a content-block delta event.\n *\n * Stream protocol compliant language models store incremental updates in\n * `event.delta`, e.g. `{ type: \"text-delta\", text: \"hello\" }`. Some models and\n * adapters still emit the older content-shaped form on `event.content`, e.g.\n * `{ type: \"text\", text: \"hello\" }`, which predates explicit delta event\n * variants.\n *\n * Keep accepting that content-shaped form here so {@link ChatModelStream}\n * remains a tolerant consumer while producers migrate to protocol compliant\n * typed deltas.\n *\n * @internal\n */\nfunction getEventDelta(\n  event: ChatModelStreamEvent\n): ContentBlockDelta | undefined {\n  if (event.event !== \"content-block-delta\") return undefined;\n  if (\"delta\" in event && event.delta) return event.delta;\n\n  const content = (event as { content?: unknown }).content;\n  if (content == null || typeof content !== \"object\") return undefined;\n  const block = content as { type?: string } & Record<string, unknown>;\n  if (block.type === \"text\" && typeof block.text === \"string\") {\n    return { type: \"text-delta\", text: block.text };\n  }\n  if (block.type === \"reasoning\" && typeof block.reasoning === \"string\") {\n    return { type: \"reasoning-delta\", reasoning: block.reasoning };\n  }\n  if (block.type === \"thinking\" && typeof block.thinking === \"string\") {\n    return { type: \"reasoning-delta\", reasoning: block.thinking };\n  }\n  if (typeof block.data === \"string\") {\n    return { type: \"data-delta\", data: block.data, encoding: \"base64\" };\n  }\n  if (typeof block.type === \"string\") {\n    return { type: \"block-delta\", fields: { ...block, type: block.type } };\n  }\n  return undefined;\n}\n\nfunction getReasoningDelta(content: unknown): string | undefined {\n  if (content == null || typeof content !== \"object\") return undefined;\n  const block = content as {\n    type?: string;\n    reasoning?: unknown;\n    thinking?: unknown;\n  };\n  if (block.type === \"reasoning\" && typeof block.reasoning === \"string\") {\n    return block.reasoning;\n  }\n  if (block.type === \"thinking\" && typeof block.thinking === \"string\") {\n    return block.thinking;\n  }\n  return undefined;\n}\n\nfunction isReasoningContent(content: unknown): boolean {\n  if (content == null || typeof content !== \"object\") return false;\n  const type = (content as { type?: unknown }).type;\n  return type === \"reasoning\" || type === \"thinking\";\n}\n\n/**\n * Normalize protocol-compatible partial usage into Core's concrete usage shape.\n *\n * Some stream sources emit usage snapshots without every aggregate token field.\n * Keep the stream event input permissive, then normalize at read time so\n * high-level Core consumers always receive a complete {@link UsageMetadata}.\n */\nfunction normalizeUsage(\n  usage: UsageMetadataLike | undefined\n): UsageMetadata | undefined {\n  if (!usage) return undefined;\n  return {\n    ...usage,\n    input_tokens: usage.input_tokens ?? 0,\n    output_tokens: usage.output_tokens ?? 0,\n    total_tokens: usage.total_tokens ?? 0,\n  };\n}\n\nfunction parseToolArgs(value: unknown): Record<string, unknown> {\n  if (value != null && typeof value === \"object\" && !Array.isArray(value)) {\n    return value as Record<string, unknown>;\n  }\n  if (typeof value !== \"string\" || value.length === 0) return {};\n  try {\n    const parsed = JSON.parse(value);\n    return parsed != null &&\n      typeof parsed === \"object\" &&\n      !Array.isArray(parsed)\n      ? (parsed as Record<string, unknown>)\n      : {};\n  } catch {\n    return {};\n  }\n}\n\nfunction standardizeToolBlock(block: ContentBlock): ContentBlock {\n  const record = block as Record<string, unknown>;\n  if (block.type === \"tool_call\") return block;\n  if (\n    block.type !== \"tool_call_chunk\" &&\n    block.type !== \"tool_use\" &&\n    block.type !== \"input_json_delta\"\n  ) {\n    return block;\n  }\n\n  const name = typeof record.name === \"string\" ? record.name : undefined;\n  if (name == null) return block;\n\n  const args = record.args ?? record.input;\n  return {\n    ...record,\n    type: \"tool_call\",\n    name,\n    args: parseToolArgs(args),\n  } as ContentBlock;\n}\n\n// ─── Sub-Stream: Text ───────────────────────────────────────────\n\n/**\n * Typed stream for text content.\n *\n * - **Iterate**: yields incremental text deltas.\n * - **Await**: resolves to the complete concatenated text.\n * - **`.full`**: yields the running accumulated text after each delta.\n */\nexport class TextContentStream\n  implements AsyncIterable<string>, PromiseLike<string>\n{\n  /** @internal */\n  private _buffer: ReplayBuffer;\n\n  /** @internal */\n  constructor(buffer: ReplayBuffer) {\n    this._buffer = buffer;\n  }\n\n  /** Yields the accumulated text so far after each delta. */\n  get full(): AsyncIterable<string> {\n    const buffer = this._buffer;\n    return {\n      async *[Symbol.asyncIterator]() {\n        let accumulated = \"\";\n        for await (const event of buffer.iterate()) {\n          const delta = getEventDelta(event);\n          if (delta?.type === \"text-delta\") {\n            accumulated += delta.text;\n            yield accumulated;\n          }\n        }\n      },\n    };\n  }\n\n  /** Yields incremental text deltas. */\n  [Symbol.asyncIterator](): AsyncIterator<string> {\n    const buffer = this._buffer;\n    async function* gen() {\n      for await (const event of buffer.iterate()) {\n        const delta = getEventDelta(event);\n        if (delta?.type === \"text-delta\") {\n          yield delta.text;\n        }\n      }\n    }\n    return gen();\n  }\n\n  then<TResult1 = string, TResult2 = never>(\n    onfulfilled?: ((value: string) => TResult1 | PromiseLike<TResult1>) | null,\n    onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n  ): PromiseLike<TResult1 | TResult2> {\n    const promise = (async () => {\n      let text = \"\";\n      for await (const delta of this) {\n        text += delta;\n      }\n      return text;\n    })();\n    return promise.then(onfulfilled, onrejected);\n  }\n}\n\n// ─── Sub-Stream: Tool Calls ─────────────────────────────────────\n\n/**\n * Typed stream for tool calls.\n *\n * - **Iterate**: yields individual `ToolCall` objects as each completes.\n * - **Await**: resolves to the full array.\n * - **`.full`**: yields the accumulated array after each new tool call.\n */\nexport class ToolCallsStream\n  implements\n    AsyncIterable<ContentBlock.Tools.ToolCall>,\n    PromiseLike<Array<ContentBlock.Tools.ToolCall>>\n{\n  /** @internal */\n  private _buffer: ReplayBuffer;\n\n  /** @internal */\n  constructor(buffer: ReplayBuffer) {\n    this._buffer = buffer;\n  }\n\n  get full(): AsyncIterable<Array<ContentBlock.Tools.ToolCall>> {\n    const buffer = this._buffer;\n    return {\n      async *[Symbol.asyncIterator]() {\n        const calls: Array<ContentBlock.Tools.ToolCall> = [];\n        for await (const event of buffer.iterate()) {\n          if (\n            event.event === \"content-block-finish\" &&\n            event.content.type === \"tool_call\"\n          ) {\n            calls.push(event.content as ContentBlock.Tools.ToolCall);\n            yield [...calls];\n          }\n        }\n      },\n    };\n  }\n\n  [Symbol.asyncIterator](): AsyncIterator<ContentBlock.Tools.ToolCall> {\n    const buffer = this._buffer;\n    async function* gen() {\n      for await (const event of buffer.iterate()) {\n        if (\n          event.event === \"content-block-finish\" &&\n          event.content.type === \"tool_call\"\n        ) {\n          yield event.content as ContentBlock.Tools.ToolCall;\n        }\n      }\n    }\n    return gen();\n  }\n\n  then<TResult1 = Array<ContentBlock.Tools.ToolCall>, TResult2 = never>(\n    onfulfilled?:\n      | ((\n          value: Array<ContentBlock.Tools.ToolCall>\n        ) => TResult1 | PromiseLike<TResult1>)\n      | null,\n    onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n  ): PromiseLike<TResult1 | TResult2> {\n    const promise = (async () => {\n      const calls: Array<ContentBlock.Tools.ToolCall> = [];\n      for await (const call of this) {\n        calls.push(call);\n      }\n      return calls;\n    })();\n    return promise.then(onfulfilled, onrejected);\n  }\n}\n\n// ─── Sub-Stream: Reasoning ──────────────────────────────────────\n\n/**\n * Typed stream for reasoning content (chain-of-thought).\n * Same interface as {@link TextContentStream} but for reasoning blocks.\n */\nexport class ReasoningContentStream\n  implements AsyncIterable<string>, PromiseLike<string>\n{\n  /** @internal */\n  private _buffer: ReplayBuffer;\n\n  /** @internal */\n  constructor(buffer: ReplayBuffer) {\n    this._buffer = buffer;\n  }\n\n  get full(): AsyncIterable<string> {\n    const buffer = this._buffer;\n    return {\n      async *[Symbol.asyncIterator]() {\n        let accumulated = \"\";\n        let seenReasoning = false;\n        for await (const event of buffer.iterate()) {\n          if (event.event === \"content-block-start\") {\n            if (!isReasoningContent(event.content)) {\n              if (seenReasoning) return;\n              continue;\n            }\n            seenReasoning = true;\n            const delta = getReasoningDelta(event.content);\n            if (delta == null || delta.length === 0) continue;\n            accumulated += delta;\n            yield accumulated;\n          } else if (event.event === \"content-block-delta\") {\n            const eventDelta = getEventDelta(event);\n            if (eventDelta?.type !== \"reasoning-delta\") continue;\n            seenReasoning = true;\n            const delta = eventDelta.reasoning;\n            if (delta == null || delta.length === 0) continue;\n            accumulated += delta;\n            yield accumulated;\n          } else if (\n            event.event === \"content-block-finish\" &&\n            isReasoningContent(event.content)\n          ) {\n            return;\n          } else if (event.event === \"message-finish\") {\n            return;\n          }\n        }\n      },\n    };\n  }\n\n  [Symbol.asyncIterator](): AsyncIterator<string> {\n    const buffer = this._buffer;\n    async function* gen() {\n      let seenReasoning = false;\n      for await (const event of buffer.iterate()) {\n        if (event.event === \"content-block-start\") {\n          if (!isReasoningContent(event.content)) {\n            if (seenReasoning) return;\n            continue;\n          }\n          seenReasoning = true;\n          const delta = getReasoningDelta(event.content);\n          if (delta != null && delta.length > 0) yield delta;\n        } else if (event.event === \"content-block-delta\") {\n          const eventDelta = getEventDelta(event);\n          if (eventDelta?.type !== \"reasoning-delta\") continue;\n          seenReasoning = true;\n          const delta = eventDelta.reasoning;\n          if (delta != null && delta.length > 0) yield delta;\n        } else if (\n          event.event === \"content-block-finish\" &&\n          isReasoningContent(event.content)\n        ) {\n          return;\n        } else if (event.event === \"message-finish\") {\n          return;\n        }\n      }\n    }\n    return gen();\n  }\n\n  then<TResult1 = string, TResult2 = never>(\n    onfulfilled?: ((value: string) => TResult1 | PromiseLike<TResult1>) | null,\n    onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n  ): PromiseLike<TResult1 | TResult2> {\n    const promise = (async () => {\n      let text = \"\";\n      for await (const delta of this) {\n        text += delta;\n      }\n      return text;\n    })();\n    return promise.then(onfulfilled, onrejected);\n  }\n}\n\n// ─── Sub-Stream: Usage ──────────────────────────────────────────\n\n/**\n * Typed stream for usage metadata.\n */\nexport class UsageMetadataStream\n  implements\n    AsyncIterable<UsageMetadata>,\n    PromiseLike<UsageMetadata | undefined>\n{\n  /** @internal */\n  private _buffer: ReplayBuffer;\n\n  /** @internal */\n  constructor(buffer: ReplayBuffer) {\n    this._buffer = buffer;\n  }\n\n  [Symbol.asyncIterator](): AsyncIterator<UsageMetadata> {\n    const buffer = this._buffer;\n    async function* gen() {\n      for await (const event of buffer.iterate()) {\n        if (event.event === \"usage\") {\n          const usage = normalizeUsage(event.usage);\n          if (usage) yield usage;\n        } else if (event.event === \"message-start\" && event.usage) {\n          const usage = normalizeUsage(event.usage);\n          if (usage) yield usage;\n        } else if (event.event === \"message-finish\" && event.usage) {\n          const usage = normalizeUsage(event.usage);\n          if (usage) yield usage;\n        }\n      }\n    }\n    return gen();\n  }\n\n  then<TResult1 = UsageMetadata | undefined, TResult2 = never>(\n    onfulfilled?:\n      | ((value: UsageMetadata | undefined) => TResult1 | PromiseLike<TResult1>)\n      | null,\n    onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n  ): PromiseLike<TResult1 | TResult2> {\n    const promise = (async () => {\n      let latest: UsageMetadata | undefined;\n      for await (const usage of this) {\n        latest = usage;\n      }\n      return latest;\n    })();\n    return promise.then(onfulfilled, onrejected);\n  }\n}\n\n// ─── ChatModelStream ────────────────────────────────────────────\n\n/**\n * The main stream object returned by chat model streaming.\n *\n * Implements `AsyncIterable<ChatModelStreamEvent>` for raw event access\n * and `PromiseLike<AIMessage>` for simple `await` usage.\n */\nexport class ChatModelStream\n  implements AsyncIterable<ChatModelStreamEvent>, PromiseLike<AIMessage>\n{\n  /** @internal */\n  private _buffer: ReplayBuffer;\n\n  /** @internal */\n  constructor(source: AsyncIterable<ChatModelStreamEvent>) {\n    this._buffer = new ReplayBuffer();\n    this._consume(source);\n  }\n\n  /** @internal */\n  private async _consume(\n    source: AsyncIterable<ChatModelStreamEvent>\n  ): Promise<void> {\n    try {\n      for await (const event of source) {\n        this._buffer.push(event);\n      }\n      this._buffer.finish();\n    } catch (err) {\n      this._buffer.setError(\n        err instanceof Error ? err : new Error(String(err))\n      );\n    }\n  }\n\n  [Symbol.asyncIterator](): AsyncIterator<ChatModelStreamEvent> {\n    return this._buffer.iterate();\n  }\n\n  get text(): TextContentStream {\n    return new TextContentStream(this._buffer);\n  }\n\n  get toolCalls(): ToolCallsStream {\n    return new ToolCallsStream(this._buffer);\n  }\n\n  get reasoning(): ReasoningContentStream {\n    return new ReasoningContentStream(this._buffer);\n  }\n\n  get usage(): UsageMetadataStream {\n    return new UsageMetadataStream(this._buffer);\n  }\n\n  get output(): PromiseLike<AIMessage> {\n    return this._assembleMessage();\n  }\n\n  then<TResult1 = AIMessage, TResult2 = never>(\n    onfulfilled?:\n      | ((value: AIMessage) => TResult1 | PromiseLike<TResult1>)\n      | null,\n    onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n  ): PromiseLike<TResult1 | TResult2> {\n    return this._assembleMessage().then(onfulfilled, onrejected);\n  }\n\n  /** @internal */\n  private async _assembleMessage(): Promise<AIMessage> {\n    const contentBlocks: Array<ContentBlock | undefined> = [];\n    let id: string | undefined;\n    let usage: UsageMetadata | undefined;\n    let metadata: Record<string, unknown> = {};\n    let finishReason: string | undefined;\n\n    for await (const event of this._buffer.iterate()) {\n      switch (event.event) {\n        case \"message-start\":\n          id = event.id ?? id;\n          if (event.usage) usage = normalizeUsage(event.usage);\n          break;\n\n        case \"content-block-start\":\n          contentBlocks[event.index] = event.content;\n          break;\n\n        case \"content-block-delta\": {\n          const current = contentBlocks[event.index];\n          const delta = getEventDelta(event);\n          if (current) {\n            if (delta) contentBlocks[event.index] = applyDelta(current, delta);\n          }\n          break;\n        }\n\n        case \"content-block-finish\":\n          contentBlocks[event.index] = event.content;\n          break;\n\n        case \"usage\":\n          usage = normalizeUsage(event.usage);\n          break;\n\n        case \"message-finish\":\n          finishReason = event.reason;\n          if (event.usage) usage = normalizeUsage(event.usage);\n          if (event.responseMetadata) {\n            metadata = {\n              ...metadata,\n              ...event.responseMetadata,\n            };\n          }\n          break;\n\n        default:\n          break;\n      }\n    }\n\n    const filteredBlocks = contentBlocks\n      .filter((b): b is ContentBlock => b != null)\n      .map(standardizeToolBlock);\n\n    return new AIMessage({\n      id,\n      content: filteredBlocks,\n      usage_metadata: usage,\n      response_metadata: {\n        ...metadata,\n        ...(finishReason ? { finish_reason: finishReason } : {}),\n        output_version: \"v1\" as const,\n      },\n    });\n  }\n}\n"],"mappings":"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"}