diff --git a/.env.example b/.env.example index a7c0fa0..134fc8c 100644 --- a/.env.example +++ b/.env.example @@ -4,3 +4,9 @@ MOLTO_LOG_LEVEL_STDERR=INFO # External API keys ANTHROPIC_API_KEY= OPENAI_API_KEY= +AWS_BEARER_TOKEN_BEDROCK= +# Alternatively, replace the preceding line with BEDROCK_API_KEY=. +FIREWORKS_API_KEY= +GEMINI_API_KEY= +OPENROUTER_API_KEY= +TOGETHER_AI_API_KEY= diff --git a/.prettierignore b/.prettierignore index 2ca0a38..755d8f7 100644 --- a/.prettierignore +++ b/.prettierignore @@ -4,6 +4,8 @@ thumbs.db # Cassettes tests/cassettes/**/*.yaml +# Preserve generated provenance alongside unchanged original capture bytes. +tests/cassettes/provider_recordings/**/manifest.json # Internal references, dependencies, temporary folders & files .env diff --git a/docs/README.md b/docs/README.md index df8c7a9..eecdc41 100644 --- a/docs/README.md +++ b/docs/README.md @@ -83,6 +83,8 @@ Four independent choices define a route: | `provider` | Selects the serving implementation and its immutable capability profile. | | `base_url` | Selects only the HTTP destination. | +See [hosted provider compatibility](provider-compatibility.md) for provider keys, exact destinations, history constraints, and the recorded/matched/synthetic evidence matrix. + Molto never infers provider behavior from a hostname. When `provider` is omitted, the endpoint supplies a convenience default: OpenAI for Responses and Chat Completions, and Anthropic for Messages. An explicit provider overrides that default without changing the endpoint or base URL. Provider capabilities matter even when two implementations expose the same schema. For example, Chat Completions `reasoning_content` and Messages `thinking_delta` do not label their text as raw reasoning or a summary. The provider profile supplies that interpretation: OpenAI and Anthropic profiles classify it as a summary, while vLLM classifies it as raw reasoning. @@ -232,7 +234,7 @@ Responses events label those representations explicitly and must agree with the A Responses reasoning lifecycle must contain raw reasoning without a summary or signature, a summary accompanied by a signature without raw reasoning, or a signature without reasoning text. A Messages thinking lifecycle follows the same pairing rule. A completely empty start may be deferred until its representation is known, and a lifecycle must not switch representations. -Although a provider profile can classify Chat `reasoning_content` as a summary, Chat has no signature field. Current translated routes through Chat therefore support only unsigned raw reasoning. Summary translation through Chat fails at the Responses or Messages signature boundary rather than silently discarding required continuation state. +Although a provider profile can classify Chat `reasoning_content` as a summary, standard Chat has no signature field. Generic translated Chat routes therefore support only unsigned raw reasoning. Summary translation through Chat fails at the Responses or Messages signature boundary rather than silently discarding required continuation state. The [Gemini client](provider-compatibility.md#provider-differences) additionally translates its Google thought-signature extension into Responses `encrypted_content` or Messages `signature` and restores the original text/tool attachment on continuation. ### Opaque continuation state diff --git a/docs/protocols/anthropic-messages.md b/docs/protocols/anthropic-messages.md index 09514fb..7d4827f 100644 --- a/docs/protocols/anthropic-messages.md +++ b/docs/protocols/anthropic-messages.md @@ -229,6 +229,8 @@ The client preserves the response ID, model, and supported block order. Each emi `thinking_delta` does not say whether its text is raw reasoning or a summary. Molto classifies it using the explicit provider capability profile: Anthropic and OpenAI profiles use summaries, while vLLM uses raw reasoning. The endpoint or base URL does not select this behavior. +When OpenRouter Responses is the upstream, its explicit raw/summary events already determine the normalized representation. Messages output preserves that distinction, including signatures for summaries. This exception applies to output projection only: incoming unsigned Messages thinking still follows the configured summary-input contract and rejects, so this route does not yet support a full raw-thinking Messages round trip. + A thinking block that starts with text or a signature begins immediately so the observed snapshot cannot be lost. A completely empty thinking start is deferred until a non-empty thinking or signature delta establishes content. If the block stays empty, Molto omits it and assigns dense normalized indexes to the remaining blocks. Native `ping` events are ignored on this semantic path. Only the six handled raw events are inspected here; any other `RawMessageStreamEvent` variant is silently ignored rather than rejected. This matches the fact that `ping` is transport-only, but it diverges from `python/CONVENTIONS.md`'s "reject unsupported event types explicitly" rule and from the Responses client, which raises for unknown stream events. The silent-ignore is a documented current behavior, not a deliberate contract to rely on. @@ -368,7 +370,7 @@ When Messages is the translated upstream and the provider is Anthropic, missing, Cross-protocol Messages support includes streaming and non-streaming requests for the explicitly mapped text, portable image input, thinking, custom function tools, direct tool calls, successful tool results, limited failed-result paths, conversation history, lifecycle metadata, termination, and usage semantics described above. -A route targeting Messages must supply a downstream output-token limit because Messages requires `max_tokens`. Reasoning summaries are not currently portable through Chat Completions in either direction because Chat has no signature slot. Molto also does not enforce the same-provider requirement for opaque continuation state; callers must keep signatures with their issuing provider. +A route targeting Messages must supply a downstream output-token limit because Messages requires `max_tokens`. Reasoning summaries are not currently portable through generic Chat Completions because standard Chat has no signature slot. Gemini signature-only state is supported: a thinking block with empty `thinking` and the original `signature` follows its associated text or tool-use block, and echoing that order restores the Gemini attachment. Molto also does not enforce the same-provider requirement for opaque continuation state; callers must keep signatures with their issuing provider. The normalized path does not currently implement image output, non-web citations, refusals as content blocks, redacted thinking, hosted tools other than basic web search, structured output, or multiple candidates. Request fields accepted by the local Messages wrapper are not cross-protocol features unless the adapter and client map them explicitly. diff --git a/docs/protocols/openai-chat-completions.md b/docs/protocols/openai-chat-completions.md index 0cc79f2..3297afa 100644 --- a/docs/protocols/openai-chat-completions.md +++ b/docs/protocols/openai-chat-completions.md @@ -226,7 +226,7 @@ The provider or model renderer can still merge, move, or reinterpret accepted wi ### Reasoning and continuation state -Chat's single `reasoning_content` extension can be classified as either the normalized raw reasoning field or summary field according to the provider profile. Chat has no reasoning signature or encrypted continuation slot. In the current implementation, only unsigned raw reasoning is portable through Chat on a translated route. A Chat summary has no signature and therefore cannot satisfy the completed-summary contract required by Responses or Messages; in the reverse direction, a Responses or Messages summary carries a signature that Chat projection rejects rather than silently discarding. Opaque continuation state and summarized reasoning are therefore not currently portable through Chat. +Chat's single `reasoning_content` extension can be classified as either the normalized raw reasoning field or summary field according to the provider profile. Standard Chat has no reasoning signature or encrypted continuation slot. Generic translated Chat routes support only unsigned raw reasoning. A Chat summary has no signature and therefore cannot satisfy the completed-summary contract required by Responses or Messages; in the reverse direction, a Responses or Messages summary carries a signature that Chat projection rejects rather than silently discarding. The Gemini upstream client is an exception for signature-only state: it maps `extra_content.google.thought_signature` through Responses or Messages and restores its original attachment on continuation. This does not add signed reasoning support to generic downstream Chat projection. ### Tools and tool results @@ -307,7 +307,7 @@ For representable output, translated Chat retains answer text and inline links w These are implementation gaps rather than inherent claims about the Chat protocol: - An upstream Chat stream silently uses `choices[0]`; additional choices are not rejected and are lost. Requests with `n > 1` should not use translation. -- Translated reasoning through Chat currently supports only unsigned raw reasoning, such as the `vllm` provider profile. Summary profiles fail at the target protocol's signature boundary in either direction. +- Generic translated Chat reasoning supports only unsigned raw reasoning, such as the `vllm` provider profile. Gemini additionally supports signature-only continuation through Responses and Messages; reasoning-text translation is unverified. - Refusals, hosted tools other than basic web search, moderation, non-web annotations, audio, prediction output, and log probabilities are not carried through the normalized path. Hosted-search structured annotations are deliberately omitted from translated Chat output. - Chat text chunks therefore use `logprobs=None`, even when another protocol could theoretically represent compatible token log probabilities. - Chat has no normalized per-part status. Target lifecycle and status fields are synthesized where required, and pauses map to `finish_reason="length"`; other terminal reasons without an exact Chat mapping become `finish_reason="stop"`. @@ -338,3 +338,7 @@ External protocol references: - [OpenAI Chat Completions create reference](https://developers.openai.com/api/reference/resources/chat/subresources/completions/methods/create) - [vLLM OpenAI-compatible server](https://docs.vllm.ai/en/latest/serving/online_serving/openai_compatible_server/) + +## Hosted extensions + +See [provider compatibility](../provider-compatibility.md) for Google `extra_content` at message/part/call attachments, Gemini missing index repair, and native history preservation. Native acceptance does not establish translated portability; populated opaque state rejects where there is no lossless mapping. diff --git a/docs/protocols/openai-responses.md b/docs/protocols/openai-responses.md index 15aea5b..fbb67f5 100644 --- a/docs/protocols/openai-responses.md +++ b/docs/protocols/openai-responses.md @@ -255,7 +255,7 @@ Responses is explicit where Chat Completions and Messages are ambiguous: | `response.reasoning_summary_*` | Summary in `Thinking.summary` | | `encrypted_content` | Opaque snapshot in `Thinking.signature` | -Every explicit Responses event must agree with the selected provider capability profile. OpenAI is classified as summarized reasoning and vLLM as raw reasoning. A base URL never chooses this behavior. +Explicit Responses events must agree with the selected client's reasoning policy. OpenAI is classified as summarized reasoning and vLLM as raw reasoning. OpenRouter's Responses client accepts either wire-labeled representation, preserving the distinction per item rather than assuming every routed model uses summaries. A base URL never chooses this behavior. See the [provider compatibility policy](../provider-compatibility.md#history-and-reasoning) for format restrictions and continuation limits. A Responses reasoning lifecycle must use exactly one valid representation: @@ -265,7 +265,7 @@ A Responses reasoning lifecycle must use exactly one valid representation: The item must not combine or switch representations between its added, delta, and done states. A completely empty start may remain deferred until its representation becomes known. When Responses is the downstream target, summary providers require a signature for a completed reasoning summary. -Chat Completions has one `reasoning_content` extension and no signature. Messages has one `thinking_delta` field plus signature lifecycle. Their configured provider capability decides whether their text is classified as Responses raw reasoning or summary. Only unsigned raw Chat reasoning is currently portable into Responses: a Chat summary cannot supply the signature required at Responses part completion. Responses-to-Chat summary translation also fails because Chat rejects the source signature instead of dropping it. Supported delta boundaries remain observable and are preserved by matched parity coverage. +Standard Chat Completions has one `reasoning_content` extension and no signature. Messages has one `thinking_delta` field plus signature lifecycle. Their configured provider capability decides whether their text is classified as Responses raw reasoning or summary. Generic Chat reasoning supports only unsigned raw text into Responses: a Chat summary cannot supply the signature required at Responses part completion. Responses-to-Chat summary translation also fails because Chat rejects the source signature instead of dropping it. Supported delta boundaries remain observable and are preserved by matched parity coverage. Gemini additionally maps its Google thought signatures to signature-only reasoning items with unchanged `encrypted_content`. These items follow their associated text or function call; echoing the ordered output back to Gemini restores the original attachment. ### Opaque continuation state diff --git a/docs/provider-compatibility.md b/docs/provider-compatibility.md new file mode 100644 index 0000000..c159c2c --- /dev/null +++ b/docs/provider-compatibility.md @@ -0,0 +1,59 @@ +# Provider compatibility + +Each supported provider/protocol pair has its own explicit upstream client. Each class implements one protocol, and thin subclasses share the protocol implementation. Prefer Responses when it supports the desired model and capabilities, then Messages, then Chat Completions. `molto.upstream.registry.CLIENTS` selects the client; unsupported provider/endpoint pairs fail locally instead of silently switching protocols. + +Existing OpenAI Responses and Chat Completions, Anthropic Messages, and vLLM routes remain available. Cross-vendor configurations such as OpenAI Messages and Anthropic Responses are unsupported. + +## Selected protocols and configuration + +| Provider | Client | Default SDK base URL | Credential | +| --- | --- | --- | --- | +| Together AI | `TogetherAIResponsesClient`, `TogetherAIChatCompletionsClient` | `https://api.together.ai/v1` | `TOGETHER_AI_API_KEY` | +| Fireworks | `FireworksResponsesClient`, `FireworksChatCompletionsClient` | `https://api.fireworks.ai/inference/v1` | `FIREWORKS_API_KEY` | +| OpenRouter | `OpenRouterResponsesClient` | `https://openrouter.ai/api/v1` | `OPENROUTER_API_KEY` | +| Bedrock | `BedrockResponsesClient`, `BedrockChatCompletionsClient` | Explicit regional URL required | `AWS_BEARER_TOKEN_BEDROCK` or `BEDROCK_API_KEY` | +| Gemini | `GeminiChatCompletionsClient` | `https://generativelanguage.googleapis.com/v1beta/openai` | `GEMINI_API_KEY` | + +An explicit `api_key` overrides the configured provider key; an empty key fails locally. Missing provider keys cannot fall back to OpenAI credentials. An explicit `base_url` overrides the default without changing the provider or protocol. Authentication and account headers supplied through `extra_headers` cannot override the selected upstream identity. + +Bedrock accepts either credential name from the environment or `.env`. `AWS_BEARER_TOKEN_BEDROCK` takes precedence when both names are configured, including across those sources. For the same name, the environment overrides `.env`. + +Select the upstream protocol explicitly when it differs from the public method. For example, `Molto.chat_completions(..., provider="openrouter", endpoint="responses")` translates Chat input through the Responses client. The existing method defaults remain unchanged. + +Protocol availability is documented by [Together](https://docs.together.ai/docs/inference/responses-api), [Fireworks](https://docs.fireworks.ai/api-reference/post-responses), [OpenRouter](https://openrouter.ai/docs/api_reference/responses/overview), [Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/inference-responses-api.html), and [Gemini](https://ai.google.dev/gemini-api/docs/openai). Availability does not establish support for every model or feature. Together's Responses documentation lists GLM-5.2 and GLM-5.3 families; its Chat Completions recordings do not validate Responses for those Chat models. Together, Fireworks, and Bedrock expose separate Chat Completions clients to reach models and capabilities available through that protocol. Bedrock's [Chat Completions guide](https://docs.aws.amazon.com/bedrock/latest/userguide/inference-chat-completions.html) documents the regional runtime and Mantle destinations; callers must choose a destination supported by their model. + +## Provider differences + +OpenRouter Responses identifies raw text and summaries explicitly. Its client accepts unsigned raw reasoning, including the recorded `format: "unknown"`, or a summary with its required signature. Named formats, formatted summaries, mixed representations, and mid-item representation changes reject. Native passthrough preserves the original fields. Raw reasoning projects to Chat and Messages; signed summaries can project to Messages. Incoming unsigned Messages thinking still follows the summary-input contract and rejects, so this output support does not establish a complete Messages reasoning round trip. + +Fireworks Responses uses the summary profile. Its recorded low-reasoning output contains unsigned summaries, which remain valid native evidence but reject during normalization. Together uses the raw reasoning profile. The Bedrock and Fireworks Chat Completions recordings disable reasoning; they do not establish reasoning-enabled compatibility for those routes. + +Gemini native Chat preserves opaque `extra_content.google` attachments on messages, content parts, and function calls, including nested nulls. Translated Gemini text and tool output extracts `extra_content.google.thought_signature` into a signature-only `Thinking` part immediately after the associated text or tool call. Responses exposes the token as reasoning `encrypted_content`; Messages exposes it as a thinking-block `signature`. Echoing those ordered output items as history restores the exact token to its original Gemini message or call. Text still streams immediately; a final-chunk signature follows its completed text part. The signature remains opaque and must stay with its issuing Gemini conversation. + +Gemini uses the summary profile, matching Google's [thought-summary documentation](https://ai.google.dev/gemini-api/docs/openai). The recordings establish signature-only continuation, not reasoning-text translation. Other populated Google fields and message-level signatures without an associated text part remain unsupported on translated routes. Missing streamed tool indices are repaired only when the call identity is unambiguous; ambiguous output rejects rather than losing calls. + +## Replay evidence + +Provider conversations share `tests/upstream/test_multi_turn.py`. Cassettes use the existing scenario-first layout, for example `tests/cassettes/upstream_ir/tool_use/togetherai-responses-stream-00.yaml`. Each provider uses its own recordings. Canonical OpenAI/Anthropic fixtures are not reused as evidence of hosted-provider behavior. + +The suite checks native SDK parity, actual-output history, normalized lifecycle and semantics, exact expected subsequent requests, and focused public translation or rejection cases. Independent SDK responses supply the comparison values. Expected normalized request copies account for documented wire representations and omitted optional metadata; recorded fixtures are not rewritten to match Molto output. + +| Provider/model | Protocol | Retained conversation evidence | Remaining limits | +| --- | --- | --- | --- | +| Together `zai-org/GLM-5.2` | Responses | Two-turn text and three-turn sequential tools, streaming and non-streaming, with minimal reasoning | Other models, images, parallel calls, and reasoning-enabled continuation are unverified | +| Fireworks `accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b` | Responses | Text, sequential tools, and parallel tools in both native modes with reasoning disabled; streamed unsigned-summary tool history | Unsigned summaries cannot translate; other models and images are unverified | +| Together `Qwen/Qwen3.5-9B` | Chat Completions | Two-turn text and three-turn sequential tools, streaming and non-streaming, with `reasoning.enabled=false` | Other models, images, parallel calls, and reasoning-enabled continuation are unverified | +| Fireworks `accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b` | Chat Completions | Two-turn text and three-turn sequential tools, streaming and non-streaming, with `reasoning_effort="none"` | Other models, images, parallel calls, and reasoning-enabled continuation are unverified | +| OpenRouter `nvidia/nemotron-3.5-lightning:free` | Responses | Text in both native modes; non-streaming sequential tools; streamed raw-reasoning sequential tools | Parallel Responses calls and public translated Messages reasoning round trips are unverified | +| Gemini `gemini-3.1-flash-lite` | Chat Completions | Two-turn text and three-turn sequential tools, streaming and non-streaming, with minimal reasoning; native, normalized, and Responses/Messages thought-signature continuation | Other models, images, reasoning-text output, and live parallel calls are unverified | +| Bedrock `global.openai.gpt-5.6-luna` | Responses and Chat Completions | Two-turn text and three-turn sequential tools, streaming and non-streaming, with reasoning disabled | Verified only through the runtime endpoint in `ap-southeast-1`; other models, regions, images, parallel calls, and reasoning-enabled continuation are unverified | + +Bedrock captures use `https://bedrock-runtime.ap-southeast-1.amazonaws.com/openai/v1`, manual actual-output history, and zero retries. Responses requests use `store=false`; Chat Completions requests use `reasoning_effort="none"`. The model is an explicit system-defined inference profile. An earlier Mantle `openai.gpt-oss-20b` attempt returned HTTP 200 but stalled after `response.created` and `response.in_progress`; it was stopped after more than five minutes and remains in staging, outside the successful replay corpus. A Chat Completions attempt with `mistral.ministral-3-3b-instruct` returned an invalid-model HTTP 400 on runtime and timed out after 75 seconds on Mantle; neither attempt is successful replay evidence. The Singapore endpoint and global inference profile do not establish that inference occurred in Singapore. + +Chat Completions continuation retains the actual SDK output. Together and Gemini repeat `delta.role`; the SDK accumulator concatenates these values, so the recording caller and replay helper restore the single `assistant` role before reuse. Fireworks rejects null output-only fields in assistant history, so its recording caller and replay helper omit those nulls. Gemini also rejects null optional message fields; its caller omits top-level nulls while retaining nested Google state unchanged. These are history-construction choices in the evidence workflow; native production output remains unchanged. Native parity sends input copies without empty output-only annotations, null `reasoning_content`/`tool_calls`, or stream-only tool indices, which are absent from the Chat request schema. The recorded source history is still checked against actual SDK output, and response bytes remain unchanged. + +Gemini captures came from the [successful GitHub-hosted recording run](https://github.com/EmbeddedLLM/molto/actions/runs/42160882628), using the existing Actions secret, native OpenAI SDK calls through the recorder proxy, zero retries, and 90-second request deadlines. The temporary driver and workflow remain on a separate recording branch. Artifact YAML is imported unchanged. Streamed tool calls omit `index`; independent SDK references assign index zero only for these recorded single-call responses before comparison with the Gemini client. Native parity otherwise retains full provider output, including streamed `finish_reason="stop"` on tool calls and Google thought signatures on text and tool output. + +The retained OpenRouter captures use an explicit free model, disabled provider fallbacks, zero price caps, and no plugins. Reported costs were zero. Responses history is manual with `store=false`. Captures establish only the recorded model, settings, and date; replay does not prove that translated request bodies were executed live. + +The duplicate PR #76 corpus, per-run manifests, source snapshots, and unsupported-protocol captures are omitted. Full issue #78 coverage still requires the remaining provider/model cells. diff --git a/python/ARCHITECTURE.md b/python/ARCHITECTURE.md index a498b3d..e814681 100644 --- a/python/ARCHITECTURE.md +++ b/python/ARCHITECTURE.md @@ -10,28 +10,30 @@ Three upstream endpoints are implemented: - `chat/completions`: native Chat Completions passthrough or cross-protocol translation through Chat Completions; - `messages`: native Anthropic Messages passthrough or translated through the normalized representation. -Native same-protocol and cross-protocol routes support streaming and non-streaming requests. Cross-protocol routes cover text, portable image input, raw reasoning, reasoning summaries between Responses and Messages, function tools, tool calls and results, conversation history, prompt-cache intent, lifecycle metadata, and token usage. Because Chat Completions has no signature field, translated routes through Chat currently support only unsigned raw reasoning. +Native same-protocol and cross-protocol routes support streaming and non-streaming requests. Cross-protocol routes cover text, portable image input, raw reasoning, reasoning summaries between Responses and Messages, function tools, tool calls and results, conversation history, prompt-cache intent, lifecycle metadata, and token usage. Generic Chat Completions supports only unsigned raw reasoning on translated routes. Gemini additionally maps its thought-signature extension through Responses and Messages. ## Route configuration `endpoint`, `provider`, and `base_url` are independent: -| Concept | Purpose | -| ---------- | ----------------------------------------------------------------------------------------------------------------------------- | -| `endpoint` | Selects the upstream wire protocol and client: `responses`, `chat/completions`, or `messages`. | -| `provider` | Identifies the implementation serving that protocol and selects its `ProviderCapabilities`: `openai`, `anthropic`, or `vllm`. | -| `base_url` | Selects only the HTTP destination. | +| Concept | Purpose | +| --- | --- | +| `endpoint` | Selects the upstream wire protocol and client: `responses`, `chat/completions`, or `messages`. | +| `provider` | Identifies the implementation serving that protocol and selects its `ProviderCapabilities`: `openai`, `anthropic`, `vllm`, or an explicit hosted-provider profile. | +| `base_url` | Selects only the HTTP destination. | Molto never derives provider behavior from a URL hostname. When `provider` is omitted, the coordinator uses the canonical implementation for the selected endpoint as a convenience default: OpenAI for Responses and Chat Completions, and Anthropic for Messages. An explicit provider overrides that default without changing the endpoint, while an explicit base URL changes neither the protocol nor the capability profile. ### Endpoint selection belongs to the coordinator -Each upstream client implements one upstream wire protocol. A client must not switch or override the selected endpoint to accommodate a provider's supported protocols. Implement provider-specific clients only for protocols that the provider supports, reusing the existing protocol client where possible. For example, if Together AI supports only Chat Completions, implement `TogetherAIChatCompletionsClient`; do not implement a Responses client that silently sends Chat Completions requests. +Each upstream client implements one upstream wire protocol. A client must not switch or override the selected endpoint to accommodate a provider's supported protocols. Implement provider-specific clients only for protocols that the provider supports, reusing the existing protocol client where possible. For example, `GeminiChatCompletionsClient` sends Chat Completions requests; it must not present itself as a Responses client. -Any desired provider-specific endpoint default, forced switch, or override belongs in the `Molto` coordinator. Resolve the effective upstream endpoint before selecting the client and deciding between native passthrough and translation. The coordinator must preserve its downstream protocol contract: a Responses request routed through `TogetherAIChatCompletionsClient` uses the Responses adapter and normalized translation path. +Any desired provider-specific endpoint default, forced switch, or override belongs in the `Molto` coordinator. Resolve the effective upstream endpoint before selecting the client and deciding between native passthrough and translation. The coordinator must preserve its downstream protocol contract: a Responses request routed through `GeminiChatCompletionsClient` uses the Responses adapter and normalized translation path. This defines ownership of any future routing policy; it does not introduce automatic endpoint switching. The current explicit-provider behavior described above remains unchanged. +Each supported `(provider, endpoint)` route has an explicit class in `upstream/registry.py`, including thin subclasses where the shared implementation is sufficient. Prefer Responses for a model and capability it supports, then Messages, then Chat Completions. Together, Fireworks, and Bedrock each have separate Responses and Chat Completions classes; OpenRouter uses Responses and Gemini uses Chat Completions. Each class remains single-protocol, and registering a provider does not establish support for its entire model catalog. Existing canonical OpenAI/Anthropic clients and vLLM routes remain available. Cross-vendor aliases such as OpenAI Messages and Anthropic Responses are unsupported. `Molto` rejects an unregistered pair without switching endpoints. Provider classes own their default destination, required credential name, and protocol-specific capability adjustments; the coordinator resolves configured credentials and explicit overrides. Bedrock requires an explicit regional destination. + ## Architectural goal The long-term goal from `PLAN.md` remains valid: Molto should be a drop-in protocol and SDK compatibility layer without implementing a translator for every provider pair. @@ -66,7 +68,7 @@ Downstream X protocol Downstream X events ``` -Each downstream protocol should require one adapter and each upstream protocol should require one client. Composition then grows approximately as N + M implementations instead of N x M pairwise translators. +Each downstream protocol has one adapter, and each upstream protocol has a shared client implementation with provider-specific subclasses. The subclasses inherit transport and normalization unless a provider difference requires an override. Translation still composes adapters and clients instead of adding pairwise translators. The native protocol passthrough is an identity optimization to this model. When the two protocols are identical, crossing the IR would only reduce fidelity. Cross-protocol routes still compose adapters and clients through the normalized representation. @@ -107,9 +109,9 @@ The layers have distinct ownership: | Layer | Owns | Must not own | | --- | --- | --- | | `core.py` (`Molto`) | Public orchestration facade, protocol coordinators, route selection, composition, credentials | Provider-specific field transformations | -| `providers.py` | Provider names, endpoint defaults, and immutable capability profiles | Wire-protocol schemas or HTTP destinations | +| `providers.py` | Provider names, default protocol-to-provider selection, credential configuration names, and immutable capability profiles | Wire-protocol schemas or HTTP destinations | | `adapters/` | Downstream native request to normalized request; normalized events to downstream-native events; projected native events to a complete downstream-native response | HTTP transport | -| `upstream/` | Upstream request construction, provider SDK stream integration, compatibility validation where required, upstream response normalization | Downstream response formatting | +| `upstream/` | Explicit provider/protocol client registry, destination/authentication defaults, upstream request construction, provider SDK stream integration, compatibility validation, and upstream response normalization | Downstream response formatting | | `types/normalized.py` | Provider-neutral schemas and validation for request content, response parts, deltas, lifecycle metadata, and usage | Protocol conversions, transport, or SDK lifecycle objects | | `types/openai_*.py` | OpenAI request schemas, SDK-native result aliases, and narrow compatibility validators | Cross-protocol orchestration | @@ -256,7 +258,7 @@ OpenAIChatCompletionsAdapter.project_events() ChatCompletionChunk SDK stream ``` -`reasoning_content` is a provider extension to the OpenAI Chat schema, but the field itself does not distinguish raw reasoning from a reasoning summary. Molto models the extension only on assistant messages and uses `ProviderCapabilities.thinking` to classify it. OpenAI classifies it as a summary and vLLM as raw reasoning. Responses events already distinguish `response.reasoning_text.*` from `response.reasoning_summary_*`; their explicit event types remain authoritative. Classification does not make summaries portable through Chat: Responses and Messages require a signature for completed summaries, while Chat has no signature field. +`reasoning_content` is a provider extension to the OpenAI Chat schema, but the field itself does not distinguish raw reasoning from a reasoning summary. Molto models the extension only on assistant messages and uses `ProviderCapabilities.thinking` to classify it. OpenAI classifies it as a summary and vLLM as raw reasoning. Responses events already distinguish `response.reasoning_text.*` from `response.reasoning_summary_*`; their explicit event types remain authoritative. Classification does not make summaries portable through generic Chat: Responses and Messages require a signature for completed summaries, while standard Chat has no signature field. Gemini separately maps its Google thought-signature extension for signature-only continuation. ## Normalized request model @@ -500,7 +502,7 @@ Parity differs by path: ## Current limitations and extension path -The current public paths support native and translated streaming and non-streaming responses for text, portable image input, raw reasoning, reasoning summaries between Responses and Messages, and client-defined function tools. Routes through Chat Completions currently support only unsigned raw reasoning. Function-tool support includes definitions, selection, parallel-call control, successful results, conversation history, and streamed JSON arguments. Native routes preserve hosted web search. Basic hosted search translation is supported through Responses and Messages upstreams, with text-only projection for downstream Chat when reasoning is absent or unsigned; signed or encrypted reasoning raises an error; translated Chat upstreams reject normalized search declarations and history, while opaque `extra_body.web_search_options` is forwarded and returned annotations are dropped. Other hosted tools, failed client-function result semantics outside Messages, other multimodal content, and additional provider capabilities are not complete yet. The matched Responses/Messages fixtures also map the reconstructible opaque reasoning snapshots under the assumption that OpenAI serves both endpoints; opaque state is not portable across providers, the implementation does not enforce its issuer, and the separately recorded terminal Responses ciphertext is not byte-reconstructible through Messages. +The current public paths support native and translated streaming and non-streaming responses for text, portable image input, raw reasoning, reasoning summaries between Responses and Messages, and client-defined function tools. Generic Chat Completions routes support only unsigned raw reasoning; Gemini also supports signature-only continuation through Responses and Messages. Function-tool support includes definitions, selection, parallel-call control, successful results, conversation history, and streamed JSON arguments. Native routes preserve hosted web search. Basic hosted search translation is supported through Responses and Messages upstreams, with text-only projection for downstream Chat when reasoning is absent or unsigned; signed or encrypted reasoning raises an error; translated Chat upstreams reject normalized search declarations and history, while opaque `extra_body.web_search_options` is forwarded and returned annotations are dropped. Other hosted tools, failed client-function result semantics outside Messages, other multimodal content, and additional provider capabilities are not complete yet. The matched Responses/Messages fixtures also map the reconstructible opaque reasoning snapshots under the assumption that OpenAI serves both endpoints; opaque state is not portable across providers, the implementation does not enforce its issuer, and the separately recorded terminal Responses ciphertext is not byte-reconstructible through Messages. Function and hosted-search definitions and tool selection use provider-neutral normalized types. Protocol-specific function schemas and tool-choice shapes remain at their adapters and clients. @@ -514,3 +516,11 @@ To add another upstream protocol: 4. add cassette-backed parity tests against the downstream SDK contract. To add another downstream protocol, add an adapter that normalizes its request and projects normalized events without performing transport. + +## Hosted compatibility boundaries + +[Hosted provider configuration and evidence](../docs/provider-compatibility.md) remain separate from endpoint selection and model availability. Provider clients inherit the shared protocol implementation and override only demonstrated differences. Gemini repairs missing tool indices only with unambiguous identity; the generic normalizer rejects missing indices. Native history schemas have narrow Google attachment and OpenRouter reasoning-format extensions. Gemini extracts message and tool `google.thought_signature` values into signature-only `Thinking` parts immediately after the associated text or call. The order preserves attachment identity through Responses `encrypted_content` and Messages `signature`, and Gemini restores the token to the preceding content on continuation. The shared Chat normalizer owns part finalization; the Gemini subclass owns extension extraction and history restoration. This keeps text incremental when its signature arrives at the end of the stream. The Gemini summary profile permits signature-only projection without adding a new IR field. Cross-protocol paths still reject other populated opaque state they cannot preserve. + +Provider conversations share `tests/upstream/test_multi_turn.py` and scenario-first `upstream_ir/` cassette names. Tests reuse actual output as history and compare independent SDK semantics. Configuration tests do not establish live provider compatibility. + +`OpenRouterResponsesClient` resolves `responses_reasoning="wire"` without changing the provider's interpretation of ambiguous Chat or Messages reasoning. Its Responses events explicitly identify raw text or summaries, so the client accepts either valid representation, keeps each item's representation consistent across its lifecycle, and requires signatures for completed summaries. The observed `format="unknown"` is accepted on raw output; named formats and signed/summary items carrying a format remain unsupported. Native passthrough preserves all original fields. Downstream Chat accepts unsigned raw reasoning only; Messages can project either representation. Incoming unsigned Messages thinking still follows the existing summary-input contract and rejects, so this output support does not claim a complete Messages reasoning round trip. diff --git a/python/CONVENTIONS.md b/python/CONVENTIONS.md index 4bb984b..c68983d 100644 --- a/python/CONVENTIONS.md +++ b/python/CONVENTIONS.md @@ -32,7 +32,9 @@ Keep these three concepts separate: - `provider` identifies the serving implementation and selects its capability profile; and - `base_url` selects only the HTTP destination. -Do not treat an endpoint or URL hostname as evidence about provider behavior. A coordinator may supply a documented canonical provider when the caller omits one, but an explicit provider must override that convenience default independently of the endpoint and base URL. Keep provider capabilities in the single `PROVIDER_CAPABILITIES` registry and pass the resolved profile explicitly to adapters and clients. +Do not treat an endpoint or URL hostname as evidence about provider behavior. A coordinator may supply a documented canonical provider when the caller omits one, but an explicit provider must override that convenience default independently of the endpoint and base URL. Keep shared provider profiles in `PROVIDER_CAPABILITIES`; resolve protocol-specific adjustments through the selected client's `resolve_capabilities()` and pass that resolved profile explicitly to adapters and clients. + +Add one explicit client per supported provider/protocol pair. Each client implements exactly one protocol. Prefer Responses when it supports the desired model and capabilities, then Messages, then Chat Completions; add separate clients when another protocol is needed for model coverage. Thin subclasses are appropriate when the shared protocol implementation is sufficient. Keep destination and credential defaults on the provider client, while `Molto` resolves configured credentials and request overrides. Inherit common protocol behavior and override only demonstrated provider differences. Extend `tests/upstream/test_multi_turn.py` with actual provider recordings instead of creating a parallel conversation suite or replaying another provider's fixtures as provider evidence. Keep upstream clients specific to one supported wire protocol; never switch or override endpoints inside a client. Any desired endpoint override belongs in `Molto`, before client selection and the native-versus-translated route decision. See [endpoint selection ownership](ARCHITECTURE.md#endpoint-selection-belongs-to-the-coordinator). @@ -135,7 +137,7 @@ Store raw reasoning in `Thinking.content` and `ThinkingDelta.content_delta`. Sto A Responses reasoning lifecycle must use exactly one valid representation: raw reasoning content with no summary or signature, a reasoning summary accompanied by a signature with no raw content, or a signature with no reasoning summary or raw content. Preserve that representation across its start, delta, and end state; do not combine or switch representations during the part lifecycle. A completely empty start may remain deferred until its representation is known. -Chat Completions reasoning has no signature and may represent either raw reasoning or a summary according to the provider capability profile. Messages follows the same pairing rule as Responses: raw reasoning has no signature, a reasoning summary must have one, and a signature may appear without reasoning text. Enforce protocol-specific pairing at the relevant wire boundary rather than in the provider-neutral normalized models. Current cross-protocol paths through Chat therefore support only unsigned raw reasoning; reject summaries rather than discarding required opaque state. +Chat Completions reasoning has no signature and may represent either raw reasoning or a summary according to the provider capability profile. Messages follows the same pairing rule as Responses: raw reasoning has no signature, a reasoning summary must have one, and a signature may appear without reasoning text. Enforce protocol-specific pairing at the relevant wire boundary rather than in the provider-neutral normalized models. Generic cross-protocol paths through Chat therefore support only unsigned raw reasoning; reject summaries rather than discarding required opaque state. Gemini additionally maps its Google thought-signature extension to signature-only `Thinking` parts after the associated text or tool call. Preserve that order in Responses/Messages history so the Gemini client can restore the original attachment; never wrap or parse the token. Treat `ThinkingDelta.signature_delta` as a complete replacement snapshot of provider-specific opaque state. Never concatenate it with `Thinking.signature`. @@ -216,7 +218,7 @@ Never record cassettes during a normal test run. New cassettes must come from an Use the following workflow when adding a feature shared by Responses and one or more other protocols: -1. Record semantically equivalent Responses and counterpart protocol cassettes directly under `tests/cassettes/matched/` from approved official sources. Inspect their requests and events, verify that they contain no secrets, validate them against their native SDK types, and commit the unchanged recordings before modifying them. +1. Record semantically equivalent Responses and counterpart protocol conversations into a staging directory such as `/tmp/molto-recordings`, outside pytest, using native SDKs independently of Molto. Use the established scenario-first filenames, such as `upstream_ir/tool_use/togetherai-responses-stream-00.yaml`; no manifest or separate recording corpus is needed. Review all fields for secrets and private content, validate against native SDK types, then promote unchanged originals into the scenario directory and commit them. Create separate matched copies only after this baseline exists; raw captures must never go directly into `matched/`. 2. Add or extend deterministic matching tooling when the current tooling cannot align the new scenario. Use Responses as the canonical input and modify only the non-Responses fixture fields needed to express equivalent native requests, align source-backed response values, and align observable chunk boundaries. Never copy a Responses request body into another protocol or rewrite transport metadata, and keep every transformed fixture valid native wire data. 3. Run the matching tooling on each non-Responses cassette paired with the canonical Responses cassette. 4. Review every resulting cassette diff before implementation. The diff must contain only intentional, representable alignment changes and must not remove meaningful native fields. If it does not, correct the matching logic and repeat the matching and review steps. Commit the reviewed matching-tool and cassette changes before implementation. diff --git a/python/molto/adapters/anthropic.py b/python/molto/adapters/anthropic.py index 2da49b5..3bf8c5b 100644 --- a/python/molto/adapters/anthropic.py +++ b/python/molto/adapters/anthropic.py @@ -692,7 +692,9 @@ def event(data: dict[str, Any]) -> AnthropicMessagesStreamEvent: # in the block instead of waiting for deltas that may not exist. if isinstance(normalized_event.part, Thinking): part = normalized_event.part - if self._capabilities.thinking == "raw": + if self._capabilities.thinking == "raw" or ( + self._capabilities.responses_reasoning == "wire" and part.content + ): if part.summary or part.signature: raise ValueError( "A raw Anthropic thinking block cannot contain a summary " @@ -751,7 +753,10 @@ def event(data: dict[str, Any]) -> AnthropicMessagesStreamEvent: delta = normalized_event.delta if index not in thinking_parts: raise ValueError("Received a thinking delta before its block started.") - if self._capabilities.thinking == "raw": + if self._capabilities.thinking == "raw" or ( + self._capabilities.responses_reasoning == "wire" + and delta.content_delta + ): if delta.summary_delta or delta.signature_delta: raise ValueError( "A raw Anthropic thinking block cannot contain a summary " @@ -870,7 +875,9 @@ def event(data: dict[str, Any]) -> AnthropicMessagesStreamEvent: part = normalized_event.part if index not in thinking_parts: raise ValueError("Received a thinking end before its block started.") - if self._capabilities.thinking == "raw": + if self._capabilities.thinking == "raw" or ( + self._capabilities.responses_reasoning == "wire" and part.content + ): if part.summary or part.signature: raise ValueError( "A raw Anthropic thinking block cannot contain a summary " diff --git a/python/molto/adapters/openai.py b/python/molto/adapters/openai.py index 41af16d..b43e397 100644 --- a/python/molto/adapters/openai.py +++ b/python/molto/adapters/openai.py @@ -412,6 +412,8 @@ def _normalize_message( parts.append(search_result_from_responses(message)) return parts if message_type == "reasoning": + if message.get("format") is not None: + raise UnsupportedInput("Responses reasoning format cannot be translated.") content = message.get("content") or [] summary = message.get("summary") or [] if not all(part.get("type") == "reasoning_text" for part in content): @@ -1212,6 +1214,11 @@ def _normalize_message( ) -> Input: role = message.get("role") content = message.get("content") + attachments = [message, *(message.get("tool_calls") or [])] + if isinstance(content, list): + attachments.extend(content) + if any(dict(attachment).get("extra_content") for attachment in attachments): + raise UnsupportedInput("Chat Completions extra_content cannot be translated.") if role == "user" and isinstance(content, list): parts: list[TextInput | ImageUrlInput] = [] @@ -1401,6 +1408,10 @@ async def _project_events( response_start: ResponseStartEvent | None = None initial_chunk_sent = False tool_indices: dict[int, int] = {} + raw_reasoning = ( + self._capabilities.thinking == "raw" + or self._capabilities.responses_reasoning == "wire" + ) def chunk( metadata: ResponseStartEvent | ResponseEndEvent, @@ -1453,7 +1464,7 @@ def delta_chunk( part = normalized_event.part if part.signature: raise ValueError("Chat Completions cannot preserve reasoning signatures.") - if self._capabilities.thinking == "raw": + if raw_reasoning: if part.summary: raise ValueError( "Raw Chat Completions reasoning cannot contain a summary." @@ -1519,7 +1530,7 @@ def delta_chunk( thinking_delta = normalized_event.delta if thinking_delta.signature_delta: raise ValueError("Chat Completions cannot preserve reasoning signatures.") - if self._capabilities.thinking == "raw": + if raw_reasoning: if thinking_delta.summary_delta: raise ValueError( "Raw Chat Completions reasoning cannot contain a summary." @@ -1575,11 +1586,11 @@ def delta_chunk( part = normalized_event.part if part.signature: raise ValueError("Chat Completions cannot preserve reasoning signatures.") - if self._capabilities.thinking == "raw" and part.summary: + if raw_reasoning and part.summary: raise ValueError( "Raw Chat Completions reasoning cannot contain a summary." ) - if self._capabilities.thinking == "summary" and part.content: + if not raw_reasoning and part.content: raise ValueError( "Summarized Chat Completions reasoning cannot contain raw text." ) diff --git a/python/molto/configs.py b/python/molto/configs.py index a03d1ff..12470f9 100644 --- a/python/molto/configs.py +++ b/python/molto/configs.py @@ -1,7 +1,8 @@ import sys +from typing import Annotated from loguru import logger -from pydantic import SecretStr +from pydantic import AliasChoices, Field, SecretStr from pydantic_settings import BaseSettings, SettingsConfigDict MIN_HS256_SECRET_BYTES = 32 @@ -24,7 +25,12 @@ class EnvConfig(BaseSettings): molto_log_level_stderr: str = "INFO" # External services anthropic_api_key: SecretStr = "" + aws_bearer_token_bedrock: Annotated[ + SecretStr, + Field(validation_alias=AliasChoices("aws_bearer_token_bedrock", "BEDROCK_API_KEY")), + ] = "" deepseek_api_key: SecretStr = "" + fireworks_api_key: SecretStr = "" gemini_api_key: SecretStr = "" openai_api_key: SecretStr = "" openrouter_api_key: SecretStr = "" diff --git a/python/molto/core.py b/python/molto/core.py index 8fbfba6..b78ff24 100644 --- a/python/molto/core.py +++ b/python/molto/core.py @@ -10,6 +10,7 @@ from molto.providers import ( DEFAULT_PROVIDER_BY_ENDPOINT, PROVIDER_CAPABILITIES, + PROVIDER_KEY_NAMES, Endpoint, Provider, ) @@ -29,8 +30,7 @@ OpenAIResponsesResponse, OpenAIResponsesStreamEvent, ) -from molto.upstream.anthropic import AnthropicMessagesClient -from molto.upstream.openai import OpenAIChatCompletionsClient, OpenAIResponsesClient +from molto.upstream.registry import CLIENTS VLLM_DUMMY_API_KEY = "EMPTY" @@ -170,6 +170,8 @@ def _resolve_api_key(provider: Provider, api_key: str | None) -> str | None: return ENV_CONFIG.openai_api_key_plain if api_key is None and provider == "anthropic": return ENV_CONFIG.anthropic_api_key_plain + if api_key is None and provider in PROVIDER_KEY_NAMES: + return getattr(ENV_CONFIG, PROVIDER_KEY_NAMES[provider].lower()).get_secret_value() if api_key is None and provider == "vllm": return VLLM_DUMMY_API_KEY return api_key @@ -180,7 +182,14 @@ def _resolve_provider(endpoint: Endpoint, provider: Provider | None) -> Provider # endpoint cannot surface as an unrelated translation error. if endpoint not in DEFAULT_PROVIDER_BY_ENDPOINT: raise ValueError(f"Unsupported endpoint: {endpoint!r}.") - return provider or DEFAULT_PROVIDER_BY_ENDPOINT[endpoint] + if provider is not None and provider not in PROVIDER_CAPABILITIES: + raise ValueError(f"Unsupported provider: {provider!r}.") + resolved_provider = provider or DEFAULT_PROVIDER_BY_ENDPOINT[endpoint] + if (resolved_provider, endpoint) not in CLIENTS: + raise ValueError( + f"Unsupported upstream endpoint {endpoint!r} for provider {resolved_provider!r}." + ) + return resolved_provider async def responses( self, @@ -217,18 +226,19 @@ async def responses( "and provider='anthropic'." ) resolved_api_key = self._resolve_api_key(resolved_provider, api_key) - capabilities = PROVIDER_CAPABILITIES[resolved_provider] + client_type = CLIENTS[resolved_provider, endpoint] + capabilities = client_type.resolve_capabilities(PROVIDER_CAPABILITIES[resolved_provider]) upstream_headers = _upstream_headers(extra_headers) + upstream = client_type( + self._http_client, + api_key=resolved_api_key, + base_url=base_url, + capabilities=capabilities, + extra_body=extra_body, + extra_headers=upstream_headers, + ) if endpoint == "responses": - upstream = OpenAIResponsesClient( - self._http_client, - api_key=resolved_api_key, - base_url=base_url, - capabilities=capabilities, - extra_body=extra_body, - extra_headers=upstream_headers, - ) adapter = OpenAIResponsesAdapter(capabilities) if request.stream is True: return await _prefetch_stream( @@ -241,26 +251,6 @@ async def responses( capabilities, preserve_anthropic_search_metadata=preserve_search_metadata ) normalized_request = adapter.normalize_request(request) - if endpoint == "chat/completions": - upstream = OpenAIChatCompletionsClient( - self._http_client, - api_key=resolved_api_key, - base_url=base_url, - capabilities=capabilities, - extra_body=extra_body, - extra_headers=upstream_headers, - ) - elif endpoint == "messages": - upstream = AnthropicMessagesClient( - self._http_client, - api_key=resolved_api_key, - base_url=base_url, - capabilities=capabilities, - extra_body=extra_body, - extra_headers=upstream_headers, - ) - else: - raise ValueError(f"Unsupported endpoint: {endpoint!r}.") projected_events = adapter.project_events( upstream.events(normalized_request.model_copy(update={"stream": True})), normalized_request, @@ -288,17 +278,18 @@ async def chat_completions( request = OpenAIChatCompletionsCreateRequest.model_validate(body) resolved_provider = self._resolve_provider(endpoint, provider) resolved_api_key = self._resolve_api_key(resolved_provider, api_key) - capabilities = PROVIDER_CAPABILITIES[resolved_provider] + client_type = CLIENTS[resolved_provider, endpoint] + capabilities = client_type.resolve_capabilities(PROVIDER_CAPABILITIES[resolved_provider]) upstream_headers = _upstream_headers(extra_headers) + upstream = client_type( + self._http_client, + api_key=resolved_api_key, + base_url=base_url, + capabilities=capabilities, + extra_body=extra_body, + extra_headers=upstream_headers, + ) if endpoint == "chat/completions": - upstream = OpenAIChatCompletionsClient( - self._http_client, - api_key=resolved_api_key, - base_url=base_url, - capabilities=capabilities, - extra_body=extra_body, - extra_headers=upstream_headers, - ) adapter = OpenAIChatCompletionsAdapter(capabilities) if request.stream is True: return await _prefetch_stream( @@ -309,26 +300,6 @@ async def chat_completions( adapter = OpenAIChatCompletionsAdapter(capabilities) normalized_request = adapter.normalize_request(request) - if endpoint == "responses": - upstream = OpenAIResponsesClient( - self._http_client, - api_key=resolved_api_key, - base_url=base_url, - capabilities=capabilities, - extra_body=extra_body, - extra_headers=upstream_headers, - ) - elif endpoint == "messages": - upstream = AnthropicMessagesClient( - self._http_client, - api_key=resolved_api_key, - base_url=base_url, - capabilities=capabilities, - extra_body=extra_body, - extra_headers=upstream_headers, - ) - else: - raise ValueError(f"Unsupported endpoint: {endpoint!r}.") projected_events = adapter.project_events( upstream.events(normalized_request.model_copy(update={"stream": True})), normalized_request, @@ -362,17 +333,18 @@ async def messages( request = AnthropicMessagesCreateRequest.model_validate(body) resolved_provider = self._resolve_provider(endpoint, provider) resolved_api_key = self._resolve_api_key(resolved_provider, api_key) - capabilities = PROVIDER_CAPABILITIES[resolved_provider] + client_type = CLIENTS[resolved_provider, endpoint] + capabilities = client_type.resolve_capabilities(PROVIDER_CAPABILITIES[resolved_provider]) upstream_headers = _upstream_headers(extra_headers) + upstream = client_type( + self._http_client, + api_key=resolved_api_key, + base_url=base_url, + capabilities=capabilities, + extra_body=extra_body, + extra_headers=upstream_headers, + ) if endpoint == "messages": - upstream = AnthropicMessagesClient( - self._http_client, - api_key=resolved_api_key, - base_url=base_url, - capabilities=capabilities, - extra_body=extra_body, - extra_headers=upstream_headers, - ) adapter = AnthropicMessagesAdapter(capabilities, citation_policy=citation_policy) if request.stream is True: return await _prefetch_stream( @@ -387,26 +359,6 @@ async def messages( citation_policy="drop" if endpoint == "chat/completions" else citation_policy, ) normalized_request = adapter.normalize_request(request) - if endpoint == "responses": - upstream = OpenAIResponsesClient( - self._http_client, - api_key=resolved_api_key, - base_url=base_url, - capabilities=capabilities, - extra_body=extra_body, - extra_headers=upstream_headers, - ) - elif endpoint == "chat/completions": - upstream = OpenAIChatCompletionsClient( - self._http_client, - api_key=resolved_api_key, - base_url=base_url, - capabilities=capabilities, - extra_body=extra_body, - extra_headers=upstream_headers, - ) - else: - raise ValueError(f"Unsupported endpoint: {endpoint!r}.") projected_events = adapter.project_events( upstream.events(normalized_request.model_copy(update={"stream": True})), normalized_request, diff --git a/python/molto/providers.py b/python/molto/providers.py index e9bfa22..3a34b31 100644 --- a/python/molto/providers.py +++ b/python/molto/providers.py @@ -2,22 +2,40 @@ from typing import Literal, TypeAlias Endpoint: TypeAlias = Literal["responses", "chat/completions", "messages"] -Provider: TypeAlias = Literal["anthropic", "openai", "vllm"] +Provider: TypeAlias = Literal[ + "anthropic", "bedrock", "fireworks", "gemini", "openai", "openrouter", "togetherai", "vllm" +] ReasoningRepresentation: TypeAlias = Literal["raw", "summary"] @dataclass(frozen=True) class ProviderCapabilities: thinking: ReasoningRepresentation + # Only the resolved Responses client can opt into explicit wire labels; + # ambiguous Chat/Messages input still uses `thinking`. + responses_reasoning: Literal["profile", "wire"] = "profile" requires_search_history_state: bool = False PROVIDER_CAPABILITIES: dict[Provider, ProviderCapabilities] = { "anthropic": ProviderCapabilities(thinking="summary", requires_search_history_state=True), + "bedrock": ProviderCapabilities(thinking="summary"), + "fireworks": ProviderCapabilities(thinking="summary"), "openai": ProviderCapabilities(thinking="summary"), + "gemini": ProviderCapabilities(thinking="summary"), + "openrouter": ProviderCapabilities(thinking="summary"), + "togetherai": ProviderCapabilities(thinking="raw"), "vllm": ProviderCapabilities(thinking="raw"), } +PROVIDER_KEY_NAMES = { + "bedrock": "AWS_BEARER_TOKEN_BEDROCK", + "fireworks": "FIREWORKS_API_KEY", + "gemini": "GEMINI_API_KEY", + "openrouter": "OPENROUTER_API_KEY", + "togetherai": "TOGETHER_AI_API_KEY", +} + DEFAULT_PROVIDER_BY_ENDPOINT: dict[Endpoint, Provider] = { "responses": "openai", "chat/completions": "openai", diff --git a/python/molto/types/openai_chat_completions.py b/python/molto/types/openai_chat_completions.py index 806ec34..c2741fe 100644 --- a/python/molto/types/openai_chat_completions.py +++ b/python/molto/types/openai_chat_completions.py @@ -17,7 +17,15 @@ ChatCompletionAssistantMessageParam, ) from openai.types.chat.chat_completion_audio_param import ChatCompletionAudioParam -from openai.types.chat.chat_completion_content_part_param import ChatCompletionContentPartParam +from openai.types.chat.chat_completion_content_part_image_param import ( + ChatCompletionContentPartImageParam, +) +from openai.types.chat.chat_completion_content_part_input_audio_param import ( + ChatCompletionContentPartInputAudioParam, +) +from openai.types.chat.chat_completion_content_part_param import ( + File as ChatCompletionContentPartFileParam, +) from openai.types.chat.chat_completion_content_part_refusal_param import ( ChatCompletionContentPartRefusalParam, ) @@ -27,6 +35,12 @@ from openai.types.chat.chat_completion_developer_message_param import ( ChatCompletionDeveloperMessageParam, ) +from openai.types.chat.chat_completion_message_custom_tool_call_param import ( + ChatCompletionMessageCustomToolCallParam, +) +from openai.types.chat.chat_completion_message_function_tool_call_param import ( + ChatCompletionMessageFunctionToolCallParam, +) from openai.types.chat.chat_completion_message_param import ChatCompletionMessageParam from openai.types.chat.chat_completion_prediction_content_param import ( ChatCompletionPredictionContentParam, @@ -52,53 +66,109 @@ from openai.types.shared.chat_model import ChatModel from openai.types.shared.metadata import Metadata from openai.types.shared.reasoning_effort import ReasoningEffort -from pydantic import Field +from pydantic import Field, JsonValue, SerializationInfo, TypeAdapter, field_serializer from typing_extensions import NotRequired, Required, TypedDict from molto.types.base import ExcludeNoneModel +class GoogleExtraContent(TypedDict): + """Opaque Google continuation state, retained at its original attachment.""" + + google: Required[dict[str, JsonValue]] + + +class ChatCompletionTextPartParam(ChatCompletionContentPartTextParam): + """Text content with Google's per-part continuation extension.""" + + extra_content: NotRequired[GoogleExtraContent] + + +class ChatCompletionImagePartParam(ChatCompletionContentPartImageParam): + """Image content with Google's per-part continuation extension.""" + + extra_content: NotRequired[GoogleExtraContent] + + +class ChatCompletionAudioPartParam(ChatCompletionContentPartInputAudioParam): + """Audio content with Google's per-part continuation extension.""" + + extra_content: NotRequired[GoogleExtraContent] + + +class ChatCompletionFilePartParam(ChatCompletionContentPartFileParam): + """File content with Google's per-part continuation extension.""" + + extra_content: NotRequired[GoogleExtraContent] + + +class ChatCompletionRefusalPartParam(ChatCompletionContentPartRefusalParam): + """Refusal content with Google's per-part continuation extension.""" + + extra_content: NotRequired[GoogleExtraContent] + + +class ChatCompletionFunctionToolCallParam(ChatCompletionMessageFunctionToolCallParam): + """A function call retaining provider continuation fields.""" + + extra_content: NotRequired[GoogleExtraContent] + + +OpenAIChatCompletionContentPartParam: TypeAlias = Union[ + ChatCompletionTextPartParam, + ChatCompletionImagePartParam, + ChatCompletionAudioPartParam, + ChatCompletionFilePartParam, +] + + class ChatCompletionAssistantMessageWithReasoningParam(ChatCompletionAssistantMessageParam): """Provider-compatible assistant message containing either raw reasoning or summary.""" reasoning_content: NotRequired[str] + extra_content: NotRequired[GoogleExtraContent] + tool_calls: NotRequired[ + list[ChatCompletionFunctionToolCallParam | ChatCompletionMessageCustomToolCallParam] + ] content: NotRequired[ - str - | list[ChatCompletionContentPartTextParam | ChatCompletionContentPartRefusalParam] - | None + str | list[ChatCompletionTextPartParam | ChatCompletionRefusalPartParam] | None ] class ChatCompletionUserMessageListParam(TypedDict): """User message with eagerly validated, repeatable content parts.""" - content: Required[str | list[ChatCompletionContentPartParam]] + content: Required[str | list[OpenAIChatCompletionContentPartParam]] role: Required[Literal["user"]] name: NotRequired[str] + extra_content: NotRequired[GoogleExtraContent] class ChatCompletionSystemMessageListParam(TypedDict): """System message with eagerly validated, repeatable content parts.""" - content: Required[str | list[ChatCompletionContentPartTextParam]] + content: Required[str | list[ChatCompletionTextPartParam]] role: Required[Literal["system"]] name: NotRequired[str] + extra_content: NotRequired[GoogleExtraContent] class ChatCompletionDeveloperMessageListParam(TypedDict): """Developer message with eagerly validated, repeatable content parts.""" - content: Required[str | list[ChatCompletionContentPartTextParam]] + content: Required[str | list[ChatCompletionTextPartParam]] role: Required[Literal["developer"]] name: NotRequired[str] + extra_content: NotRequired[GoogleExtraContent] class ChatCompletionToolMessageListParam(TypedDict): """Tool message with eagerly validated, repeatable text content parts.""" - content: Required[str | list[ChatCompletionContentPartTextParam]] + content: Required[str | list[ChatCompletionTextPartParam]] role: Required[Literal["tool"]] tool_call_id: Required[str] + extra_content: NotRequired[GoogleExtraContent] _RETAINED_CHAT_MESSAGE_PARAMS = tuple( @@ -121,6 +191,7 @@ class ChatCompletionToolMessageListParam(TypedDict): ChatCompletionAssistantMessageWithReasoningParam, *_RETAINED_CHAT_MESSAGE_PARAMS, # pyright: ignore[reportInvalidTypeForm] ] +_CHAT_MESSAGES_ADAPTER = TypeAdapter(list[OpenAIChatCompletionMessageParam]) class OpenAIChatCompletionsCreateRequest(ExcludeNoneModel): @@ -275,6 +346,21 @@ class OpenAIChatCompletionsCreateRequest(ExcludeNoneModel): Field(description="Configuration for the web search tool."), ] = None + @field_serializer("messages") + def serialize_messages(self, messages, info: SerializationInfo): + # Explicit native history nulls are wire values, unlike unset optional + # request parameters. In particular, tool-only assistant content is null. + return _CHAT_MESSAGES_ADAPTER.dump_python( + messages, + mode=info.mode, + include=info.include, + exclude=info.exclude, + by_alias=info.by_alias, + exclude_unset=info.exclude_unset, + exclude_defaults=info.exclude_defaults, + exclude_none=False, + ) + # The SDK's response classes are already Pydantic models generated from the # endpoint schema, so aliases preserve the full nested response structures. diff --git a/python/molto/types/openai_responses.py b/python/molto/types/openai_responses.py index 75aca0e..bb5b322 100644 --- a/python/molto/types/openai_responses.py +++ b/python/molto/types/openai_responses.py @@ -12,6 +12,7 @@ from openai import AsyncStream from openai.types.responses import Response, ResponseCompletedEvent, ResponseStreamEvent from openai.types.responses.easy_input_message_param import EasyInputMessageParam +from openai.types.responses.function_tool_param import FunctionToolParam from openai.types.responses.response_create_params import ( ContextManagement, Conversation, @@ -89,6 +90,10 @@ class ResponseReasoningItemOptionalIDParam(ExcludeNoneModel): Literal["in_progress", "completed", "incomplete"] | None, Field(description="The reasoning item status."), ] = None + format: Annotated[ + str | None, + Field(description="Provider-specific reasoning format required for native continuation."), + ] = None class AnthropicSearchSourceMetadataParam(TypedDict, total=False): @@ -230,6 +235,18 @@ class ResponseInputMessageParam(SDKResponseInputMessageParam): OpenAIResponsesInputParam: TypeAlias = list[OpenAIResponsesInputItemParam] +class ResponseFunctionToolOptionalStrictParam(FunctionToolParam, total=False): + """Preserve omitted strictness accepted by recorded compatible Responses APIs.""" + + strict: bool | None + + +OpenAIResponsesToolParam: TypeAlias = Union[ + ResponseFunctionToolOptionalStrictParam, + *(item for item in get_args(ToolParam) if item is not FunctionToolParam), # pyright: ignore[reportInvalidTypeForm] +] + + class OpenAIResponsesCreateRequest(ExcludeNoneModel): """The JSON parameters accepted by `AsyncOpenAI.responses.create`. @@ -345,7 +362,7 @@ class OpenAIResponsesCreateRequest(ExcludeNoneModel): Field(description="How the model should select tools."), ] = None tools: Annotated[ - list[ToolParam] | None, + list[OpenAIResponsesToolParam] | None, Field(description="Tools available to the model."), ] = None top_logprobs: Annotated[ diff --git a/python/molto/upstream/base.py b/python/molto/upstream/base.py index 82d53a4..ff76a91 100644 --- a/python/molto/upstream/base.py +++ b/python/molto/upstream/base.py @@ -4,7 +4,7 @@ from typing import Any, NoReturn from httpx import URL, AsyncClient, Headers, Request -from openai import AsyncOpenAI, omit +from openai import AsyncOpenAI, OpenAIError, omit from pydantic import BaseModel from molto.providers import ProviderCapabilities @@ -22,6 +22,13 @@ class BaseClient[ NativeResponseT: BaseModel, ](ABC): DEFAULT_BASE_URL: str + REQUIRED_API_KEY: str | None = None + REQUIRES_BASE_URL = False + + @classmethod + def resolve_capabilities(cls, capabilities: ProviderCapabilities) -> ProviderCapabilities: + """Apply protocol-specific provider policy to the shared provider profile.""" + return capabilities def __init__( self, @@ -33,10 +40,12 @@ def __init__( extra_body: Mapping[str, Any] | None = None, extra_headers: Mapping[str, str] | None = None, ) -> None: + if self.REQUIRES_BASE_URL and not base_url: + raise ValueError(f"{type(self).__name__} requires an explicit base_url.") self._http_client = http_client self._api_key = api_key self._base_url = base_url - self._capabilities = capabilities + self._capabilities = self.resolve_capabilities(capabilities) self._extra_body = extra_body self._extra_headers = extra_headers self.response_headers = Headers() @@ -46,6 +55,8 @@ def _capture_response_headers(self, headers: Headers) -> None: self.response_headers.update(headers) def _make_sdk_client(self) -> AsyncOpenAI: + if self.REQUIRED_API_KEY and not self._api_key: + raise OpenAIError(f"Missing credentials. Set {self.REQUIRED_API_KEY} or pass api_key.") return AsyncOpenAI( api_key=self._api_key, base_url=self._base_url or self.DEFAULT_BASE_URL, diff --git a/python/molto/upstream/bedrock.py b/python/molto/upstream/bedrock.py new file mode 100644 index 0000000..7e83e20 --- /dev/null +++ b/python/molto/upstream/bedrock.py @@ -0,0 +1,13 @@ +"""Bedrock API-key clients; callers supply the regional protocol destination.""" + +from molto.upstream.openai import OpenAIChatCompletionsClient, OpenAIResponsesClient + + +class BedrockResponsesClient(OpenAIResponsesClient): + REQUIRED_API_KEY = "AWS_BEARER_TOKEN_BEDROCK" + REQUIRES_BASE_URL = True + + +class BedrockChatCompletionsClient(OpenAIChatCompletionsClient): + REQUIRED_API_KEY = "AWS_BEARER_TOKEN_BEDROCK" + REQUIRES_BASE_URL = True diff --git a/python/molto/upstream/fireworks.py b/python/molto/upstream/fireworks.py new file mode 100644 index 0000000..5794fe6 --- /dev/null +++ b/python/molto/upstream/fireworks.py @@ -0,0 +1,13 @@ +"""Fireworks clients using the shared OpenAI protocol implementations.""" + +from molto.upstream.openai import OpenAIChatCompletionsClient, OpenAIResponsesClient + + +class FireworksResponsesClient(OpenAIResponsesClient): + DEFAULT_BASE_URL = "https://api.fireworks.ai/inference/v1" + REQUIRED_API_KEY = "FIREWORKS_API_KEY" + + +class FireworksChatCompletionsClient(OpenAIChatCompletionsClient): + DEFAULT_BASE_URL = "https://api.fireworks.ai/inference/v1" + REQUIRED_API_KEY = "FIREWORKS_API_KEY" diff --git a/python/molto/upstream/gemini.py b/python/molto/upstream/gemini.py new file mode 100644 index 0000000..ad24191 --- /dev/null +++ b/python/molto/upstream/gemini.py @@ -0,0 +1,131 @@ +"""Gemini's OpenAI-compatible Chat transport.""" + +from collections.abc import AsyncIterator +from contextlib import aclosing +from typing import Any + +from molto.types.exceptions import UnsupportedInput +from molto.types.normalized import TextOutput, Thinking, ToolCall +from molto.types.openai_chat_completions import ( + OpenAIChatCompletionsCreateRequest, + OpenAIChatCompletionsStreamChunk, +) +from molto.upstream.openai import OpenAIChatCompletionsClient + + +def _register_call(calls: dict[int, str | None], index: int, call_id: str | None) -> None: + previous = calls.get(index) + if previous and call_id and previous != call_id: + raise ValueError("Gemini tool index changed call identity.") + if call_id and any(i != index and known_id == call_id for i, known_id in calls.items()): + raise ValueError("Gemini tool identity changed index.") + calls[index] = call_id or previous + + +class GeminiChatCompletionsClient(OpenAIChatCompletionsClient): + DEFAULT_BASE_URL = "https://generativelanguage.googleapis.com/v1beta/openai" + REQUIRED_API_KEY = "GEMINI_API_KEY" + + @staticmethod + def _thought_signature(extra_content: dict[str, Any] | None) -> str | None: + if not extra_content: + return None + google = extra_content.get("google") if isinstance(extra_content, dict) else None + if ( + not isinstance(extra_content, dict) + or set(extra_content) != {"google"} + or not isinstance(google, dict) + or set(google) != {"thought_signature"} + or not isinstance(google["thought_signature"], str) + or not google["thought_signature"] + ): + raise ValueError( + "Gemini extra_content must contain only a nonempty thought_signature." + ) + return google["thought_signature"] + + @staticmethod + def _starts_assistant_message(part: Thinking) -> bool: + # A signature-only part follows the text or call it authenticates. + return not part.signature or bool(part.content or part.summary) + + @staticmethod + def _assistant_message(parts: list[Thinking | TextOutput | ToolCall]) -> dict[str, Any]: + message = OpenAIChatCompletionsClient._assistant_message( + [part for part in parts if not isinstance(part, Thinking) or not part.signature] + ) + target: dict[str, Any] | None = None + tool_index = 0 + for part in parts: + if isinstance(part, TextOutput): + target = message + elif isinstance(part, ToolCall): + target = message["tool_calls"][tool_index] + tool_index += 1 + elif part.signature: + if part.content or part.summary or target is None or "extra_content" in target: + raise UnsupportedInput( + "Gemini requires each signature-only thinking part immediately after " + "its text or tool call." + ) + target["extra_content"] = {"google": {"thought_signature": part.signature}} + target = None + else: + target = None + return message + + async def native_events( + self, request: OpenAIChatCompletionsCreateRequest + ) -> AsyncIterator[OpenAIChatCompletionsStreamChunk]: + # Repair only missing indices. Association uses call IDs, never a chunk's + # array positions; already indexed provider chunks retain native fidelity. + identities: dict[int, dict[int, str | None]] = {} + announced_ids: dict[int, set[str]] = {} + async with aclosing(super().native_events(request)) as source: + async for original in source: + chunk = original.model_copy(deep=True) + for choice in chunk.choices: + calls = identities.setdefault(choice.index, {}) + announced = announced_ids.setdefault(choice.index, set()) + tools = choice.delta.tool_calls or [] + # Reserve explicit indices first, including those appearing + # after an unindexed call in this chunk. + for tool in tools: + if tool.index is not None: + if type(tool.index) is not int or tool.index < 0: + raise ValueError( + "Gemini tool indices must be nonnegative integers." + ) + _register_call(calls, tool.index, tool.id) + for tool in tools: + index = tool.index + if index is None: + matches = [ + i for i, call_id in calls.items() if tool.id and call_id == tool.id + ] + if matches: + index = matches[0] + elif tool.id: + index = 0 + while index in calls: + index += 1 + elif ( + len(calls) == 1 + and len(tools) == 1 + and not (tool.function and tool.function.name) + ): + index = next(iter(calls)) + else: + raise ValueError( + "Gemini tool fragment has no unambiguous index or ID." + ) + tool.index = index + _register_call(calls, index, tool.id) + if tool.id in announced: + # IDs used for inference are complete identity + # snapshots; SDK accumulation concatenates them + # unless subsequent snapshots are omitted. + tool.id = None + if tool.id: + announced.add(tool.id) + yield chunk diff --git a/python/molto/upstream/openai.py b/python/molto/upstream/openai.py index e9f2e7d..f21c473 100644 --- a/python/molto/upstream/openai.py +++ b/python/molto/upstream/openai.py @@ -193,10 +193,8 @@ def _validate_responses_reasoning_capability( raise ValueError("Summarized Responses reasoning cannot contain raw text.") -def _started_output_item(item: Any) -> Thinking | TextOutput | ToolCall: +def _started_output_item(item: Any) -> TextOutput | ToolCall: """Project a just-added Responses output item into its initial normalized part.""" - if item.type == "reasoning": - return _reasoning_part(item) if item.type == "message": return TextOutput(content="", id=item.id) if item.type == "function_call": @@ -205,10 +203,8 @@ def _started_output_item(item: Any) -> Thinking | TextOutput | ToolCall: raise ValueError(f"Unsupported Responses output item: {item.type}") -def _completed_output_item(item: Any) -> Thinking | TextOutput | ToolCall: +def _completed_output_item(item: Any) -> TextOutput | ToolCall: """Project a completed Responses output item into its normalized part.""" - if item.type == "reasoning": - return _validate_completed_responses_reasoning(_reasoning_part(item)) if item.type == "message": text = "" citations = [] @@ -392,6 +388,7 @@ class _ChatToolCallState: tool_call_id: str tool_name: str args: str + signature: str | None = None class OpenAIResponsesClient( @@ -419,6 +416,14 @@ def _translate_tool(tool: FunctionTool | WebSearchTool) -> dict[str, Any]: DEFAULT_BASE_URL = "https://api.openai.com/v1" + def _reasoning_part(self, item: Any) -> Thinking: + if getattr(item, "format", None) is not None: + raise ValueError("Responses reasoning format cannot be translated.") + return _reasoning_part(item) + + def _validate_reasoning(self, part: Thinking) -> None: + _validate_responses_reasoning_capability(part, self._capabilities.thinking) + async def native_events( self, request: OpenAIResponsesCreateRequest ) -> AsyncIterator[ResponseStreamEvent]: @@ -680,11 +685,26 @@ async def _events(self, request: NormalizedRequest) -> AsyncIterator[ModelRespon # Source output indices map to dense normalized indices so an omitted # reasoning item cannot leave a gap for downstream projections. part_indices: dict[int, int] = {} + reasoning_representations: dict[int, str] = {} text_indices: dict[tuple[int, int], int] = {} started_text_items: set[int] = set() ended_text_items: set[int] = set() next_index = 0 + def validate_reasoning(source_index: int, part: Thinking) -> None: + self._validate_reasoning(part) + if self._capabilities.responses_reasoning != "wire": + return + representation = ( + "raw" if part.content else "summary" if part.summary or part.signature else None + ) + if representation is not None: + previous = reasoning_representations.setdefault(source_index, representation) + if previous != representation: + raise ValueError( + "A Responses reasoning item cannot mix raw text with a summary or signature." + ) + def start_part( source_index: int, part: Thinking | TextOutput | ToolCall | SearchCall | SearchResult ) -> PartStartEvent: @@ -725,9 +745,13 @@ def part_index(source_index: int) -> int: service_tier=metadata.service_tier, ) elif event_type == "response.output_item.added": - part = _started_output_item(event.item) + part = ( + self._reasoning_part(event.item) + if event.item.type == "reasoning" + else _started_output_item(event.item) + ) if isinstance(part, Thinking): - _validate_responses_reasoning_capability(part, self._capabilities.thinking) + validate_reasoning(event.output_index, part) if ( isinstance(part, Thinking) and not part.content @@ -738,8 +762,9 @@ def part_index(source_index: int) -> int: else: yield start_part(event.output_index, part) elif event_type == "response.reasoning_text.delta": - if self._capabilities.thinking != "raw" and event.delta: - raise ValueError("Summarized Responses reasoning cannot contain raw text.") + validate_reasoning( + event.output_index, Thinking(content=event.delta, summary="") + ) # An empty delta must not materialize a deferred reasoning part. if not event.delta and event.output_index in pending_reasoning: continue @@ -750,8 +775,9 @@ def part_index(source_index: int) -> int: delta=ThinkingDelta(content_delta=event.delta), ) elif event_type == "response.reasoning_summary_text.delta": - if self._capabilities.thinking != "summary" and event.delta: - raise ValueError("Raw Responses reasoning cannot contain a summary.") + validate_reasoning( + event.output_index, Thinking(content="", summary=event.delta) + ) # An empty delta must not materialize a deferred reasoning part. if not event.delta and event.output_index in pending_reasoning: continue @@ -766,10 +792,9 @@ def part_index(source_index: int) -> int: # lifecycle echoes and must not materialize a deferred part. added_part = event.part if added_part.type == "reasoning_text" and added_part.text: - if self._capabilities.thinking != "raw": - raise ValueError( - "Summarized Responses reasoning cannot contain raw text." - ) + validate_reasoning( + event.output_index, Thinking(content=added_part.text, summary="") + ) if (start := pending_reasoning.pop(event.output_index, None)) is not None: yield start_part(event.output_index, start) yield PartDeltaEvent( @@ -806,8 +831,9 @@ def part_index(source_index: int) -> int: elif event_type == "response.reasoning_summary_part.added": added_part = event.part if added_part.type == "summary_text" and added_part.text: - if self._capabilities.thinking != "summary": - raise ValueError("Raw Responses reasoning cannot contain a summary.") + validate_reasoning( + event.output_index, Thinking(content="", summary=added_part.text) + ) if (start := pending_reasoning.pop(event.output_index, None)) is not None: yield start_part(event.output_index, start) yield PartDeltaEvent( @@ -866,9 +892,13 @@ def part_index(source_index: int) -> int: if event.item.type == "message" and event.output_index in ended_text_items: continue start = pending_reasoning.pop(event.output_index, None) - part = _completed_output_item(event.item) + part = ( + _validate_completed_responses_reasoning(self._reasoning_part(event.item)) + if event.item.type == "reasoning" + else _completed_output_item(event.item) + ) if isinstance(part, Thinking): - _validate_responses_reasoning_capability(part, self._capabilities.thinking) + validate_reasoning(event.output_index, part) # Deferred items always start empty, so the part is omitted # when it also completes without content or state. if ( @@ -1035,11 +1065,15 @@ def _assistant_message(parts: list[Thinking | TextOutput | ToolCall]) -> dict[st raise UnsupportedInput( "Chat Completions cannot represent thinking signatures." ) + if part.summary: + raise UnsupportedInput( + "Chat Completions cannot represent reasoning summaries." + ) if text_parts or "tool_calls" in message: raise UnsupportedInput( "Chat Completions cannot preserve this assistant reasoning order." ) - reasoning_parts.append(part.content or part.summary) + reasoning_parts.append(part.content) elif isinstance(part, TextOutput): if "tool_calls" in message: raise UnsupportedInput( @@ -1064,12 +1098,16 @@ def _assistant_message(parts: list[Thinking | TextOutput | ToolCall]) -> dict[st message["reasoning_content"] = "\n".join(reasoning_parts) if len(text_parts) == 1 and "prompt_cache_breakpoint" not in text_parts[0]: message["content"] = text_parts[0]["text"] - else: - message["content"] = text_parts if text_parts or not parts else None + elif text_parts or not parts: + message["content"] = text_parts return message @staticmethod - def _messages(request: NormalizedRequest) -> list[dict[str, Any]]: + def _starts_assistant_message(part: Thinking) -> bool: + return True + + @classmethod + def _messages(cls, request: NormalizedRequest) -> list[dict[str, Any]]: messages: list[dict[str, Any]] = [] assistant_parts: list[Thinking | TextOutput | ToolCall] = [] explicit_assistant = False @@ -1080,7 +1118,7 @@ def _messages(request: NormalizedRequest) -> list[dict[str, Any]]: def flush_assistant() -> None: nonlocal explicit_assistant if explicit_assistant or assistant_parts: - messages.append(OpenAIChatCompletionsClient._assistant_message(assistant_parts)) + messages.append(cls._assistant_message(assistant_parts)) assistant_parts.clear() explicit_assistant = False @@ -1142,7 +1180,8 @@ def flush_deferred_images() -> None: assistant_parts.extend(item.content) explicit_assistant = True elif isinstance(item, Thinking): - flush_assistant() + if cls._starts_assistant_message(item): + flush_assistant() assistant_parts.append(item) elif isinstance(item, ToolCall): assistant_parts.append(item) @@ -1283,9 +1322,16 @@ def _validate_request(request: NormalizedRequest) -> None: if isinstance(item, ToolReturn) and item.tool_name is not None: raise UnsupportedInput("Chat Completions cannot represent tool return names.") + @staticmethod + def _thought_signature(extra_content: dict[str, Any] | None) -> str | None: + if extra_content: + raise ValueError("Chat Completions extra_content cannot be translated.") + return None + async def _events(self, request: NormalizedRequest) -> AsyncIterator[ModelResponseStreamEvent]: response_metadata: ResponseStartEvent | None = None part_text = "" + text_signature: str | None = None usage: Usage | None = None termination_reason: TerminationReason | None = None active_part: Literal["thinking", "text"] | None = None @@ -1304,26 +1350,47 @@ def start_part(part: Thinking | TextOutput) -> PartStartEvent: part_text = "" return PartStartEvent(index=active_part_index, part=part) - def end_active_part() -> PartEndEvent | None: - nonlocal active_part + def end_part( + index: int, part: Thinking | TextOutput | ToolCall, signature: str | None = None + ) -> list[ModelResponseStreamEvent]: + nonlocal next_part_index + events: list[ModelResponseStreamEvent] = [PartEndEvent(index=index, part=part)] + if signature is not None: + # Attachment state follows its content so text can stream before + # providers supply the signature in their final chunk. + thinking = Thinking(content="", summary="", signature=signature) + events.extend( + [ + PartStartEvent(index=next_part_index, part=thinking), + PartEndEvent(index=next_part_index, part=thinking), + ] + ) + next_part_index += 1 + return events + + def end_active_part() -> list[ModelResponseStreamEvent]: + nonlocal active_part, text_signature if active_part == "thinking": part: Thinking | TextOutput = self._classify_thinking(part_text) elif active_part == "text": part = TextOutput(content=part_text) else: - return None + return [] active_part = None - return PartEndEvent(index=active_part_index, part=part) + events = end_part(active_part_index, part, text_signature) + text_signature = None + return events - def end_tool_call(tool_call_index: int) -> PartEndEvent: + def end_tool_call(tool_call_index: int) -> list[ModelResponseStreamEvent]: state = tool_calls[tool_call_index] - return PartEndEvent( - index=state.part_index, - part=ToolCall( + return end_part( + state.part_index, + ToolCall( tool_call_id=state.tool_call_id, tool_name=state.tool_name, args=state.args, ), + state.signature, ) native_request = OpenAIChatCompletionsCreateRequest.model_validate( @@ -1342,15 +1409,21 @@ def end_tool_call(tool_call_index: int) -> PartEndEvent: if chunk.choices: choice = chunk.choices[0] + signature = self._thought_signature( + getattr(choice.delta, "extra_content", None) + ) reasoning_delta = getattr(choice.delta, "reasoning_content", None) # Reasoning and text may interleave: a non-empty reasoning chunk # ends an active text part and starts a new thinking part. Empty # reasoning chunks carry nothing and never start or switch parts. if reasoning_delta: + if active_tool_call_index is not None: + for event in end_tool_call(active_tool_call_index): + yield event + active_tool_call_index = None if active_part == "text": - ended_part = end_active_part() - if ended_part is not None: - yield ended_part + for event in end_active_part(): + yield event if active_part is None: yield start_part(Thinking(content="", summary="")) part_text += reasoning_delta @@ -1359,29 +1432,40 @@ def end_tool_call(tool_call_index: int) -> PartEndEvent: delta=self._classify_thinking_delta(reasoning_delta), ) - if choice.delta.content is not None: - is_empty_role_chunk = ( - choice.delta.role is not None and choice.delta.content == "" + if choice.delta.content: + if active_tool_call_index is not None: + for event in end_tool_call(active_tool_call_index): + yield event + active_tool_call_index = None + if active_part == "thinking": + for event in end_active_part(): + yield event + if active_part is None: + yield start_part(TextOutput(content="")) + part_text += choice.delta.content + yield PartDeltaEvent( + index=active_part_index, + delta=TextDelta(content_delta=choice.delta.content), ) - if not is_empty_role_chunk: - if active_part == "thinking": - ended_part = end_active_part() - if ended_part is not None: - yield ended_part - if active_part is None: - yield start_part(TextOutput(content="")) - if choice.delta.content: - part_text += choice.delta.content - yield PartDeltaEvent( - index=active_part_index, - delta=TextDelta(content_delta=choice.delta.content), - ) - if choice.delta.tool_calls is not None: - ended_part = end_active_part() - if ended_part is not None: - yield ended_part + if signature is not None: + if active_part != "text": + raise ValueError( + "A Chat message thought signature requires an associated text part." + ) + text_signature = signature + + if choice.delta.tool_calls: + for event in end_active_part(): + yield event for tool_call_delta in choice.delta.tool_calls: + if tool_call_delta.index is None: + raise ValueError( + "Chat Completions tool-call deltas require an index." + ) + tool_signature = self._thought_signature( + getattr(tool_call_delta, "extra_content", None) + ) function_delta = tool_call_delta.function state = tool_calls.get(tool_call_delta.index) if state is None: @@ -1395,12 +1479,14 @@ def end_tool_call(tool_call_index: int) -> PartEndEvent: "include its ID and function name." ) if active_tool_call_index is not None: - yield end_tool_call(active_tool_call_index) + for event in end_tool_call(active_tool_call_index): + yield event state = _ChatToolCallState( part_index=next_part_index, tool_call_id=tool_call_delta.id, tool_name=function_delta.name, args=function_delta.arguments or "", + signature=tool_signature, ) tool_calls[tool_call_delta.index] = state active_tool_call_index = tool_call_delta.index @@ -1420,6 +1506,8 @@ def end_tool_call(tool_call_index: int) -> PartEndEvent: "Chat Completions tool-call deltas must be contiguous by index." ) + if tool_signature is not None: + state.signature = tool_signature name_delta = ( function_delta.name if function_delta is not None else None ) @@ -1453,11 +1541,11 @@ def end_tool_call(tool_call_index: int) -> PartEndEvent: raise ValueError( f"Unsupported Chat Completions finish reason: {choice.finish_reason}" ) from exc - ended_part = end_active_part() - if ended_part is not None: - yield ended_part + for event in end_active_part(): + yield event if active_tool_call_index is not None: - yield end_tool_call(active_tool_call_index) + for event in end_tool_call(active_tool_call_index): + yield event tool_calls.clear() active_tool_call_index = None @@ -1468,9 +1556,8 @@ def end_tool_call(tool_call_index: int) -> PartEndEvent: raise ValueError("Chat Completions stream did not contain a response chunk.") if termination_reason is None: raise ValueError("Chat Completions stream ended without a finish reason.") - ended_part = end_active_part() - if ended_part is not None: - yield ended_part + for event in end_active_part(): + yield event yield ResponseEndEvent( id=response_metadata.id, created_at=response_metadata.created_at, diff --git a/python/molto/upstream/openrouter.py b/python/molto/upstream/openrouter.py new file mode 100644 index 0000000..7c91eee --- /dev/null +++ b/python/molto/upstream/openrouter.py @@ -0,0 +1,34 @@ +"""OpenRouter Responses transport and explicit reasoning interpretation.""" + +from dataclasses import replace +from typing import Any + +from molto.providers import ProviderCapabilities +from molto.types.normalized import Thinking +from molto.upstream.openai import ( + OpenAIResponsesClient, + _reasoning_part, +) + + +class OpenRouterResponsesClient(OpenAIResponsesClient): + DEFAULT_BASE_URL = "https://openrouter.ai/api/v1" + REQUIRED_API_KEY = "OPENROUTER_API_KEY" + + @classmethod + def resolve_capabilities(cls, profile: ProviderCapabilities) -> ProviderCapabilities: + return replace(profile, responses_reasoning="wire") + + def _reasoning_part(self, item: Any) -> Thinking: + part = _reasoning_part(item) + format = getattr(item, "format", None) + # OpenRouter labels raw text with "unknown" rather than an opaque encoding. + # Signed/summary formats still require an explicit translation contract. + if format is not None and (format != "unknown" or part.summary or part.signature): + raise ValueError("Responses reasoning format cannot be translated.") + return part + + def _validate_reasoning(self, part: Thinking) -> None: + # Responses already distinguishes raw text from summaries. Thinking owns + # mixed-representation validation; completion requires signed summaries. + pass diff --git a/python/molto/upstream/registry.py b/python/molto/upstream/registry.py new file mode 100644 index 0000000..ea16b21 --- /dev/null +++ b/python/molto/upstream/registry.py @@ -0,0 +1,29 @@ +"""Explicit client selection for every accepted provider/protocol combination.""" + +from molto.providers import Endpoint, Provider +from molto.upstream.anthropic import AnthropicMessagesClient +from molto.upstream.base import BaseClient +from molto.upstream.bedrock import BedrockChatCompletionsClient, BedrockResponsesClient +from molto.upstream.fireworks import FireworksChatCompletionsClient, FireworksResponsesClient +from molto.upstream.gemini import GeminiChatCompletionsClient +from molto.upstream.openai import OpenAIChatCompletionsClient, OpenAIResponsesClient +from molto.upstream.openrouter import OpenRouterResponsesClient +from molto.upstream.together import TogetherAIChatCompletionsClient, TogetherAIResponsesClient +from molto.upstream.vllm import VLLMChatCompletionsClient, VLLMMessagesClient, VLLMResponsesClient + +CLIENTS: dict[tuple[Provider, Endpoint], type[BaseClient]] = { + ("openai", "responses"): OpenAIResponsesClient, + ("openai", "chat/completions"): OpenAIChatCompletionsClient, + ("anthropic", "messages"): AnthropicMessagesClient, + ("vllm", "responses"): VLLMResponsesClient, + ("vllm", "chat/completions"): VLLMChatCompletionsClient, + ("vllm", "messages"): VLLMMessagesClient, + ("bedrock", "responses"): BedrockResponsesClient, + ("bedrock", "chat/completions"): BedrockChatCompletionsClient, + ("fireworks", "responses"): FireworksResponsesClient, + ("fireworks", "chat/completions"): FireworksChatCompletionsClient, + ("openrouter", "responses"): OpenRouterResponsesClient, + ("togetherai", "responses"): TogetherAIResponsesClient, + ("togetherai", "chat/completions"): TogetherAIChatCompletionsClient, + ("gemini", "chat/completions"): GeminiChatCompletionsClient, +} diff --git a/python/molto/upstream/together.py b/python/molto/upstream/together.py new file mode 100644 index 0000000..9e168fc --- /dev/null +++ b/python/molto/upstream/together.py @@ -0,0 +1,13 @@ +"""Together clients using the shared OpenAI protocol implementations.""" + +from molto.upstream.openai import OpenAIChatCompletionsClient, OpenAIResponsesClient + + +class TogetherAIResponsesClient(OpenAIResponsesClient): + DEFAULT_BASE_URL = "https://api.together.ai/v1" + REQUIRED_API_KEY = "TOGETHER_AI_API_KEY" + + +class TogetherAIChatCompletionsClient(OpenAIChatCompletionsClient): + DEFAULT_BASE_URL = "https://api.together.ai/v1" + REQUIRED_API_KEY = "TOGETHER_AI_API_KEY" diff --git a/python/molto/upstream/vllm.py b/python/molto/upstream/vllm.py new file mode 100644 index 0000000..ff131af --- /dev/null +++ b/python/molto/upstream/vllm.py @@ -0,0 +1,16 @@ +"""vLLM protocol clients sharing the canonical wire implementations.""" + +from molto.upstream.anthropic import AnthropicMessagesClient +from molto.upstream.openai import OpenAIChatCompletionsClient, OpenAIResponsesClient + + +class VLLMResponsesClient(OpenAIResponsesClient): + """vLLM Responses transport and normalization.""" + + +class VLLMChatCompletionsClient(OpenAIChatCompletionsClient): + """vLLM Chat Completions transport and normalization.""" + + +class VLLMMessagesClient(AnthropicMessagesClient): + """vLLM Messages transport and normalization.""" diff --git a/python/molto/utils/test.py b/python/molto/utils/test.py index 6ba8c80..1b04750 100644 --- a/python/molto/utils/test.py +++ b/python/molto/utils/test.py @@ -696,6 +696,14 @@ def _response_from_cassette( request=request, ) + if "body_bytes" in response: + return httpx.Response( + status_code, + content=response["body_bytes"], + headers=headers, + request=request, + ) + body = response.get("body") if isinstance(body, str): return httpx.Response( diff --git a/scripts/match_anthropic_cassette_responses.py b/scripts/match_anthropic_cassette_responses.py index a7fa1ad..2f0abf0 100644 --- a/scripts/match_anthropic_cassette_responses.py +++ b/scripts/match_anthropic_cassette_responses.py @@ -722,6 +722,8 @@ def match_messages_response( message_usage["service_tier"] = "standard" messages_cassette["request"]["body"] = matched_request + # Matched output intentionally replaces the original recorded response bytes. + messages_cassette["response"].pop("body_bytes", None) def _parse_args(argv: list[str] | None = None) -> argparse.Namespace: diff --git a/scripts/match_openai_cassette_responses.py b/scripts/match_openai_cassette_responses.py index 6d2461b..a374e80 100644 --- a/scripts/match_openai_cassette_responses.py +++ b/scripts/match_openai_cassette_responses.py @@ -387,6 +387,8 @@ def match_chat_completions_response( chat_response["object"] = "chat.completion" chat_response["service_tier"] = "default" _map_usage(_validated_usage(response), chat_usage) + # Matched output intentionally replaces the original recorded response bytes. + chat_cassette["response"].pop("body_bytes", None) def _parse_args(argv: list[str] | None = None) -> argparse.Namespace: diff --git a/scripts/recorder_proxy.py b/scripts/recorder_proxy.py index 0ab8897..6cc4659 100644 --- a/scripts/recorder_proxy.py +++ b/scripts/recorder_proxy.py @@ -10,6 +10,7 @@ import argparse import json +from collections.abc import Awaitable, Callable from contextlib import asynccontextmanager from datetime import datetime, timezone from pathlib import Path @@ -18,46 +19,21 @@ import uvicorn from anyio import CancelScope from fastapi import FastAPI, Request, Response -from fastapi.responses import JSONResponse, StreamingResponse -from httpx import AsyncClient, HTTPStatusError +from fastapi.responses import StreamingResponse +from httpx import URL, AsyncClient from loguru import logger -from pydantic_ai.retries import AsyncTenacityTransport, RetryConfig, wait_retry_after from starlette.types import Send -from tenacity import retry_if_exception_type, stop_after_attempt, wait_exponential from uuid_utils import uuid7 from yaml import dump as yaml_dump -# Defaults -OUTPUT_DIR = Path("tests") / "cassettes/matched/tool_call" +# Unreviewed captures must never enter the matched fixture corpus. +OUTPUT_DIR = Path("/tmp/molto-recordings") TARGET_HOST = "https://api.openai.com" TIMEOUT = 60 * 5 # 5 minutes - -def should_retry_status(response) -> None: - """Raise exceptions for retryable HTTP status codes.""" - if response.status_code in (429, 502, 503, 504): - response.raise_for_status() # This will raise HTTPStatusError - - -HTTP_CLIENT = AsyncClient( - timeout=TIMEOUT, - transport=AsyncTenacityTransport( - config=RetryConfig( - # Retry on HTTP errors and connection issues - retry=retry_if_exception_type((HTTPStatusError, ConnectionError)), - # Smart waiting: respects Retry-After headers, falls back to exponential backoff - wait=wait_retry_after( - fallback_strategy=wait_exponential(multiplier=1, max=60), - max_wait=300, - ), - # Stop after 5 attempts - stop=stop_after_attempt(5), - # Re-raise the last exception if all retries fail - reraise=True, - ), - validate_response=should_retry_status, - ), -) +# Each exchange is evidence: retries would conceal the original provider failure. +# Native SDK callers must likewise set max_retries=0. +HTTP_CLIENT = AsyncClient(timeout=TIMEOUT) # Headers to record (whitelist) RECORDED_HEADERS = { @@ -71,6 +47,9 @@ def should_retry_status(response) -> None: "connection", # Helpful for grouping multi-request tool loops into a single "run" "x-run-id", + "x-request-id", + "request-id", + "retry-after", } # Headers to exclude when forwarding response (they're handled by httpx/client) @@ -115,8 +94,6 @@ def save_recording(recording: dict[str, Any], filename: str): """Save recording to file.""" OUTPUT_DIR.mkdir(parents=True, exist_ok=True) filepath = OUTPUT_DIR / filename - # with open(filepath, "w", encoding="utf-8") as f: - # json.dump(recording, f, indent=2, ensure_ascii=False) with open(filepath.with_suffix(".yaml"), "w", encoding="utf-8") as f: yaml_dump(recording, f, allow_unicode=True, encoding="utf-8") @@ -131,6 +108,10 @@ async def lifespan(app: FastAPI): class RecordingStreamingResponse(StreamingResponse): + def __init__(self, *args, on_close: Callable[[], Awaitable[None]], **kwargs): + super().__init__(*args, **kwargs) + self.on_close = on_close + async def stream_response(self, send: Send) -> None: try: await super().stream_response(send) @@ -138,7 +119,39 @@ async def stream_response(self, send: Send) -> None: # A disconnect during send leaves the generator suspended at yield. # Close it explicitly so its recording is saved before returning. with CancelScope(shield=True): - await self.body_iterator.aclose() + try: + await self.body_iterator.aclose() + finally: + await self.on_close() + + +def decode_body(body: bytes, content_type: str) -> Any: + """Retain malformed or non-JSON bodies without inventing a JSON representation.""" + media_type = content_type.partition(";")[0].strip().lower() + if media_type == "application/json" or media_type.endswith("+json"): + try: + return json.loads(body) + except (ValueError, UnicodeDecodeError): + pass + try: + return body.decode("utf-8") + except UnicodeDecodeError: + return body + + +def mask_secrets(value: Any, secrets: list[str]) -> Any: + """Mask known request credentials, including credentials echoed by an upstream error.""" + if isinstance(value, dict): + return {key: mask_secrets(item, secrets) for key, item in value.items()} + if isinstance(value, list): + return [mask_secrets(item, secrets) for item in value] + if isinstance(value, (str, bytes)): + for secret in secrets: + if isinstance(value, bytes): + value = value.replace(secret.encode(), b"***") + else: + value = value.replace(secret, "***") + return value @app.api_route( @@ -146,30 +159,35 @@ async def stream_response(self, send: Send) -> None: methods=["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS"], ) async def proxy_request(request: Request, path: str) -> Response: - """Proxy all requests and record them.""" - # Generate request ID + """Forward one exchange without retries and retain its observed completion state.""" request_id = str(uuid7()) - now = datetime.now() + now = datetime.now(timezone.utc) filename = f"{now.strftime('%Y-%m-%d')}-{request_id}" - logger.info(f"Recording `{path}` to `{OUTPUT_DIR / filename}`...") - - # Build target URL - query_string = str(request.query_params) - target_url = f"{TARGET_HOST}/{path}" - if query_string: - target_url += f"?{query_string}" - - # Parse request body + logger.info("Recording exchange to {}", OUTPUT_DIR / filename) + target = URL(TARGET_HOST) + if target.username or target.password or target.query: + raise ValueError("Configure credentials on the SDK, not in the proxy target URL") + target_url = f"{TARGET_HOST.rstrip('/')}/{path}" + secrets = [ + value + for name, value in request.headers.items() + if name.lower() in {"authorization", "x-api-key", "api-key"} and value + ] + authorization = request.headers.get("authorization", "") + if authorization.lower().startswith("bearer "): + secrets.append(authorization[7:]) + secrets.extend( + value + for name, value in request.query_params.multi_items() + if name.lower() in {"key", "api_key", "api-key", "access_token"} and value + ) body = await request.body() - if not body: - body = None - parsed_body = json.loads(body.decode("utf-8")) - - # Prepare recording structure + parsed_body = decode_body(body, request.headers.get("content-type", "")) recording: dict[str, Any] = { - "timestamp": now.astimezone(timezone.utc).isoformat(), + "timestamp": now.isoformat(), "request_id": request_id, "filename": filename, + "upstream_url": target_url, "request": { "method": request.method, "path": f"/{path}", @@ -177,88 +195,99 @@ async def proxy_request(request: Request, path: str) -> Response: "headers": filter_headers(request.headers), "body": parsed_body, }, - "response": { - "status_code": None, - "headers": {}, - }, + "response": {"status_code": None, "headers": {}}, } - - # Make the request new_headers = {k: v for k, v in request.headers.items() if k.lower() != "host"} - media_type = "application/json" - if parsed_body.get("stream", False): - - async def _stream() -> AsyncGenerator[Response | str, None]: - async with HTTP_CLIENT.stream( - method=request.method, - url=target_url, - headers=new_headers, - content=body, - timeout=TIMEOUT, - ) as response: - recording["response"]["status_code"] = response.status_code - recording["response"]["headers"] = filter_headers(response.headers) - try: - yield response - - if response.status_code != 200: - chunk_str = (await response.aread()).decode() - if media_type == "application/json": - recording["response"]["body"] = json.loads(chunk_str) + upstream_request = HTTP_CLIENT.build_request( + request.method, + target_url, + params=request.query_params.multi_items(), + headers=new_headers, + content=body, + timeout=TIMEOUT, + ) + try: + response = await HTTP_CLIENT.send(upstream_request, stream=True) + except Exception as exc: + # Exception text can contain credential-bearing URLs. Retain the class only. + recording["response"]["transport_error"] = type(exc).__name__ + save_recording(mask_secrets(recording, secrets), filename) + raise + result = recording["response"] + result["status_code"] = response.status_code + result["headers"] = filter_headers(response.headers) + media_type = response.headers.get("content-type", "") + if media_type.partition(";")[0].strip().lower() == "text/event-stream": + result.update(sse=[], stream_status="disconnected", terminal_event=None, error_event=False) + + async def close_stream() -> None: + await response.aclose() + save_recording(mask_secrets(recording, secrets), filename) + + async def stream() -> AsyncGenerator[str, None]: + try: + async for line in response.aiter_lines(): + # This is ordered SSE-line evidence, not original TCP/newline bytes. + result["sse"].append(f"{line}\n") + if line.startswith("event:"): + event_type = line.removeprefix("event:").strip() + if event_type in { + "response.completed", + "response.incomplete", + "response.failed", + "message_stop", + }: + result["terminal_event"] = event_type + if event_type == "error": + result["error_event"] = True + if line.startswith("data:"): + data = line.removeprefix("data:").strip() + if data == "[DONE]": + result["terminal_event"] = "[DONE]" else: - recording["response"]["body"] = chunk_str - yield chunk_str - else: - sse_events = recording["response"]["sse"] = [] - try: - async for chunk_str in response.aiter_lines(): - chunk_str = f"{chunk_str}\n" - # Retain the line before yielding: the SDK may close - # the stream as soon as it receives an error event. - sse_events.append(chunk_str) - yield chunk_str - except Exception as e: - recording["response"]["stream_error"] = f"{e.__class__.__name__}: {e}" - finally: - save_recording(recording, recording["filename"]) - logger.info("Streaming recording saved.") + try: + event = json.loads(data) + except ValueError: + event = None + if isinstance(event, dict) and ( + event.get("type") == "error" or "error" in event + ): + result["error_event"] = True + yield f"{line}\n" + result["stream_status"] = "complete" + except Exception as exc: + result["stream_status"] = "transport_error" + result["transport_error"] = type(exc).__name__ + raise - agen = _stream() - response: Response = await anext(agen) - media_type = response.headers.get("content-type", "text/event-stream") return RecordingStreamingResponse( - agen, + stream(), + on_close=close_stream, status_code=response.status_code, headers=filter_response_headers(response.headers), - media_type=media_type, - ) - # Regular request - else: - response = await HTTP_CLIENT.request( - method=request.method, - url=target_url, - headers=new_headers, - content=body, - timeout=TIMEOUT, - ) - media_type = response.headers.get("content-type", "application/json") - if response.status_code != 200: - body = response.text - if media_type == "application/json": - body = json.loads(body) - else: - body = response.json() - recording["response"]["body"] = body - recording["response"]["status_code"] = response.status_code - recording["response"]["headers"] = filter_headers(response.headers) - save_recording(recording, recording["filename"]) - return JSONResponse( - content=body, - status_code=response.status_code, - headers=filter_response_headers(response.headers), - media_type=media_type, ) + chunks = [] + try: + async for chunk in response.aiter_bytes(): + chunks.append(chunk) + except Exception as exc: + result["transport_error"] = type(exc).__name__ + raise + finally: + # Retain bytes received before a read failure as incomplete evidence too. + response_body = b"".join(chunks) + result["body"] = decode_body(response_body, media_type) + result["body_bytes"] = response_body + with CancelScope(shield=True): + await response.aclose() + save_recording(mask_secrets(recording, secrets), filename) + return Response( + content=response_body, + status_code=response.status_code, + headers=filter_response_headers(response.headers), + ) + def main(): """Run the recording proxy server.""" @@ -286,15 +315,18 @@ def main(): ) parser.add_argument( "--host", - default="0.0.0.0", + default="127.0.0.1", ) args = parser.parse_args() OUTPUT_DIR = Path(args.output_dir) TARGET_HOST = args.target.rstrip("/") + target = URL(TARGET_HOST) + if target.username or target.password or target.query: + parser.error("Configure credentials on the SDK, not in the proxy target URL") - print("🎬 Recording Proxy Starting...") + print("Recording Proxy Starting (no retries)...") print(f" Proxy: http://{args.host}:{args.port}") print(f" Target: {TARGET_HOST}") print(f" Output: {OUTPUT_DIR.absolute()}") @@ -305,6 +337,8 @@ def main(): host=args.host, port=args.port, log_level="info", + # Access logs include the raw query string, which can contain credentials. + access_log=False, ) diff --git a/tests/adapters/test_anthropic.py b/tests/adapters/test_anthropic.py index 6182f0c..7c8eeb4 100644 --- a/tests/adapters/test_anthropic.py +++ b/tests/adapters/test_anthropic.py @@ -60,7 +60,9 @@ def _normalize(request: AnthropicMessagesCreateRequest, capabilities: ProviderCa return AnthropicMessagesAdapter(capabilities).normalize_request(request) -def test_normalization_rejects_unsigned_summary_history() -> None: +@pytest.mark.parametrize("responses_reasoning", ["profile", "wire"]) +def test_normalization_rejects_unsigned_summary_history(responses_reasoning) -> None: + """Ensures explicit Responses output policy never reclassifies ambiguous Messages input.""" request = _request( messages=[ { @@ -71,7 +73,10 @@ def test_normalization_rejects_unsigned_summary_history() -> None: ) with pytest.raises(UnsupportedInput, match="summary requires a signature"): - _normalize(request, _CAPABILITIES) + _normalize( + request, + ProviderCapabilities(thinking="summary", responses_reasoning=responses_reasoning), + ) @pytest.mark.parametrize( @@ -524,8 +529,12 @@ async def test_projection_skips_empty_thinking_delta() -> None: assert [event.type for event in events] == ["message_start", "content_block_start"] -async def test_projection_supports_official_empty_summary_start() -> None: - adapter, request = _adapter() +@pytest.mark.parametrize("responses_reasoning", ["profile", "wire"]) +async def test_projection_supports_official_empty_summary_start(responses_reasoning) -> None: + """Ensures signed summaries preserve their text and signature under both output policies.""" + adapter, request = _adapter( + ProviderCapabilities(thinking="summary", responses_reasoning=responses_reasoning) + ) events = [ event @@ -567,8 +576,12 @@ async def test_projection_rejects_reasoning_outside_capability() -> None: ] -async def test_projection_rejects_unsigned_summary_completion() -> None: - adapter, request = _adapter() +@pytest.mark.parametrize("responses_reasoning", ["profile", "wire"]) +async def test_projection_rejects_unsigned_summary_completion(responses_reasoning) -> None: + """Ensures wire-labeled reasoning still requires a signature for completed summaries.""" + adapter, request = _adapter( + ProviderCapabilities(thinking="summary", responses_reasoning=responses_reasoning) + ) with pytest.raises(ValueError, match="summary requires a signature"): [ diff --git a/tests/cassettes/README.md b/tests/cassettes/README.md index 0bb8913..9ab9b8b 100644 --- a/tests/cassettes/README.md +++ b/tests/cassettes/README.md @@ -6,7 +6,7 @@ Normal test runs are playback-only. Do not record or rewrite cassettes during a ## Recorded cassettes -The cassettes under provider directories such as `openai/` preserve the recorded request and response as closely as possible. Authorization values and secret-looking request fields are masked, and only selected headers are retained so the fixtures remain safe and deterministic. +The cassettes under provider directories such as `openai/` preserve the recorded request and response as closely as possible. Authorization is masked and API-key headers are excluded. The recorder masks known header/query credentials, including exact echoed values, but arbitrary body or query content is not automatically safe. Use controlled prompts and review every persisted field before promotion; retain required opaque continuation state or withhold the capture. Only selected headers are retained. Recorded headers are informational. In particular, `content-length` is not guaranteed to match the serialized body after sanitization or other approved cassette edits and must not be used as a fixture integrity check. @@ -14,7 +14,13 @@ Treat these files as provider evidence. Do not edit a recorded value merely to m ### Multi-turn upstream IR recordings -`upstream_ir/{scenario}/{provider}-{endpoint}-stream-{turn}.yaml` contains independent, unchanged provider recordings for `tests/upstream/test_multi_turn.py`. The scenarios are two-turn `text_chat`, `text_image_chat`, and `consecutive_user_text`, plus three-turn `tool_use` and `tool_use_reasoning`. Text, multimodal input, consecutive user messages, and tool use cover all three upstream clients; reasoning tool use covers Responses and Messages. +`upstream_ir/{scenario}/{provider}-{endpoint}-{mode}-{turn}.yaml` contains independent, unchanged provider recordings for `tests/upstream/test_multi_turn.py`. The scenarios are two-turn `text_chat`, `text_image_chat`, and `consecutive_user_text`, plus three-turn `tool_use` and `tool_use_reasoning`. Text, multimodal input, consecutive user messages, and tool use cover the three canonical upstream clients; reasoning tool use covers Responses and Messages. + +Provider cases use their own recordings under the same scenario directories and naming convention, such as `tool_use/fireworks-responses-stream-00.yaml`. Bedrock, Together, Fireworks, and Gemini also have independent Chat Completions text/tool captures such as `tool_use/togetherai-chat_completions-stream-00.yaml`, covering both native modes. Bedrock Responses and Chat Completions captures retain the explicit regional runtime URL; replay takes the destination from the recorded exchange. `tests/upstream/test_multi_turn.py` covers independent SDK parity, native actual-output continuation, normalized continuation, and representable downstream output. Expected request copies account only for normalized wire representations and omitted optional metadata; the recorded request and response bytes remain unchanged. Unsupported reasoning is covered by explicit rejection cases. + +The Chat Completions captures use Bedrock `global.openai.gpt-5.6-luna` through Singapore runtime, Together `Qwen/Qwen3.5-9B`, and Fireworks `accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b`, with reasoning disabled. They establish these model/settings combinations, not provider-wide model coverage. Native continuation uses SDK-parsed assistant output. Together repeats the streamed role, which the SDK accumulator concatenates; the caller restores `assistant` before reuse. Fireworks history omits null output-only fields that its input endpoint rejects. Replay follows those same caller choices without modifying recorded responses or production passthrough behavior. + +Gemini `gemini-3.1-flash-lite` text/tool captures use `reasoning_effort="minimal"` and preserve Google thought signatures on assistant messages and function calls. They were recorded on a [GitHub-hosted runner](https://github.com/EmbeddedLLM/molto/actions/runs/42160882628) and imported byte for byte. Caller history restores the single assistant role after SDK accumulation of repeated role deltas and removes only top-level null fields and SDK output-only metadata; nested opaque state remains intact. The independent SDK reference supplies index zero for recorded single-call chunks that omit an index, matching the documented Gemini repair. Native replay verifies complete output and actual-signature continuation. Normalized replay verifies signature-only IR parts; public Responses and Messages replay checks unchanged `encrypted_content`/`signature` values against independent SDK output and restores the original message/tool attachments on subsequent requests in both downstream modes. These tests reuse the unchanged recordings. `text_image_chat` sends text, an image, and trailing text in one user message on each turn, using the existing `tests/files/github.png` and `tests/files/xlsx.jpg` fixtures as data URLs. `consecutive_user_text` sends two adjacent user messages, each with two text parts, before each assistant response. Both scenarios retain actual assistant output as history and assert that the input IR is not mutated. They also inspect outgoing message roles and content grouping independently of cassette equality, so the expected fixtures cannot silently permit merged user messages or split multimodal parts. These are upstream-client projection checks; incoming request normalization remains covered by the adapter tests. @@ -56,7 +62,7 @@ The context-length streaming requests use the same model and equivalent streamin The streaming and non-streaming recordings under `errors/context_length_exceeded/` have their repeated request text shortened to a single `x` to keep fixtures small and replay fast. The original instruction and recorded responses, including token counts and SSE events, are preserved. These shortened requests test error handling through replay; they no longer reproduce context overflow against a live provider. -An error delivered inside an HTTP `200` stream is recorded under `response.sse`, retaining status `200`; it must not be rewritten as an HTTP `400` error. The OpenAI SDK may raise a plain `APIError` for such an event without attaching an HTTP status to the exception. If the SDK disconnects before the upstream stream finishes, the recorder saves the SSE lines received so far without adding a disconnect marker. That recording may be partial and does not establish which events the provider would have sent afterward. +An error delivered inside an HTTP `200` stream is recorded under `response.sse`, retaining status `200`; it must not be rewritten as an HTTP `400` error. The OpenAI SDK may raise a plain `APIError` for such an event without attaching an HTTP status to the exception. If the SDK disconnects before the upstream stream finishes, the recorder saves the SSE lines received so far without inventing terminal events. New captures include `stream_status` (`complete`, `disconnected`, or `transport_error`), `terminal_event`, and `error_event`. HTTP EOF does not prove model completion; an absent terminal marker remains visible. Legacy captures without these fields may be partial. SSE lines are normalized event evidence, not original TCP chunks or newline bytes. ## Matched cassettes @@ -159,3 +165,13 @@ Relevant test entry points and canonicalization helpers: - `tests/utils/test_test_utils.py` covers the canonicalization helpers themselves. When a matcher changes an SSE payload discriminator, update the corresponding `event:` header as part of the same change. Keep JSON key order and whitespace stable unless the changed value requires reserialization; this keeps fixture diffs focused on intentional semantic alignment. + +## Provider recording workflow + +`scripts/recorder_proxy.py` defaults to `/tmp/molto-recordings`, binds localhost, and makes one upstream attempt. Native SDK recording callers must also use `max_retries=0`. Non-SSE responses retain `response.body_bytes` as authoritative bytes and a decoded `body` for inspection. Replay prefers bytes; successful response matching drops this raw field on deliberately modified copies. Request-only error matching preserves the complete response unchanged. + +Record native SDK conversations through `scripts/recorder_proxy.py`, outside pytest, with `max_retries=0`. Carry actual SDK output into subsequent requests and append only caller input or tool results. Validate completion and preserve incomplete captures in staging for investigation. Promote only the exchanges needed by a regression or shared scenario, using the existing `{provider}-{endpoint}-{mode}-{turn:02}.yaml` filenames. No sidecar manifests, source snapshots, or duplicate historical corpus are required. + +For OpenRouter free-model recordings, use an explicit verified `:free` model, disabled provider fallbacks, zero price caps, and no plugins. Check current model availability before recording. Inspect all staged fields for credentials and private content before promotion. Never generate expected fixtures from Molto output or run pytest in recording mode. + +See the [provider support matrix](../../docs/provider-compatibility.md) for the selected protocols, recorded models, and remaining coverage gaps. diff --git a/tests/cassettes/upstream_ir/text_chat/bedrock-chat_completions-non_stream-00.yaml b/tests/cassettes/upstream_ir/text_chat/bedrock-chat_completions-non_stream-00.yaml new file mode 100644 index 0000000..a72fba9 --- /dev/null +++ b/tests/cassettes/upstream_ir/text_chat/bedrock-chat_completions-non_stream-00.yaml @@ -0,0 +1,73 @@ +filename: 2026-11-05-01a1ac2f-950b-7090-8d60-7cc02c851248 +request: + body: + max_completion_tokens: 512 + messages: + - content: + - text: Suggest a name for a robot gardener. + type: text + role: user + model: global.openai.gpt-5.6-luna + reasoning_effort: none + stream: false + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '210' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /openai/v1/chat/completions + query_params: {} +request_id: 01a1ac2f-950b-7090-8d60-7cc02c851248 +response: + body: + choices: + - finish_reason: stop + index: 0 + message: + annotations: [] + content: SproutBot. + refusal: null + role: assistant + created: 1793890162 + id: chatcmpl-pwrs6d7jniyc45kywext3nyggitwyt3fzi6lkyvuxrtygf6aq7ma + model: global.openai.gpt-5.6-luna + object: chat.completion + service_tier: default + system_fingerprint: null + usage: + completion_tokens: 8 + completion_tokens_details: + accepted_prediction_tokens: 0 + audio_tokens: 0 + reasoning_tokens: 0 + rejected_prediction_tokens: 0 + prompt_tokens: 14 + prompt_tokens_details: + audio_tokens: 0 + cache_write_tokens: 0 + cached_tokens: 0 + total_tokens: 22 + body_bytes: !!binary | + eyJjaG9pY2VzIjpbeyJmaW5pc2hfcmVhc29uIjoic3RvcCIsImluZGV4IjowLCJtZXNzYWdlIjp7 + ImFubm90YXRpb25zIjpbXSwiY29udGVudCI6IlNwcm91dEJvdC4iLCJyZWZ1c2FsIjpudWxsLCJy + b2xlIjoiYXNzaXN0YW50In19XSwiY3JlYXRlZCI6MTc5Mzg5MDE2MiwiaWQiOiJjaGF0Y21wbC1w + d3JzNmQ3am5peWM0NWt5d2V4dDNueWdnaXR3eXQzZnppNmxreXZ1eHJ0eWdmNmFxN21hIiwibW9k + ZWwiOiJnbG9iYWwub3BlbmFpLmdwdC01LjYtbHVuYSIsIm9iamVjdCI6ImNoYXQuY29tcGxldGlv + biIsInNlcnZpY2VfdGllciI6ImRlZmF1bHQiLCJ1c2FnZSI6eyJjb21wbGV0aW9uX3Rva2VucyI6 + OCwiY29tcGxldGlvbl90b2tlbnNfZGV0YWlscyI6eyJhY2NlcHRlZF9wcmVkaWN0aW9uX3Rva2Vu + cyI6MCwiYXVkaW9fdG9rZW5zIjowLCJyZWFzb25pbmdfdG9rZW5zIjowLCJyZWplY3RlZF9wcmVk + aWN0aW9uX3Rva2VucyI6MH0sInByb21wdF90b2tlbnMiOjE0LCJwcm9tcHRfdG9rZW5zX2RldGFp + bHMiOnsiYXVkaW9fdG9rZW5zIjowLCJjYWNoZV93cml0ZV90b2tlbnMiOjAsImNhY2hlZF90b2tl + bnMiOjB9LCJ0b3RhbF90b2tlbnMiOjIyfSwic3lzdGVtX2ZpbmdlcnByaW50IjpudWxsfQ== + headers: + connection: keep-alive + content-length: '622' + content-type: application/json + x-request-id: a961364d-e911-4a1d-9ae6-2b24611c2839 + status_code: 200 +timestamp: '2026-11-05T14:49:21.931990+00:00' +upstream_url: https://bedrock-runtime.ap-southeast-1.amazonaws.com/openai/v1/chat/completions diff --git a/tests/cassettes/upstream_ir/text_chat/bedrock-chat_completions-non_stream-01.yaml b/tests/cassettes/upstream_ir/text_chat/bedrock-chat_completions-non_stream-01.yaml new file mode 100644 index 0000000..40de0e7 --- /dev/null +++ b/tests/cassettes/upstream_ir/text_chat/bedrock-chat_completions-non_stream-01.yaml @@ -0,0 +1,87 @@ +filename: 2026-11-05-01a1ac2f-97e2-7b03-8cc0-0fcb5982ca23 +request: + body: + max_completion_tokens: 512 + messages: + - content: + - text: Suggest a name for a robot gardener. + type: text + role: user + - annotations: [] + content: SproutBot. + refusal: null + role: assistant + - content: + - text: Explain why that name fits. + type: text + role: user + model: global.openai.gpt-5.6-luna + reasoning_effort: none + stream: false + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '367' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /openai/v1/chat/completions + query_params: {} +request_id: 01a1ac2f-97e2-7b03-8cc0-0fcb5982ca23 +response: + body: + choices: + - finish_reason: stop + index: 0 + message: + annotations: [] + content: “SproutBot” fits because it combines **“sprout,”** a symbol of new + plant growth, with **“Bot,”** signaling a helpful robot. It sounds friendly, + memorable, and clearly suggests a machine designed to nurture gardens. + refusal: null + role: assistant + created: 1793890163 + id: chatcmpl-665j4euh2xd77u34imsnfv6awpkqazcfkl4tufifqkum3ns54k4q + model: global.openai.gpt-5.6-luna + object: chat.completion + service_tier: default + system_fingerprint: null + usage: + completion_tokens: 53 + completion_tokens_details: + accepted_prediction_tokens: 0 + audio_tokens: 0 + reasoning_tokens: 0 + rejected_prediction_tokens: 0 + prompt_tokens: 34 + prompt_tokens_details: + audio_tokens: 0 + cache_write_tokens: 0 + cached_tokens: 0 + total_tokens: 87 + body_bytes: !!binary | + eyJjaG9pY2VzIjpbeyJmaW5pc2hfcmVhc29uIjoic3RvcCIsImluZGV4IjowLCJtZXNzYWdlIjp7 + ImFubm90YXRpb25zIjpbXSwiY29udGVudCI6IuKAnFNwcm91dEJvdOKAnSBmaXRzIGJlY2F1c2Ug + aXQgY29tYmluZXMgKirigJxzcHJvdXQs4oCdKiogYSBzeW1ib2wgb2YgbmV3IHBsYW50IGdyb3d0 + aCwgd2l0aCAqKuKAnEJvdCzigJ0qKiBzaWduYWxpbmcgYSBoZWxwZnVsIHJvYm90LiBJdCBzb3Vu + ZHMgZnJpZW5kbHksIG1lbW9yYWJsZSwgYW5kIGNsZWFybHkgc3VnZ2VzdHMgYSBtYWNoaW5lIGRl + c2lnbmVkIHRvIG51cnR1cmUgZ2FyZGVucy4iLCJyZWZ1c2FsIjpudWxsLCJyb2xlIjoiYXNzaXN0 + YW50In19XSwiY3JlYXRlZCI6MTc5Mzg5MDE2MywiaWQiOiJjaGF0Y21wbC02NjVqNGV1aDJ4ZDc3 + dTM0aW1zbmZ2NmF3cGtxYXpjZmtsNHR1ZmlmcWt1bTNuczU0azRxIiwibW9kZWwiOiJnbG9iYWwu + b3BlbmFpLmdwdC01LjYtbHVuYSIsIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbiIsInNlcnZpY2Vf + dGllciI6ImRlZmF1bHQiLCJ1c2FnZSI6eyJjb21wbGV0aW9uX3Rva2VucyI6NTMsImNvbXBsZXRp + b25fdG9rZW5zX2RldGFpbHMiOnsiYWNjZXB0ZWRfcHJlZGljdGlvbl90b2tlbnMiOjAsImF1ZGlv + X3Rva2VucyI6MCwicmVhc29uaW5nX3Rva2VucyI6MCwicmVqZWN0ZWRfcHJlZGljdGlvbl90b2tl + bnMiOjB9LCJwcm9tcHRfdG9rZW5zIjozNCwicHJvbXB0X3Rva2Vuc19kZXRhaWxzIjp7ImF1ZGlv + X3Rva2VucyI6MCwiY2FjaGVfd3JpdGVfdG9rZW5zIjowLCJjYWNoZWRfdG9rZW5zIjowfSwidG90 + YWxfdG9rZW5zIjo4N30sInN5c3RlbV9maW5nZXJwcmludCI6bnVsbH0= + headers: + connection: keep-alive + content-length: '839' + content-type: application/json + x-request-id: 4f833f06-da63-475d-91b3-a4d6f9407cee + status_code: 200 +timestamp: '2026-11-05T14:49:22.658177+00:00' +upstream_url: https://bedrock-runtime.ap-southeast-1.amazonaws.com/openai/v1/chat/completions diff --git a/tests/cassettes/upstream_ir/text_chat/bedrock-chat_completions-stream-00.yaml b/tests/cassettes/upstream_ir/text_chat/bedrock-chat_completions-stream-00.yaml new file mode 100644 index 0000000..8c89b11 --- /dev/null +++ b/tests/cassettes/upstream_ir/text_chat/bedrock-chat_completions-stream-00.yaml @@ -0,0 +1,86 @@ +filename: 2026-11-05-01a1ac2f-8dd1-7691-82c6-b92edd6108f2 +request: + body: + max_completion_tokens: 512 + messages: + - content: + - text: Suggest a name for a robot gardener. + type: text + role: user + model: global.openai.gpt-5.6-luna + reasoning_effort: none + stream: true + stream_options: + include_usage: true + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '249' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /openai/v1/chat/completions + query_params: {} +request_id: 01a1ac2f-8dd1-7691-82c6-b92edd6108f2 +response: + error_event: false + headers: + connection: keep-alive + content-type: text/event-stream + x-request-id: 9d29619b-8fc8-4169-b2b8-7fb4e2847944 + sse: + - 'data: {"choices":[{"delta":{"content":"","role":"assistant","refusal":null},"finish_reason":null,"index":0}],"created":1793890160,"id":"chatcmpl-ycvefv7mo6fy7ad2qroyk5rdsg3xpsh5653ngkfh4ip3zsibslva","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefgh"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":"Spr"},"finish_reason":null,"index":0}],"created":1793890160,"id":"chatcmpl-ycvefv7mo6fy7ad2qroyk5rdsg3xpsh5653ngkfh4ip3zsibslva","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyz"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":"out"},"finish_reason":null,"index":0}],"created":1793890160,"id":"chatcmpl-ycvefv7mo6fy7ad2qroyk5rdsg3xpsh5653ngkfh4ip3zsibslva","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012345"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":"Bot"},"finish_reason":null,"index":0}],"created":1793890160,"id":"chatcmpl-ycvefv7mo6fy7ad2qroyk5rdsg3xpsh5653ngkfh4ip3zsibslva","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcde"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":"."},"finish_reason":null,"index":0}],"created":1793890160,"id":"chatcmpl-ycvefv7mo6fy7ad2qroyk5rdsg3xpsh5653ngkfh4ip3zsibslva","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrst"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{},"finish_reason":"stop","index":0}],"created":1793890160,"id":"chatcmpl-ycvefv7mo6fy7ad2qroyk5rdsg3xpsh5653ngkfh4ip3zsibslva","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHI"} + + ' + - ' + + ' + - 'data: {"choices":[],"created":1793890160,"id":"chatcmpl-ycvefv7mo6fy7ad2qroyk5rdsg3xpsh5653ngkfh4ip3zsibslva","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","usage":{"completion_tokens":8,"completion_tokens_details":{"accepted_prediction_tokens":0,"audio_tokens":0,"reasoning_tokens":0,"rejected_prediction_tokens":0},"prompt_tokens":14,"prompt_tokens_details":{"audio_tokens":0,"cache_write_tokens":0,"cached_tokens":0},"total_tokens":22},"system_fingerprint":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWX"} + + ' + - ' + + ' + - 'data: [DONE] + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: '[DONE]' +timestamp: '2026-11-05T14:49:20.081125+00:00' +upstream_url: https://bedrock-runtime.ap-southeast-1.amazonaws.com/openai/v1/chat/completions diff --git a/tests/cassettes/upstream_ir/text_chat/bedrock-chat_completions-stream-01.yaml b/tests/cassettes/upstream_ir/text_chat/bedrock-chat_completions-stream-01.yaml new file mode 100644 index 0000000..cf177a9 --- /dev/null +++ b/tests/cassettes/upstream_ir/text_chat/bedrock-chat_completions-stream-01.yaml @@ -0,0 +1,385 @@ +filename: 2026-11-05-01a1ac2f-910f-7f51-be4e-aca2ecd4ad1c +request: + body: + max_completion_tokens: 512 + messages: + - content: + - text: Suggest a name for a robot gardener. + type: text + role: user + - annotations: null + audio: null + content: SproutBot. + function_call: null + refusal: null + role: assistant + tool_calls: null + - content: + - text: Explain why that name fits. + type: text + role: user + model: global.openai.gpt-5.6-luna + reasoning_effort: none + stream: true + stream_options: + include_usage: true + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '460' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /openai/v1/chat/completions + query_params: {} +request_id: 01a1ac2f-910f-7f51-be4e-aca2ecd4ad1c +response: + error_event: false + headers: + connection: keep-alive + content-type: text/event-stream + x-request-id: af52885d-7fb8-4f67-bafc-7dc1ff4b231b + sse: + - 'data: {"choices":[{"delta":{"content":"","role":"assistant","refusal":null},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":"“"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012345678"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":"Spr"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxy"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":"out"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":"Bot"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":"”"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvw"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" fits"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHI"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" because"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012345678"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" it"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" combines"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVW"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" **"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuv"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":"“"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVW"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":"spr"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuv"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":"out"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":",”"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvw"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":"**"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGH"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" a"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQR"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" symbol"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJ"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" of"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzAB"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" new"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKL"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" plant"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGH"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" growth"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDE"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":","},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" with"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwx"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" **"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNO"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":"“"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":"Bot"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefgh"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":",”"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLM"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":"**"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwx"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" a"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCD"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" clear"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstu"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" reference"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCD"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" to"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCD"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" a"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"ab"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" robot"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJK"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":"."},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQR"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" It"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmno"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" sounds"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" friendly"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGH"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":","},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQR"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" memorable"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFG"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":","},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKL"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" and"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012345678"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" immediately"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" suggests"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrst"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" a"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijkl"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" machine"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" designed"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRST"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" to"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCD"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" help"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcde"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" plants"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzAB"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" grow"},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyz"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":"."},"finish_reason":null,"index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyz"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{},"finish_reason":"stop","index":0}],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGH"} + + ' + - ' + + ' + - 'data: {"choices":[],"created":1793890161,"id":"chatcmpl-mzdaovpmmlflnjno6u2polq6jrb2kie7qexlvmklmvlyoddw3d4q","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","usage":{"completion_tokens":56,"completion_tokens_details":{"accepted_prediction_tokens":0,"audio_tokens":0,"reasoning_tokens":0,"rejected_prediction_tokens":0},"prompt_tokens":34,"prompt_tokens_details":{"audio_tokens":0,"cache_write_tokens":0,"cached_tokens":0},"total_tokens":90},"system_fingerprint":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"} + + ' + - ' + + ' + - 'data: [DONE] + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: '[DONE]' +timestamp: '2026-11-05T14:49:20.911708+00:00' +upstream_url: https://bedrock-runtime.ap-southeast-1.amazonaws.com/openai/v1/chat/completions diff --git a/tests/cassettes/upstream_ir/text_chat/bedrock-responses-non_stream-00.yaml b/tests/cassettes/upstream_ir/text_chat/bedrock-responses-non_stream-00.yaml new file mode 100644 index 0000000..1eb42a2 --- /dev/null +++ b/tests/cassettes/upstream_ir/text_chat/bedrock-responses-non_stream-00.yaml @@ -0,0 +1,119 @@ +filename: 2026-11-05-01a1aab8-e781-7160-af4d-e3fc69a81518 +request: + body: + input: + - content: + - text: Suggest a name for a robot gardener. + type: input_text + role: user + max_output_tokens: 1024 + model: global.openai.gpt-5.6-luna + reasoning: + effort: none + store: false + stream: false + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '228' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /openai/v1/responses + query_params: {} +request_id: 01a1aab8-e781-7160-af4d-e3fc69a81518 +response: + body: + background: false + billing: + payer: developer + completed_at: 1793865607 + created_at: 1793865607 + error: null + frequency_penalty: 0.0 + id: resp_oqoih6h2g47bnceyx5wf72ho4o4gg5vxkjz3kl5kqlsm4tw6tqba + incomplete_details: null + instructions: null + max_output_tokens: 1024 + max_tool_calls: null + metadata: {} + model: global.openai.gpt-5.6-luna + moderation: null + object: response + output: + - content: + - annotations: [] + logprobs: [] + text: Rooty McSprout. + type: output_text + id: msg_009f98f3cf515552a462b5ce542f59f0 + phase: final_answer + role: assistant + status: completed + type: message + parallel_tool_calls: true + presence_penalty: 0.0 + previous_response_id: null + prompt_cache_key: null + prompt_cache_retention: in_memory + reasoning: + context: all_turns + effort: none + summary: null + safety_identifier: null + service_tier: default + status: completed + store: false + temperature: 1.0 + text: + format: + type: text + verbosity: medium + tool_choice: auto + tools: [] + top_logprobs: 0 + top_p: 0.98 + truncation: disabled + usage: + input_tokens: 14 + input_tokens_details: + cache_write_tokens: 0 + cached_tokens: 0 + output_tokens: 10 + output_tokens_details: + reasoning_tokens: 0 + total_tokens: 24 + user: null + body_bytes: !!binary | + eyJiYWNrZ3JvdW5kIjpmYWxzZSwiYmlsbGluZyI6eyJwYXllciI6ImRldmVsb3BlciJ9LCJjb21w + bGV0ZWRfYXQiOjE3OTM4NjU2MDcsImNyZWF0ZWRfYXQiOjE3OTM4NjU2MDcsImVycm9yIjpudWxs + LCJmcmVxdWVuY3lfcGVuYWx0eSI6MC4wLCJpZCI6InJlc3Bfb3FvaWg2aDJnNDdibmNleXg1d2Y3 + MmhvNG80Z2c1dnhranoza2w1a3Fsc200dHc2dHFiYSIsImluY29tcGxldGVfZGV0YWlscyI6bnVs + bCwiaW5zdHJ1Y3Rpb25zIjpudWxsLCJtYXhfb3V0cHV0X3Rva2VucyI6MTAyNCwibWF4X3Rvb2xf + Y2FsbHMiOm51bGwsIm1ldGFkYXRhIjp7fSwibW9kZWwiOiJnbG9iYWwub3BlbmFpLmdwdC01LjYt + bHVuYSIsIm9iamVjdCI6InJlc3BvbnNlIiwib3V0cHV0IjpbeyJjb250ZW50IjpbeyJhbm5vdGF0 + aW9ucyI6W10sImxvZ3Byb2JzIjpbXSwidGV4dCI6IlJvb3R5IE1jU3Byb3V0LiIsInR5cGUiOiJv + dXRwdXRfdGV4dCJ9XSwiaWQiOiJtc2dfMDA5Zjk4ZjNjZjUxNTU1MmE0NjJiNWNlNTQyZjU5ZjAi + LCJwaGFzZSI6ImZpbmFsX2Fuc3dlciIsInJvbGUiOiJhc3Npc3RhbnQiLCJzdGF0dXMiOiJjb21w + bGV0ZWQiLCJ0eXBlIjoibWVzc2FnZSJ9XSwicGFyYWxsZWxfdG9vbF9jYWxscyI6dHJ1ZSwicHJl + c2VuY2VfcGVuYWx0eSI6MC4wLCJwcmV2aW91c19yZXNwb25zZV9pZCI6bnVsbCwicHJvbXB0X2Nh + Y2hlX2tleSI6bnVsbCwicHJvbXB0X2NhY2hlX3JldGVudGlvbiI6ImluX21lbW9yeSIsInJlYXNv + bmluZyI6eyJzdW1tYXJ5IjpudWxsLCJlZmZvcnQiOiJub25lIiwiY29udGV4dCI6ImFsbF90dXJu + cyJ9LCJzYWZldHlfaWRlbnRpZmllciI6bnVsbCwic2VydmljZV90aWVyIjoiZGVmYXVsdCIsInN0 + YXR1cyI6ImNvbXBsZXRlZCIsInN0b3JlIjpmYWxzZSwidGVtcGVyYXR1cmUiOjEuMCwidGV4dCI6 + eyJmb3JtYXQiOnsidHlwZSI6InRleHQifSwidmVyYm9zaXR5IjoibWVkaXVtIn0sInRvb2xfY2hv + aWNlIjoiYXV0byIsInRvb2xzIjpbXSwidG9wX2xvZ3Byb2JzIjowLCJ0b3BfcCI6MC45OCwidHJ1 + bmNhdGlvbiI6ImRpc2FibGVkIiwidXNhZ2UiOnsiaW5wdXRfdG9rZW5zIjoxNCwiaW5wdXRfdG9r + ZW5zX2RldGFpbHMiOnsiY2FjaGVfd3JpdGVfdG9rZW5zIjowLCJjYWNoZWRfdG9rZW5zIjowfSwi + b3V0cHV0X3Rva2VucyI6MTAsIm91dHB1dF90b2tlbnNfZGV0YWlscyI6eyJyZWFzb25pbmdfdG9r + ZW5zIjowfSwidG90YWxfdG9rZW5zIjoyNH0sInVzZXIiOm51bGwsIm1vZGVyYXRpb24iOm51bGx9 + headers: + connection: keep-alive + content-length: '1254' + content-type: application/json + x-request-id: 7b94bef1-e188-4ecd-8938-8dcdf4126d76 + status_code: 200 +timestamp: '2026-11-05T08:00:07.041590+00:00' +upstream_url: https://bedrock-runtime.ap-southeast-1.amazonaws.com/openai/v1/responses diff --git a/tests/cassettes/upstream_ir/text_chat/bedrock-responses-non_stream-01.yaml b/tests/cassettes/upstream_ir/text_chat/bedrock-responses-non_stream-01.yaml new file mode 100644 index 0000000..8792d25 --- /dev/null +++ b/tests/cassettes/upstream_ir/text_chat/bedrock-responses-non_stream-01.yaml @@ -0,0 +1,149 @@ +filename: 2026-11-05-01a1aab8-eb06-71e2-8b54-d9dc91003d4a +request: + body: + input: + - content: + - text: Suggest a name for a robot gardener. + type: input_text + role: user + - content: + - annotations: [] + logprobs: [] + text: Rooty McSprout. + type: output_text + id: msg_009f98f3cf515552a462b5ce542f59f0 + phase: final_answer + role: assistant + status: completed + type: message + - content: + - text: Explain why that name fits. + type: input_text + role: user + max_output_tokens: 1024 + model: global.openai.gpt-5.6-luna + reasoning: + effort: none + store: false + stream: false + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '532' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /openai/v1/responses + query_params: {} +request_id: 01a1aab8-eb06-71e2-8b54-d9dc91003d4a +response: + body: + background: false + billing: + payer: developer + completed_at: 1793865609 + created_at: 1793865608 + error: null + frequency_penalty: 0.0 + id: resp_zic253hopaobsxggujhowjeomvbjgnicbp5fi7qbjceyw56i3rsa + incomplete_details: null + instructions: null + max_output_tokens: 1024 + max_tool_calls: null + metadata: {} + model: global.openai.gpt-5.6-luna + moderation: null + object: response + output: + - content: + - annotations: [] + logprobs: [] + text: '“Rooty McSprout” fits because it combines two gardening ideas: + + + - **“Rooty”** suggests roots, soil, and healthy plant growth. + + - **“McSprout”** evokes new seedlings and gives the robot a friendly, playful + personality. + + + Together, the name sounds cheerful, memorable, and perfectly suited to a + robot that helps plants grow.' + type: output_text + id: msg_d714798895445093b95e6d5f51fa572a + phase: final_answer + role: assistant + status: completed + type: message + parallel_tool_calls: true + presence_penalty: 0.0 + previous_response_id: null + prompt_cache_key: null + prompt_cache_retention: in_memory + reasoning: + context: all_turns + effort: none + summary: null + safety_identifier: null + service_tier: default + status: completed + store: false + temperature: 1.0 + text: + format: + type: text + verbosity: medium + tool_choice: auto + tools: [] + top_logprobs: 0 + top_p: 0.98 + truncation: disabled + usage: + input_tokens: 36 + input_tokens_details: + cache_write_tokens: 0 + cached_tokens: 0 + output_tokens: 77 + output_tokens_details: + reasoning_tokens: 0 + total_tokens: 113 + user: null + body_bytes: !!binary | + eyJiYWNrZ3JvdW5kIjpmYWxzZSwiYmlsbGluZyI6eyJwYXllciI6ImRldmVsb3BlciJ9LCJjb21w + bGV0ZWRfYXQiOjE3OTM4NjU2MDksImNyZWF0ZWRfYXQiOjE3OTM4NjU2MDgsImVycm9yIjpudWxs + LCJmcmVxdWVuY3lfcGVuYWx0eSI6MC4wLCJpZCI6InJlc3BfemljMjUzaG9wYW9ic3hnZ3VqaG93 + amVvbXZiamduaWNicDVmaTdxYmpjZXl3NTZpM3JzYSIsImluY29tcGxldGVfZGV0YWlscyI6bnVs + bCwiaW5zdHJ1Y3Rpb25zIjpudWxsLCJtYXhfb3V0cHV0X3Rva2VucyI6MTAyNCwibWF4X3Rvb2xf + Y2FsbHMiOm51bGwsIm1ldGFkYXRhIjp7fSwibW9kZWwiOiJnbG9iYWwub3BlbmFpLmdwdC01LjYt + bHVuYSIsIm9iamVjdCI6InJlc3BvbnNlIiwib3V0cHV0IjpbeyJjb250ZW50IjpbeyJhbm5vdGF0 + aW9ucyI6W10sImxvZ3Byb2JzIjpbXSwidGV4dCI6IuKAnFJvb3R5IE1jU3Byb3V04oCdIGZpdHMg + YmVjYXVzZSBpdCBjb21iaW5lcyB0d28gZ2FyZGVuaW5nIGlkZWFzOlxuXG4tICoq4oCcUm9vdHni + gJ0qKiBzdWdnZXN0cyByb290cywgc29pbCwgYW5kIGhlYWx0aHkgcGxhbnQgZ3Jvd3RoLlxuLSAq + KuKAnE1jU3Byb3V04oCdKiogZXZva2VzIG5ldyBzZWVkbGluZ3MgYW5kIGdpdmVzIHRoZSByb2Jv + dCBhIGZyaWVuZGx5LCBwbGF5ZnVsIHBlcnNvbmFsaXR5LlxuXG5Ub2dldGhlciwgdGhlIG5hbWUg + c291bmRzIGNoZWVyZnVsLCBtZW1vcmFibGUsIGFuZCBwZXJmZWN0bHkgc3VpdGVkIHRvIGEgcm9i + b3QgdGhhdCBoZWxwcyBwbGFudHMgZ3Jvdy4iLCJ0eXBlIjoib3V0cHV0X3RleHQifV0sImlkIjoi + bXNnX2Q3MTQ3OTg4OTU0NDUwOTNiOTVlNmQ1ZjUxZmE1NzJhIiwicGhhc2UiOiJmaW5hbF9hbnN3 + ZXIiLCJyb2xlIjoiYXNzaXN0YW50Iiwic3RhdHVzIjoiY29tcGxldGVkIiwidHlwZSI6Im1lc3Nh + Z2UifV0sInBhcmFsbGVsX3Rvb2xfY2FsbHMiOnRydWUsInByZXNlbmNlX3BlbmFsdHkiOjAuMCwi + cHJldmlvdXNfcmVzcG9uc2VfaWQiOm51bGwsInByb21wdF9jYWNoZV9rZXkiOm51bGwsInByb21w + dF9jYWNoZV9yZXRlbnRpb24iOiJpbl9tZW1vcnkiLCJyZWFzb25pbmciOnsic3VtbWFyeSI6bnVs + bCwiZWZmb3J0Ijoibm9uZSIsImNvbnRleHQiOiJhbGxfdHVybnMifSwic2FmZXR5X2lkZW50aWZp + ZXIiOm51bGwsInNlcnZpY2VfdGllciI6ImRlZmF1bHQiLCJzdGF0dXMiOiJjb21wbGV0ZWQiLCJz + dG9yZSI6ZmFsc2UsInRlbXBlcmF0dXJlIjoxLjAsInRleHQiOnsiZm9ybWF0Ijp7InR5cGUiOiJ0 + ZXh0In0sInZlcmJvc2l0eSI6Im1lZGl1bSJ9LCJ0b29sX2Nob2ljZSI6ImF1dG8iLCJ0b29scyI6 + W10sInRvcF9sb2dwcm9icyI6MCwidG9wX3AiOjAuOTgsInRydW5jYXRpb24iOiJkaXNhYmxlZCIs + InVzYWdlIjp7ImlucHV0X3Rva2VucyI6MzYsImlucHV0X3Rva2Vuc19kZXRhaWxzIjp7ImNhY2hl + X3dyaXRlX3Rva2VucyI6MCwiY2FjaGVkX3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjc3LCJv + dXRwdXRfdG9rZW5zX2RldGFpbHMiOnsicmVhc29uaW5nX3Rva2VucyI6MH0sInRvdGFsX3Rva2Vu + cyI6MTEzfSwidXNlciI6bnVsbCwibW9kZXJhdGlvbiI6bnVsbH0= + headers: + connection: keep-alive + content-length: '1577' + content-type: application/json + x-request-id: 77396da7-7b7d-400b-84ab-f59bba2bd231 + status_code: 200 +timestamp: '2026-11-05T08:00:07.942529+00:00' +upstream_url: https://bedrock-runtime.ap-southeast-1.amazonaws.com/openai/v1/responses diff --git a/tests/cassettes/upstream_ir/text_chat/bedrock-responses-stream-00.yaml b/tests/cassettes/upstream_ir/text_chat/bedrock-responses-stream-00.yaml new file mode 100644 index 0000000..b23f21b --- /dev/null +++ b/tests/cassettes/upstream_ir/text_chat/bedrock-responses-stream-00.yaml @@ -0,0 +1,122 @@ +filename: 2026-11-05-01a1aab8-ded7-7ba0-8afa-477fd82f04be +request: + body: + input: + - content: + - text: Suggest a name for a robot gardener. + type: input_text + role: user + max_output_tokens: 1024 + model: global.openai.gpt-5.6-luna + reasoning: + effort: none + store: false + stream: true + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '227' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /openai/v1/responses + query_params: {} +request_id: 01a1aab8-ded7-7ba0-8afa-477fd82f04be +response: + error_event: false + headers: + connection: keep-alive + content-type: text/event-stream + x-request-id: b6cc9cdd-34ae-428e-9890-0b84c29d0a21 + sse: + - 'data: {"response":{"background":false,"completed_at":null,"created_at":1793865605,"error":null,"frequency_penalty":0.0,"id":"resp_dvp5zzcciw2kmnbtey5csxisvsjb7n4oowmpu6sv74sz3vfny2pa","incomplete_details":null,"instructions":null,"max_output_tokens":1024,"max_tool_calls":null,"metadata":{},"model":"global.openai.gpt-5.6-luna","object":"response","output":[],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"summary":null,"effort":"none","context":"all_turns"},"safety_identifier":null,"service_tier":"auto","status":"in_progress","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[],"top_logprobs":0,"top_p":0.98,"truncation":"disabled","usage":null,"user":null,"moderation":null},"sequence_number":0,"type":"response.created"} + + ' + - ' + + ' + - 'data: {"response":{"background":false,"completed_at":null,"created_at":1793865605,"error":null,"frequency_penalty":0.0,"id":"resp_dvp5zzcciw2kmnbtey5csxisvsjb7n4oowmpu6sv74sz3vfny2pa","incomplete_details":null,"instructions":null,"max_output_tokens":1024,"max_tool_calls":null,"metadata":{},"model":"global.openai.gpt-5.6-luna","object":"response","output":[],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"summary":null,"effort":"none","context":"all_turns"},"safety_identifier":null,"service_tier":"auto","status":"in_progress","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[],"top_logprobs":0,"top_p":0.98,"truncation":"disabled","usage":null,"user":null,"moderation":null},"sequence_number":1,"type":"response.in_progress"} + + ' + - ' + + ' + - 'data: {"item":{"content":[],"id":"msg_a4a4e9a05635556180b2632131a5ca20","phase":"final_answer","role":"assistant","status":"in_progress","type":"message"},"output_index":0,"sequence_number":2,"type":"response.output_item.added"} + + ' + - ' + + ' + - 'data: {"content_index":0,"item_id":"msg_a4a4e9a05635556180b2632131a5ca20","output_index":0,"part":{"annotations":[],"logprobs":[],"text":"","type":"output_text"},"sequence_number":3,"type":"response.content_part.added"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":"Spr","item_id":"msg_a4a4e9a05635556180b2632131a5ca20","logprobs":[],"obfuscation":"abcdefg","output_index":0,"sequence_number":4,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":"out","item_id":"msg_a4a4e9a05635556180b2632131a5ca20","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuv","output_index":0,"sequence_number":5,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":"-B","item_id":"msg_a4a4e9a05635556180b2632131a5ca20","logprobs":[],"obfuscation":"abcdefghijklmnopqr","output_index":0,"sequence_number":6,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":"ot","item_id":"msg_a4a4e9a05635556180b2632131a5ca20","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012345678","output_index":0,"sequence_number":7,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":".","item_id":"msg_a4a4e9a05635556180b2632131a5ca20","logprobs":[],"obfuscation":"abcdefg","output_index":0,"sequence_number":8,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"item_id":"msg_a4a4e9a05635556180b2632131a5ca20","logprobs":[],"output_index":0,"sequence_number":9,"text":"Sprout-Bot.","type":"response.output_text.done"} + + ' + - ' + + ' + - 'data: {"content_index":0,"item_id":"msg_a4a4e9a05635556180b2632131a5ca20","output_index":0,"part":{"annotations":[],"logprobs":[],"text":"Sprout-Bot.","type":"output_text"},"sequence_number":10,"type":"response.content_part.done"} + + ' + - ' + + ' + - 'data: {"item":{"content":[{"annotations":[],"logprobs":[],"text":"Sprout-Bot.","type":"output_text"}],"id":"msg_a4a4e9a05635556180b2632131a5ca20","phase":"final_answer","role":"assistant","status":"completed","type":"message"},"output_index":0,"sequence_number":11,"type":"response.output_item.done"} + + ' + - ' + + ' + - 'data: {"response":{"background":false,"completed_at":1793865605,"created_at":1793865605,"error":null,"frequency_penalty":0.0,"id":"resp_dvp5zzcciw2kmnbtey5csxisvsjb7n4oowmpu6sv74sz3vfny2pa","incomplete_details":null,"instructions":null,"max_output_tokens":1024,"max_tool_calls":null,"metadata":{},"model":"global.openai.gpt-5.6-luna","object":"response","output":[{"content":[{"annotations":[],"logprobs":[],"text":"Sprout-Bot.","type":"output_text"}],"id":"msg_a4a4e9a05635556180b2632131a5ca20","phase":"final_answer","role":"assistant","status":"completed","type":"message"}],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"summary":null,"effort":"none","context":"all_turns"},"safety_identifier":null,"service_tier":"default","status":"completed","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[],"top_logprobs":0,"top_p":0.98,"truncation":"disabled","usage":{"input_tokens":14,"input_tokens_details":{"cache_write_tokens":0,"cached_tokens":0},"output_tokens":9,"output_tokens_details":{"reasoning_tokens":0},"total_tokens":23},"user":null,"moderation":null},"sequence_number":12,"type":"response.completed"} + + ' + - ' + + ' + - 'data: [DONE] + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: '[DONE]' +timestamp: '2026-11-05T08:00:04.823373+00:00' +upstream_url: https://bedrock-runtime.ap-southeast-1.amazonaws.com/openai/v1/responses diff --git a/tests/cassettes/upstream_ir/text_chat/bedrock-responses-stream-01.yaml b/tests/cassettes/upstream_ir/text_chat/bedrock-responses-stream-01.yaml new file mode 100644 index 0000000..dd662da --- /dev/null +++ b/tests/cassettes/upstream_ir/text_chat/bedrock-responses-stream-01.yaml @@ -0,0 +1,430 @@ +filename: 2026-11-05-01a1aab8-e336-7a83-ab05-dfe7677e1b97 +request: + body: + input: + - content: + - text: Suggest a name for a robot gardener. + type: input_text + role: user + - content: + - annotations: [] + logprobs: [] + text: Sprout-Bot. + type: output_text + id: msg_a4a4e9a05635556180b2632131a5ca20 + phase: final_answer + role: assistant + status: completed + type: message + - content: + - text: Explain why that name fits. + type: input_text + role: user + max_output_tokens: 1024 + model: global.openai.gpt-5.6-luna + reasoning: + effort: none + store: false + stream: true + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '527' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /openai/v1/responses + query_params: {} +request_id: 01a1aab8-e336-7a83-ab05-dfe7677e1b97 +response: + error_event: false + headers: + connection: keep-alive + content-type: text/event-stream + x-request-id: 622603e3-4d9b-4e79-b055-42131ee44565 + sse: + - 'data: {"response":{"background":false,"completed_at":null,"created_at":1793865606,"error":null,"frequency_penalty":0.0,"id":"resp_54by57osw7qqxd7ghsrulv7cskfnc2c5vprqkxh7htkbzrjhskva","incomplete_details":null,"instructions":null,"max_output_tokens":1024,"max_tool_calls":null,"metadata":{},"model":"global.openai.gpt-5.6-luna","object":"response","output":[],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"summary":null,"effort":"none","context":"all_turns"},"safety_identifier":null,"service_tier":"auto","status":"in_progress","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[],"top_logprobs":0,"top_p":0.98,"truncation":"disabled","usage":null,"user":null,"moderation":null},"sequence_number":0,"type":"response.created"} + + ' + - ' + + ' + - 'data: {"response":{"background":false,"completed_at":null,"created_at":1793865606,"error":null,"frequency_penalty":0.0,"id":"resp_54by57osw7qqxd7ghsrulv7cskfnc2c5vprqkxh7htkbzrjhskva","incomplete_details":null,"instructions":null,"max_output_tokens":1024,"max_tool_calls":null,"metadata":{},"model":"global.openai.gpt-5.6-luna","object":"response","output":[],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"summary":null,"effort":"none","context":"all_turns"},"safety_identifier":null,"service_tier":"auto","status":"in_progress","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[],"top_logprobs":0,"top_p":0.98,"truncation":"disabled","usage":null,"user":null,"moderation":null},"sequence_number":1,"type":"response.in_progress"} + + ' + - ' + + ' + - 'data: {"item":{"content":[],"id":"msg_1f139e7eea3052f6b14c49d26458fc20","phase":"final_answer","role":"assistant","status":"in_progress","type":"message"},"output_index":0,"sequence_number":2,"type":"response.output_item.added"} + + ' + - ' + + ' + - 'data: {"content_index":0,"item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","output_index":0,"part":{"annotations":[],"logprobs":[],"text":"","type":"output_text"},"sequence_number":3,"type":"response.content_part.added"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":"“","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01","output_index":0,"sequence_number":4,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":"Spr","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcd","output_index":0,"sequence_number":5,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":"out","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqrs","output_index":0,"sequence_number":6,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":"-B","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRST","output_index":0,"sequence_number":7,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":"ot","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGH","output_index":0,"sequence_number":8,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":"”","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghij","output_index":0,"sequence_number":9,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" fits","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKL","output_index":0,"sequence_number":10,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" because","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234","output_index":0,"sequence_number":11,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" it","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklm","output_index":0,"sequence_number":12,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" combines","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijk","output_index":0,"sequence_number":13,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" **","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXY","output_index":0,"sequence_number":14,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":"“","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdef","output_index":0,"sequence_number":15,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":"spr","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456","output_index":0,"sequence_number":16,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":"out","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRS","output_index":0,"sequence_number":17,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":",”","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcde","output_index":0,"sequence_number":18,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":"**","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHI","output_index":0,"sequence_number":19,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" symbol","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234","output_index":0,"sequence_number":20,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":"izing","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnop","output_index":0,"sequence_number":21,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" plants","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFG","output_index":0,"sequence_number":22,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" and","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqrs","output_index":0,"sequence_number":23,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" new","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP","output_index":0,"sequence_number":24,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" growth","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvw","output_index":0,"sequence_number":25,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":",","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWX","output_index":0,"sequence_number":26,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" with","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqr","output_index":0,"sequence_number":27,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" **","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRST","output_index":0,"sequence_number":28,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":"“","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijk","output_index":0,"sequence_number":29,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":"bot","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGH","output_index":0,"sequence_number":30,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":",”","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRST","output_index":0,"sequence_number":31,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":"**","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234","output_index":0,"sequence_number":32,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" a","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01","output_index":0,"sequence_number":33,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" familiar","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdef","output_index":0,"sequence_number":34,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" shorthand","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567","output_index":0,"sequence_number":35,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" for","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyz","output_index":0,"sequence_number":36,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" robot","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvw","output_index":0,"sequence_number":37,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":".","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqr","output_index":0,"sequence_number":38,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" It","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmno","output_index":0,"sequence_number":39,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":"’s","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP","output_index":0,"sequence_number":40,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" short","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzABCD","output_index":0,"sequence_number":41,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":",","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmn","output_index":0,"sequence_number":42,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" friendly","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHI","output_index":0,"sequence_number":43,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":",","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXY","output_index":0,"sequence_number":44,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" and","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzA","output_index":0,"sequence_number":45,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" immediately","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmn","output_index":0,"sequence_number":46,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" suggests","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234","output_index":0,"sequence_number":47,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" a","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDE","output_index":0,"sequence_number":48,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" robot","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHI","output_index":0,"sequence_number":49,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" designed","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJK","output_index":0,"sequence_number":50,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" to","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012","output_index":0,"sequence_number":51,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" help","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzAB","output_index":0,"sequence_number":52,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" plants","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopq","output_index":0,"sequence_number":53,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" grow","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghij","output_index":0,"sequence_number":54,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":".","item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN","output_index":0,"sequence_number":55,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","logprobs":[],"output_index":0,"sequence_number":56,"text":"“Sprout-Bot” + fits because it combines **“sprout,”** symbolizing plants and new growth, with + **“bot,”** a familiar shorthand for robot. It’s short, friendly, and immediately + suggests a robot designed to help plants grow.","type":"response.output_text.done"} + + ' + - ' + + ' + - 'data: {"content_index":0,"item_id":"msg_1f139e7eea3052f6b14c49d26458fc20","output_index":0,"part":{"annotations":[],"logprobs":[],"text":"“Sprout-Bot” + fits because it combines **“sprout,”** symbolizing plants and new growth, with + **“bot,”** a familiar shorthand for robot. It’s short, friendly, and immediately + suggests a robot designed to help plants grow.","type":"output_text"},"sequence_number":57,"type":"response.content_part.done"} + + ' + - ' + + ' + - 'data: {"item":{"content":[{"annotations":[],"logprobs":[],"text":"“Sprout-Bot” + fits because it combines **“sprout,”** symbolizing plants and new growth, with + **“bot,”** a familiar shorthand for robot. It’s short, friendly, and immediately + suggests a robot designed to help plants grow.","type":"output_text"}],"id":"msg_1f139e7eea3052f6b14c49d26458fc20","phase":"final_answer","role":"assistant","status":"completed","type":"message"},"output_index":0,"sequence_number":58,"type":"response.output_item.done"} + + ' + - ' + + ' + - 'data: {"response":{"background":false,"completed_at":1793865606,"created_at":1793865606,"error":null,"frequency_penalty":0.0,"id":"resp_54by57osw7qqxd7ghsrulv7cskfnc2c5vprqkxh7htkbzrjhskva","incomplete_details":null,"instructions":null,"max_output_tokens":1024,"max_tool_calls":null,"metadata":{},"model":"global.openai.gpt-5.6-luna","object":"response","output":[{"content":[{"annotations":[],"logprobs":[],"text":"“Sprout-Bot” + fits because it combines **“sprout,”** symbolizing plants and new growth, with + **“bot,”** a familiar shorthand for robot. It’s short, friendly, and immediately + suggests a robot designed to help plants grow.","type":"output_text"}],"id":"msg_1f139e7eea3052f6b14c49d26458fc20","phase":"final_answer","role":"assistant","status":"completed","type":"message"}],"parallel_tool_calls":true,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"summary":null,"effort":"none","context":"all_turns"},"safety_identifier":null,"service_tier":"default","status":"completed","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[],"top_logprobs":0,"top_p":0.98,"truncation":"disabled","usage":{"input_tokens":35,"input_tokens_details":{"cache_write_tokens":0,"cached_tokens":0},"output_tokens":56,"output_tokens_details":{"reasoning_tokens":0},"total_tokens":91},"user":null,"moderation":null},"sequence_number":59,"type":"response.completed"} + + ' + - ' + + ' + - 'data: [DONE] + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: '[DONE]' +timestamp: '2026-11-05T08:00:05.942680+00:00' +upstream_url: https://bedrock-runtime.ap-southeast-1.amazonaws.com/openai/v1/responses diff --git a/tests/cassettes/upstream_ir/text_chat/fireworks-chat_completions-non_stream-00.yaml b/tests/cassettes/upstream_ir/text_chat/fireworks-chat_completions-non_stream-00.yaml new file mode 100644 index 0000000..12e1ade --- /dev/null +++ b/tests/cassettes/upstream_ir/text_chat/fireworks-chat_completions-non_stream-00.yaml @@ -0,0 +1,146 @@ +filename: 2026-11-05-01a1ac2f-b626-7822-abab-43d0a0994999 +request: + body: + max_completion_tokens: 1024 + messages: + - content: + - text: Suggest a name for a robot gardener. + type: text + role: user + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + reasoning_effort: none + stream: false + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '241' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /inference/v1/chat/completions + query_params: {} +request_id: 01a1ac2f-b626-7822-abab-43d0a0994999 +response: + body: + choices: + - finish_reason: stop + index: 0 + message: + content: 'Here are a few suggestions for a robot gardener, categorized by + the "vibe" you might be going for: + + + **Playful & Punny** + + * **Herbie** (A classic robot name, or a nod to the Love Bug car, but + for plants) + + * **Botany** (Simple, descriptive, and cute) + + * **Claudia** (Plays on "claws" – great for pruning shears) + + * **Sprout** (Small, cute, and implies growth) + + * **Green Bean** (A double entendre for a robot and a vegetable) + + + **Technical & Functional** + + * **Terra** (Latin for Earth/Earth-rover) + + * **Aeris** (Latin for air/flowers) + + * **Verdant** (Meaning green and lush) + + * **Nomad** (If it roams the garden) + + * **Sensus** (Latin for sense/perception – good for a robot that "feels" + the soil) + + + **Descriptive & Strong** + + * **The GardenBot** (The literal name) + + * **Harvest** (Focuses on the end goal) + + * **Mowbot** (If it does the lawn too) + + * **Root** (Solid, grounded, essential) + + * **Gyrus** (Scientific sounding, relates to the brain/control) + + + **Sci-Fi & Elegant** + + * **A.R.I.A.** (Autonomous Robot for Intelligent Agriculture) + + * **Eden** (A hopeful, classic name) + + * **Viridium** (A fancy word for greenery) + + * **Silas** (Sounds gentle and steady) + + + **My top pick:** **"Terra"** – it sounds professional, has a nice ring to + it, and fits the theme of earth and gardening perfectly.' + role: assistant + tools: null + created: 1793890171 + id: chatcmpl-2f8afb23159442b082b0f7e1c6ad9f5b + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + object: chat.completion + usage: + completion_tokens: 390 + completion_tokens_details: + reasoning_tokens: 0 + output_tokens_details: + reasoning_tokens: 0 + prompt_tokens: 26 + prompt_tokens_details: + cached_tokens: 25 + total_tokens: 416 + body_bytes: !!binary | + eyJpZCI6ImNoYXRjbXBsLTJmOGFmYjIzMTU5NDQyYjA4MmIwZjdlMWM2YWQ5ZjViIiwib2JqZWN0 + IjoiY2hhdC5jb21wbGV0aW9uIiwiY3JlYXRlZCI6MTc5Mzg5MDE3MSwibW9kZWwiOiJhY2NvdW50 + cy9maXJld29ya3MvbW9kZWxzL25lbW90cm9uLWxpZ2h0bmluZy0zcDUtMzBiLWEzYiIsImNob2lj + ZXMiOlt7ImluZGV4IjowLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50Ijoi + SGVyZSBhcmUgYSBmZXcgc3VnZ2VzdGlvbnMgZm9yIGEgcm9ib3QgZ2FyZGVuZXIsIGNhdGVnb3Jp + emVkIGJ5IHRoZSBcInZpYmVcIiB5b3UgbWlnaHQgYmUgZ29pbmcgZm9yOlxuXG4qKlBsYXlmdWwg + JiBQdW5ueSoqXG4qICAgKipIZXJiaWUqKiAoQSBjbGFzc2ljIHJvYm90IG5hbWUsIG9yIGEgbm9k + IHRvIHRoZSBMb3ZlIEJ1ZyBjYXIsIGJ1dCBmb3IgcGxhbnRzKVxuKiAgICoqQm90YW55KiogKFNp + bXBsZSwgZGVzY3JpcHRpdmUsIGFuZCBjdXRlKVxuKiAgICoqQ2xhdWRpYSoqIChQbGF5cyBvbiBc + ImNsYXdzXCIg4oCTIGdyZWF0IGZvciBwcnVuaW5nIHNoZWFycylcbiogICAqKlNwcm91dCoqIChT + bWFsbCwgY3V0ZSwgYW5kIGltcGxpZXMgZ3Jvd3RoKVxuKiAgICoqR3JlZW4gQmVhbioqIChBIGRv + dWJsZSBlbnRlbmRyZSBmb3IgYSByb2JvdCBhbmQgYSB2ZWdldGFibGUpXG5cbioqVGVjaG5pY2Fs + ICYgRnVuY3Rpb25hbCoqXG4qICAgKipUZXJyYSoqIChMYXRpbiBmb3IgRWFydGgvRWFydGgtcm92 + ZXIpXG4qICAgKipBZXJpcyoqIChMYXRpbiBmb3IgYWlyL2Zsb3dlcnMpXG4qICAgKipWZXJkYW50 + KiogKE1lYW5pbmcgZ3JlZW4gYW5kIGx1c2gpXG4qICAgKipOb21hZCoqIChJZiBpdCByb2FtcyB0 + aGUgZ2FyZGVuKVxuKiAgICoqU2Vuc3VzKiogKExhdGluIGZvciBzZW5zZS9wZXJjZXB0aW9uIOKA + kyBnb29kIGZvciBhIHJvYm90IHRoYXQgXCJmZWVsc1wiIHRoZSBzb2lsKVxuXG4qKkRlc2NyaXB0 + aXZlICYgU3Ryb25nKipcbiogICAqKlRoZSBHYXJkZW5Cb3QqKiAoVGhlIGxpdGVyYWwgbmFtZSlc + biogICAqKkhhcnZlc3QqKiAoRm9jdXNlcyBvbiB0aGUgZW5kIGdvYWwpXG4qICAgKipNb3dib3Qq + KiAoSWYgaXQgZG9lcyB0aGUgbGF3biB0b28pXG4qICAgKipSb290KiogKFNvbGlkLCBncm91bmRl + ZCwgZXNzZW50aWFsKVxuKiAgICoqR3lydXMqKiAoU2NpZW50aWZpYyBzb3VuZGluZywgcmVsYXRl + cyB0byB0aGUgYnJhaW4vY29udHJvbClcblxuKipTY2ktRmkgJiBFbGVnYW50KipcbiogICAqKkEu + Ui5JLkEuKiogKEF1dG9ub21vdXMgUm9ib3QgZm9yIEludGVsbGlnZW50IEFncmljdWx0dXJlKVxu + KiAgICoqRWRlbioqIChBIGhvcGVmdWwsIGNsYXNzaWMgbmFtZSlcbiogICAqKlZpcmlkaXVtKiog + KEEgZmFuY3kgd29yZCBmb3IgZ3JlZW5lcnkpXG4qICAgKipTaWxhcyoqIChTb3VuZHMgZ2VudGxl + IGFuZCBzdGVhZHkpXG5cbioqTXkgdG9wIHBpY2s6KiogKipcIlRlcnJhXCIqKiDigJMgaXQgc291 + bmRzIHByb2Zlc3Npb25hbCwgaGFzIGEgbmljZSByaW5nIHRvIGl0LCBhbmQgZml0cyB0aGUgdGhl + bWUgb2YgZWFydGggYW5kIGdhcmRlbmluZyBwZXJmZWN0bHkuIiwidG9vbHMiOm51bGx9LCJmaW5p + c2hfcmVhc29uIjoic3RvcCJ9XSwidXNhZ2UiOnsicHJvbXB0X3Rva2VucyI6MjYsInRvdGFsX3Rv + a2VucyI6NDE2LCJjb21wbGV0aW9uX3Rva2VucyI6MzkwLCJwcm9tcHRfdG9rZW5zX2RldGFpbHMi + OnsiY2FjaGVkX3Rva2VucyI6MjV9LCJjb21wbGV0aW9uX3Rva2Vuc19kZXRhaWxzIjp7InJlYXNv + bmluZ190b2tlbnMiOjB9LCJvdXRwdXRfdG9rZW5zX2RldGFpbHMiOnsicmVhc29uaW5nX3Rva2Vu + cyI6MH19fQ== + headers: + connection: keep-alive + content-length: '1831' + content-type: application/json + x-request-id: chatcmpl-2f8afb23159442b082b0f7e1c6ad9f5b + status_code: 200 +timestamp: '2026-11-05T14:49:30.406159+00:00' +upstream_url: https://api.fireworks.ai/inference/v1/chat/completions diff --git a/tests/cassettes/upstream_ir/text_chat/fireworks-chat_completions-non_stream-01.yaml b/tests/cassettes/upstream_ir/text_chat/fireworks-chat_completions-non_stream-01.yaml new file mode 100644 index 0000000..7c4f3ea --- /dev/null +++ b/tests/cassettes/upstream_ir/text_chat/fireworks-chat_completions-non_stream-01.yaml @@ -0,0 +1,201 @@ +filename: 2026-11-05-01a1ac2f-bb8c-76d2-8e03-ddaee47c0ad1 +request: + body: + max_completion_tokens: 1024 + messages: + - content: + - text: Suggest a name for a robot gardener. + type: text + role: user + - content: 'Here are a few suggestions for a robot gardener, categorized by the + "vibe" you might be going for: + + + **Playful & Punny** + + * **Herbie** (A classic robot name, or a nod to the Love Bug car, but for + plants) + + * **Botany** (Simple, descriptive, and cute) + + * **Claudia** (Plays on "claws" – great for pruning shears) + + * **Sprout** (Small, cute, and implies growth) + + * **Green Bean** (A double entendre for a robot and a vegetable) + + + **Technical & Functional** + + * **Terra** (Latin for Earth/Earth-rover) + + * **Aeris** (Latin for air/flowers) + + * **Verdant** (Meaning green and lush) + + * **Nomad** (If it roams the garden) + + * **Sensus** (Latin for sense/perception – good for a robot that "feels" + the soil) + + + **Descriptive & Strong** + + * **The GardenBot** (The literal name) + + * **Harvest** (Focuses on the end goal) + + * **Mowbot** (If it does the lawn too) + + * **Root** (Solid, grounded, essential) + + * **Gyrus** (Scientific sounding, relates to the brain/control) + + + **Sci-Fi & Elegant** + + * **A.R.I.A.** (Autonomous Robot for Intelligent Agriculture) + + * **Eden** (A hopeful, classic name) + + * **Viridium** (A fancy word for greenery) + + * **Silas** (Sounds gentle and steady) + + + **My top pick:** **"Terra"** – it sounds professional, has a nice ring to + it, and fits the theme of earth and gardening perfectly.' + role: assistant + - content: + - text: Explain why that name fits. + type: text + role: user + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + reasoning_effort: none + stream: false + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '1703' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /inference/v1/chat/completions + query_params: {} +request_id: 01a1ac2f-bb8c-76d2-8e03-ddaee47c0ad1 +response: + body: + choices: + - finish_reason: stop + index: 0 + message: + content: 'The name **"Terra"** fits a robot gardener perfectly for several + reasons, ranging from its linguistic roots to its modern tech appeal: + + + **1. Literal Connection to the Earth** + + The word "Terra" originates from Latin, where it means **"Earth"** or **"Land."** + Since a gardener’s primary job is interacting with the soil and the ground, + the name creates an immediate, poetic link between the machine and the medium + it works with. It suggests a robot that is grounded, literal, and deeply + connected to the land. + + + **2. The "Terra" Prefix in Technology** + + In the world of robotics and sci-fi, "Terra" is often used to denote planetary + or ground-based operations. + + * **Terraforming:** The process of making a planet habitable. + + * **Terran:** Referring to the inhabitants of Earth (popularized by *StarCraft*). + + Using the name implies that this robot is built for the "ground game"—literally + working the soil rather than flying or floating. + + + **3. Softness and Growth** + + Despite being a technological term, "Terra" has a soft, earthy sound (the + "Ter" consonant blend). It avoids the harsh, mechanical sound of names like + "Robo-3000" or "Chassis." It feels organic and natural, which matches the + aesthetic of a garden—something growing, living, and green. + + + **4. Brevity and Brandability** + + "Terra" is short, punchy, and easy to remember. It works well as a simple + identifier (e.g., "Tell Terra to water the tomatoes") and has a professional, + commercial feel that would look great on a product box or a startup logo. + + + **In summary:** It is a name that bridges the gap between **nature** (the + garden) and **technology** (the robot), making it an ideal fit for a machine + designed to cultivate the earth.' + role: assistant + tools: null + created: 1793890172 + id: chatcmpl-68944382971c456cbbcf3a19dec88448 + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + object: chat.completion + usage: + completion_tokens: 391 + completion_tokens_details: + reasoning_tokens: 0 + output_tokens_details: + reasoning_tokens: 0 + prompt_tokens: 434 + prompt_tokens_details: + cached_tokens: 25 + total_tokens: 825 + body_bytes: !!binary | + eyJpZCI6ImNoYXRjbXBsLTY4OTQ0MzgyOTcxYzQ1NmNiYmNmM2ExOWRlYzg4NDQ4Iiwib2JqZWN0 + IjoiY2hhdC5jb21wbGV0aW9uIiwiY3JlYXRlZCI6MTc5Mzg5MDE3MiwibW9kZWwiOiJhY2NvdW50 + cy9maXJld29ya3MvbW9kZWxzL25lbW90cm9uLWxpZ2h0bmluZy0zcDUtMzBiLWEzYiIsImNob2lj + ZXMiOlt7ImluZGV4IjowLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50Ijoi + VGhlIG5hbWUgKipcIlRlcnJhXCIqKiBmaXRzIGEgcm9ib3QgZ2FyZGVuZXIgcGVyZmVjdGx5IGZv + ciBzZXZlcmFsIHJlYXNvbnMsIHJhbmdpbmcgZnJvbSBpdHMgbGluZ3Vpc3RpYyByb290cyB0byBp + dHMgbW9kZXJuIHRlY2ggYXBwZWFsOlxuXG4qKjEuIExpdGVyYWwgQ29ubmVjdGlvbiB0byB0aGUg + RWFydGgqKlxuVGhlIHdvcmQgXCJUZXJyYVwiIG9yaWdpbmF0ZXMgZnJvbSBMYXRpbiwgd2hlcmUg + aXQgbWVhbnMgKipcIkVhcnRoXCIqKiBvciAqKlwiTGFuZC5cIioqIFNpbmNlIGEgZ2FyZGVuZXLi + gJlzIHByaW1hcnkgam9iIGlzIGludGVyYWN0aW5nIHdpdGggdGhlIHNvaWwgYW5kIHRoZSBncm91 + bmQsIHRoZSBuYW1lIGNyZWF0ZXMgYW4gaW1tZWRpYXRlLCBwb2V0aWMgbGluayBiZXR3ZWVuIHRo + ZSBtYWNoaW5lIGFuZCB0aGUgbWVkaXVtIGl0IHdvcmtzIHdpdGguIEl0IHN1Z2dlc3RzIGEgcm9i + b3QgdGhhdCBpcyBncm91bmRlZCwgbGl0ZXJhbCwgYW5kIGRlZXBseSBjb25uZWN0ZWQgdG8gdGhl + IGxhbmQuXG5cbioqMi4gVGhlIFwiVGVycmFcIiBQcmVmaXggaW4gVGVjaG5vbG9neSoqXG5JbiB0 + aGUgd29ybGQgb2Ygcm9ib3RpY3MgYW5kIHNjaS1maSwgXCJUZXJyYVwiIGlzIG9mdGVuIHVzZWQg + dG8gZGVub3RlIHBsYW5ldGFyeSBvciBncm91bmQtYmFzZWQgb3BlcmF0aW9ucy5cbiogICAqKlRl + cnJhZm9ybWluZzoqKiBUaGUgcHJvY2VzcyBvZiBtYWtpbmcgYSBwbGFuZXQgaGFiaXRhYmxlLlxu + KiAgICoqVGVycmFuOioqIFJlZmVycmluZyB0byB0aGUgaW5oYWJpdGFudHMgb2YgRWFydGggKHBv + cHVsYXJpemVkIGJ5ICpTdGFyQ3JhZnQqKS5cblVzaW5nIHRoZSBuYW1lIGltcGxpZXMgdGhhdCB0 + aGlzIHJvYm90IGlzIGJ1aWx0IGZvciB0aGUgXCJncm91bmQgZ2FtZVwi4oCUbGl0ZXJhbGx5IHdv + cmtpbmcgdGhlIHNvaWwgcmF0aGVyIHRoYW4gZmx5aW5nIG9yIGZsb2F0aW5nLlxuXG4qKjMuIFNv + ZnRuZXNzIGFuZCBHcm93dGgqKlxuRGVzcGl0ZSBiZWluZyBhIHRlY2hub2xvZ2ljYWwgdGVybSwg + XCJUZXJyYVwiIGhhcyBhIHNvZnQsIGVhcnRoeSBzb3VuZCAodGhlIFwiVGVyXCIgY29uc29uYW50 + IGJsZW5kKS4gSXQgYXZvaWRzIHRoZSBoYXJzaCwgbWVjaGFuaWNhbCBzb3VuZCBvZiBuYW1lcyBs + aWtlIFwiUm9iby0zMDAwXCIgb3IgXCJDaGFzc2lzLlwiIEl0IGZlZWxzIG9yZ2FuaWMgYW5kIG5h + dHVyYWwsIHdoaWNoIG1hdGNoZXMgdGhlIGFlc3RoZXRpYyBvZiBhIGdhcmRlbuKAlHNvbWV0aGlu + ZyBncm93aW5nLCBsaXZpbmcsIGFuZCBncmVlbi5cblxuKio0LiBCcmV2aXR5IGFuZCBCcmFuZGFi + aWxpdHkqKlxuXCJUZXJyYVwiIGlzIHNob3J0LCBwdW5jaHksIGFuZCBlYXN5IHRvIHJlbWVtYmVy + LiBJdCB3b3JrcyB3ZWxsIGFzIGEgc2ltcGxlIGlkZW50aWZpZXIgKGUuZy4sIFwiVGVsbCBUZXJy + YSB0byB3YXRlciB0aGUgdG9tYXRvZXNcIikgYW5kIGhhcyBhIHByb2Zlc3Npb25hbCwgY29tbWVy + Y2lhbCBmZWVsIHRoYXQgd291bGQgbG9vayBncmVhdCBvbiBhIHByb2R1Y3QgYm94IG9yIGEgc3Rh + cnR1cCBsb2dvLlxuXG4qKkluIHN1bW1hcnk6KiogSXQgaXMgYSBuYW1lIHRoYXQgYnJpZGdlcyB0 + aGUgZ2FwIGJldHdlZW4gKipuYXR1cmUqKiAodGhlIGdhcmRlbikgYW5kICoqdGVjaG5vbG9neSoq + ICh0aGUgcm9ib3QpLCBtYWtpbmcgaXQgYW4gaWRlYWwgZml0IGZvciBhIG1hY2hpbmUgZGVzaWdu + ZWQgdG8gY3VsdGl2YXRlIHRoZSBlYXJ0aC4iLCJ0b29scyI6bnVsbH0sImZpbmlzaF9yZWFzb24i + OiJzdG9wIn1dLCJ1c2FnZSI6eyJwcm9tcHRfdG9rZW5zIjo0MzQsInRvdGFsX3Rva2VucyI6ODI1 + LCJjb21wbGV0aW9uX3Rva2VucyI6MzkxLCJwcm9tcHRfdG9rZW5zX2RldGFpbHMiOnsiY2FjaGVk + X3Rva2VucyI6MjV9LCJjb21wbGV0aW9uX3Rva2Vuc19kZXRhaWxzIjp7InJlYXNvbmluZ190b2tl + bnMiOjB9LCJvdXRwdXRfdG9rZW5zX2RldGFpbHMiOnsicmVhc29uaW5nX3Rva2VucyI6MH19fQ== + headers: + connection: keep-alive + content-length: '2221' + content-type: application/json + x-request-id: chatcmpl-68944382971c456cbbcf3a19dec88448 + status_code: 200 +timestamp: '2026-11-05T14:49:31.788953+00:00' +upstream_url: https://api.fireworks.ai/inference/v1/chat/completions diff --git a/tests/cassettes/upstream_ir/text_chat/fireworks-chat_completions-stream-00.yaml b/tests/cassettes/upstream_ir/text_chat/fireworks-chat_completions-stream-00.yaml new file mode 100644 index 0000000..cfde4b8 --- /dev/null +++ b/tests/cassettes/upstream_ir/text_chat/fireworks-chat_completions-stream-00.yaml @@ -0,0 +1,2052 @@ +filename: 2026-11-05-01a1ac2f-a6e5-74c2-8251-38c51e96038b +request: + body: + max_completion_tokens: 1024 + messages: + - content: + - text: Suggest a name for a robot gardener. + type: text + role: user + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + reasoning_effort: none + stream: true + stream_options: + include_usage: true + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '280' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /inference/v1/chat/completions + query_params: {} +request_id: 01a1ac2f-a6e5-74c2-8251-38c51e96038b +response: + error_event: false + headers: + connection: keep-alive + content-type: text/event-stream; charset=utf-8 + x-request-id: chatcmpl-1a8788878fd24f4caaa7f0325e84c1db + sse: + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"Here"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + are"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + a"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + few"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + suggestions"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + for"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + a"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + robot"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + gard"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ener"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":","},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + categorized"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + by"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + the"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + \""},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"v"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ibe"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"\""},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + you"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + might"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + be"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + going"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + for"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":":\n\n"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"Classic"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + &"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + Functional"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"**\n"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"*"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + **"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"Ag"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ri"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"-B"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ot"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + –"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + Simple"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":","},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + professional"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":","},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + and"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + tells"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + you"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + exactly"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + what"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + it"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + does"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":".\n"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"*"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + **"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"Terra"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + –"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + Der"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ived"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + from"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + \""},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"Earth"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":",\""},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + sounding"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + gentle"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + and"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + grounded"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":".\n"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"*"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + **"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"V"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"erd"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ant"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + –"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + A"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + sophisticated"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + word"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + for"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + l"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ush"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":","},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + green"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + vegetation"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":".\n\n"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"Play"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ful"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + &"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + Pun"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ny"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"**\n"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"*"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + **"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"Gr"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ass"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"h"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"opper"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + –"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + A"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + cute"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + nod"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + to"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + the"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + insects"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + it"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + might"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + chase"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + away"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":".\n"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"*"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + **"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"S"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"pro"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ut"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + –"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + Short"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":","},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + sweet"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":","},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + and"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + implies"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + growth"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":".\n"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"*"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + **"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"M"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ow"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"Bot"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + –"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + If"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + it"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + does"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + the"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + lawn"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + m"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"owing"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":".\n"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"*"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + **"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"Root"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + –"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + A"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + play"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + on"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + \""},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"rout"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"\""},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + or"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + just"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + being"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + down"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"-to"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"earth"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":".\n\n"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"High"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"-T"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ech"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + &"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + Modern"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"**\n"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"*"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + **"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"Nem"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"otron"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + –"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + ("},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"If"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + you"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + want"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + a"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + sci"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"-fi"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + feel"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":";"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + named"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + after"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + the"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + large"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + language"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + model"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":","},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + but"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + fits"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + a"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + smart"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + bot"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":").\n"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"*"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + **"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"S"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ynthia"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + –"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + Sounds"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + like"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + \""},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"s"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ynthesis"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"\""},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + or"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + \""},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"photos"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ynthesis"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":".\"\n"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"*"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + **"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"A"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"xi"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"om"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + –"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + Sounds"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + strong"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + and"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + reliable"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":".\n\n"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"Nature"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"-The"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"med"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"**\n"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"*"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + **"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"Fl"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ora"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + –"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + The"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + Roman"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + goddess"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + of"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + flowers"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":","},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + or"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + simply"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + \""},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"pl"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ants"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":".\"\n"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"*"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + **"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"S"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"yl"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"van"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + –"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + Rel"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ating"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + to"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + forests"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + and"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + wood"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"lands"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":".\n"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"*"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + **"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"Pet"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"al"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + –"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + Soft"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + and"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + delicate"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":".\n\n"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"My"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + top"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + recommendation"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":":**\n"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"S"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"pro"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ut"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"**."},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + It"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"’s"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + friendly"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":","},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + memorable"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":","},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + and"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + fits"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + the"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + gard"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ening"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + theme"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + perfectly"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{},"finish_reason":"stop","raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-1a8788878fd24f4caaa7f0325e84c1db","object":"chat.completion.chunk","created":1793890167,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[],"usage":{"prompt_tokens":26,"total_tokens":333,"completion_tokens":307,"prompt_tokens_details":{"cached_tokens":25},"completion_tokens_details":{"reasoning_tokens":0},"output_tokens_details":{"reasoning_tokens":0}}} + + ' + - ' + + ' + - 'data: [DONE] + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: '[DONE]' +timestamp: '2026-11-05T14:49:26.501470+00:00' +upstream_url: https://api.fireworks.ai/inference/v1/chat/completions diff --git a/tests/cassettes/upstream_ir/text_chat/fireworks-chat_completions-stream-01.yaml b/tests/cassettes/upstream_ir/text_chat/fireworks-chat_completions-stream-01.yaml new file mode 100644 index 0000000..0623248 --- /dev/null +++ b/tests/cassettes/upstream_ir/text_chat/fireworks-chat_completions-stream-01.yaml @@ -0,0 +1,2843 @@ +filename: 2026-11-05-01a1ac2f-ae7c-7db1-8ebb-09224ddb13c5 +request: + body: + max_completion_tokens: 1024 + messages: + - content: + - text: Suggest a name for a robot gardener. + type: text + role: user + - content: 'Here are a few suggestions for a robot gardener, categorized by the + "vibe" you might be going for: + + + **Classic & Functional** + + * **Agri-Bot** – Simple, professional, and tells you exactly what it does. + + * **Terra** – Derived from "Earth," sounding gentle and grounded. + + * **Verdant** – A sophisticated word for lush, green vegetation. + + + **Playful & Punny** + + * **Grasshopper** – A cute nod to the insects it might chase away. + + * **Sprout** – Short, sweet, and implies growth. + + * **MowBot** – If it does the lawn mowing. + + * **Root** – A play on "rout" or just being down-to-earth. + + + **High-Tech & Modern** + + * **Nemotron** – (If you want a sci-fi feel; named after the large language + model, but fits a smart bot). + + * **Synthia** – Sounds like "synthesis" or "photosynthesis." + + * **Axiom** – Sounds strong and reliable. + + + **Nature-Themed** + + * **Flora** – The Roman goddess of flowers, or simply "plants." + + * **Sylvan** – Relating to forests and woodlands. + + * **Petal** – Soft and delicate. + + + **My top recommendation:** + + **Sprout**. It’s friendly, memorable, and fits the gardening theme perfectly.' + role: assistant + - content: + - text: Explain why that name fits. + type: text + role: user + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + reasoning_effort: none + stream: true + stream_options: + include_usage: true + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '1559' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /inference/v1/chat/completions + query_params: {} +request_id: 01a1ac2f-ae7c-7db1-8ebb-09224ddb13c5 +response: + error_event: false + headers: + connection: keep-alive + content-type: text/event-stream; charset=utf-8 + x-request-id: chatcmpl-55078d3058c64109a1f62e52404d1861 + sse: + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"The"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + name"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + **\""},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"S"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"pro"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ut"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"\"**"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + fits"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + a"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + robot"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + gard"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ener"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + perfectly"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + for"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + several"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + reasons"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":","},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + ranging"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + from"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + literal"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + definitions"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + to"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + psychological"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + associations"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":":\n\n"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + Direct"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + Connection"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + to"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + Gard"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ening"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"**\n"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"In"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + the"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + natural"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + world"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":","},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + a"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + \""},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"s"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"pro"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ut"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"\""},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + is"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + the"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + very"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + first"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + stage"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + of"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + growth"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + It"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + represents"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + the"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + beginning"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + of"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + life"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":","},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + the"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + breaking"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + of"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + the"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + soil"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":","},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + and"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + the"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + promise"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + of"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + a"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + future"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + plant"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + Nam"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ing"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + a"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + gard"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ening"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + robot"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + \""},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"S"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"pro"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ut"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"\""},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + immediately"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + communicates"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + its"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + purpose"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + it"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + is"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + a"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + catalyst"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + for"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + growth"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":".\n\n"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"2"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + Symbol"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ism"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + of"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + N"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"urt"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"uring"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"**\n"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"Gard"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ening"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + is"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + fundamentally"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + about"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + care"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + and"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + nurt"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"uring"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + A"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + sp"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"rout"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + is"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + fragile"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + and"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + needs"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + attention"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + to"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + survive"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + G"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"iving"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + a"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + robot"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + this"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + name"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + anthrop"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"omorph"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"izes"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + it"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + slightly"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"—"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"it"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + suggests"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + the"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + machine"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + isn"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"''t"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + just"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + a"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + cold"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + piece"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + of"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + machinery"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":","},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + but"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + a"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + \""},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"guard"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ian"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"\""},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + of"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + young"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + plants"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":","},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + carefully"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + t"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ending"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + to"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + them"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + until"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + they"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + are"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + strong"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + enough"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + to"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + stand"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + on"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + their"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + own"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":".\n\n"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"3"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + The"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + \""},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"Und"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"erd"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"og"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"\""},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + Appeal"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"**\n"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"Most"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + robots"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + have"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + big"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":","},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + imposing"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + names"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + ("},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"like"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + \""},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"Atlas"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"\""},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + or"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + \""},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"Term"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"inator"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"\")."},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + \""},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"S"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"pro"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ut"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"\""},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + is"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + small"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":","},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + un"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"assuming"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":","},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + and"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + soft"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + It"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + implies"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + that"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + this"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + robot"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + is"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + approach"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"able"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + and"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + gentle"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":","},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + which"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + is"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + ideal"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + for"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + a"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + machine"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + working"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + around"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + delicate"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + flowers"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + or"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + vegetables"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + where"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + you"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + don"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"''t"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + want"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + heavy"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + machinery"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + crushing"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + the"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + soil"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":".\n\n"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"4"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + Growth"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + and"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + Progress"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"**\n"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"On"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + a"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + deeper"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + level"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":","},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + \""},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"S"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"pro"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ut"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"\""},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + represents"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + progress"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + A"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + garden"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + doesn"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"''t"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + stay"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + the"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + same"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":";"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + it"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + evol"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ves"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + A"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + robot"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + named"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + S"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"pro"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ut"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + implies"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + a"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + system"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + that"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + is"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + constantly"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + learning"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":","},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + adapting"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":","},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + and"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + helping"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + the"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + garden"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + evolve"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + from"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + a"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + bar"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ren"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + patch"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + of"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + dirt"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + into"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + a"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + thr"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"iving"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + ecosystem"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":".\n\n"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"5"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + Bre"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"vity"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + and"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + Mem"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"or"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ability"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"**\n"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"From"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + a"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + branding"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + standpoint"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":","},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + it"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + is"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + short"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":","},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + easy"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + to"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + pron"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ounce"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":","},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + and"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + memorable"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + It"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + rolls"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + off"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + the"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + tongue"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + much"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + easier"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + than"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + technical"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + names"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + like"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + \""},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"A"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"gr"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"icultural"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + Autom"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"aton"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + "},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"3"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"0"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"0"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"0"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":".\"\n\n"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"In"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + short"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":","},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + **"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"S"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"pro"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ut"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + captures"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + the"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + *"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ess"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ence"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"*"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + of"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + gard"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ening"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"—"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"growth"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":","},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + care"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":","},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + and"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + new"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + beginnings"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"—"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"while"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + giving"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + the"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + robot"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + a"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + personality"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + that"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + feels"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + helpful"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + rather"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + than"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + intimid"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ating"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{},"finish_reason":"stop","raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-55078d3058c64109a1f62e52404d1861","object":"chat.completion.chunk","created":1793890169,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[],"usage":{"prompt_tokens":352,"total_tokens":764,"completion_tokens":412,"prompt_tokens_details":{"cached_tokens":25},"completion_tokens_details":{"reasoning_tokens":0},"output_tokens_details":{"reasoning_tokens":0}}} + + ' + - ' + + ' + - 'data: [DONE] + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: '[DONE]' +timestamp: '2026-11-05T14:49:28.444627+00:00' +upstream_url: https://api.fireworks.ai/inference/v1/chat/completions diff --git a/tests/cassettes/upstream_ir/text_chat/fireworks-responses-non_stream-00.yaml b/tests/cassettes/upstream_ir/text_chat/fireworks-responses-non_stream-00.yaml new file mode 100644 index 0000000..46e0a0f --- /dev/null +++ b/tests/cassettes/upstream_ir/text_chat/fireworks-responses-non_stream-00.yaml @@ -0,0 +1,99 @@ +filename: 2026-11-04-01a1a478-4321-7d03-9d0a-cde0abf78b4e +request: + body: + input: + - content: + - text: 'Remember the exact phrase: blue lantern.' + type: input_text + - text: Reply briefly. + type: input_text + role: user + max_output_tokens: 2048 + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + reasoning: + effort: none + store: false + stream: false + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '309' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /inference/v1/responses + query_params: {} +request_id: 01a1a478-4321-7d03-9d0a-cde0abf78b4e +response: + body: + background: null + created_at: 1793760707 + error: null + id: resp_0cd27472747544c2b3fc4da53de85a04 + incomplete_details: null + instructions: null + max_output_tokens: 2048 + max_tool_calls: null + metadata: {} + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + object: response + output: + - content: + - annotations: [] + text: blue lantern + type: output_text + id: msg_2983636b54054819927fe8546d5b1264 + role: assistant + status: completed + type: message + parallel_tool_calls: true + previous_response_id: null + reasoning: + effort: none + status: completed + store: false + temperature: 1.0 + text: + format: + type: text + tool_choice: auto + tools: [] + top_logprobs: null + top_p: 0.95 + truncation: disabled + usage: + input_tokens: 28 + input_tokens_details: + cached_tokens: 0 + output_tokens: 3 + output_tokens_details: + reasoning_tokens: 0 + total_tokens: 31 + user: null + body_bytes: !!binary | + eyJpZCI6InJlc3BfMGNkMjc0NzI3NDc1NDRjMmIzZmM0ZGE1M2RlODVhMDQiLCJvYmplY3QiOiJy + ZXNwb25zZSIsImNyZWF0ZWRfYXQiOjE3OTM3NjA3MDcsInN0YXR1cyI6ImNvbXBsZXRlZCIsIm1v + ZGVsIjoiYWNjb3VudHMvZmlyZXdvcmtzL21vZGVscy9uZW1vdHJvbi1saWdodG5pbmctM3A1LTMw + Yi1hM2IiLCJvdXRwdXQiOlt7ImlkIjoibXNnXzI5ODM2MzZiNTQwNTQ4MTk5MjdmZTg1NDZkNWIx + MjY0IiwidHlwZSI6Im1lc3NhZ2UiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlw + ZSI6Im91dHB1dF90ZXh0IiwidGV4dCI6ImJsdWUgbGFudGVybiIsImFubm90YXRpb25zIjpbXX1d + LCJzdGF0dXMiOiJjb21wbGV0ZWQifV0sInByZXZpb3VzX3Jlc3BvbnNlX2lkIjpudWxsLCJ1c2Fn + ZSI6eyJpbnB1dF90b2tlbnMiOjI4LCJvdXRwdXRfdG9rZW5zIjozLCJ0b3RhbF90b2tlbnMiOjMx + LCJpbnB1dF90b2tlbnNfZGV0YWlscyI6eyJjYWNoZWRfdG9rZW5zIjowfSwib3V0cHV0X3Rva2Vu + c19kZXRhaWxzIjp7InJlYXNvbmluZ190b2tlbnMiOjB9fSwiZXJyb3IiOm51bGwsImluY29tcGxl + dGVfZGV0YWlscyI6bnVsbCwiaW5zdHJ1Y3Rpb25zIjpudWxsLCJtYXhfb3V0cHV0X3Rva2VucyI6 + MjA0OCwibWF4X3Rvb2xfY2FsbHMiOm51bGwsInBhcmFsbGVsX3Rvb2xfY2FsbHMiOnRydWUsInJl + YXNvbmluZyI6eyJlZmZvcnQiOiJub25lIn0sInN0b3JlIjpmYWxzZSwidGVtcGVyYXR1cmUiOjEu + MCwidGV4dCI6eyJmb3JtYXQiOnsidHlwZSI6InRleHQifX0sInRvb2xfY2hvaWNlIjoiYXV0byIs + InRvb2xzIjpbXSwidG9wX3AiOjAuOTUsInRvcF9sb2dwcm9icyI6bnVsbCwidHJ1bmNhdGlvbiI6 + ImRpc2FibGVkIiwidXNlciI6bnVsbCwiYmFja2dyb3VuZCI6bnVsbCwibWV0YWRhdGEiOnt9fQ== + headers: + connection: keep-alive + content-length: '910' + content-type: application/json + x-request-id: 9f2af716-06a0-4714-857e-7e476d9016ae + status_code: 200 +timestamp: '2026-11-04T02:51:47.361992+00:00' +upstream_url: https://api.fireworks.ai/inference/v1/responses diff --git a/tests/cassettes/upstream_ir/text_chat/fireworks-responses-non_stream-01.yaml b/tests/cassettes/upstream_ir/text_chat/fireworks-responses-non_stream-01.yaml new file mode 100644 index 0000000..15ac365 --- /dev/null +++ b/tests/cassettes/upstream_ir/text_chat/fireworks-responses-non_stream-01.yaml @@ -0,0 +1,113 @@ +filename: 2026-11-04-01a1a478-46c0-7dd2-99f7-90e04e730096 +request: + body: + input: + - content: + - text: 'Remember the exact phrase: blue lantern.' + type: input_text + - text: Reply briefly. + type: input_text + role: user + - content: + - annotations: [] + text: blue lantern + type: output_text + id: msg_2983636b54054819927fe8546d5b1264 + role: assistant + status: completed + type: message + - content: + - text: Repeat the phrase + type: input_text + - text: ' exactly, preserving its spaces.' + type: input_text + role: user + max_output_tokens: 2048 + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + reasoning: + effort: none + store: false + stream: false + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '627' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /inference/v1/responses + query_params: {} +request_id: 01a1a478-46c0-7dd2-99f7-90e04e730096 +response: + body: + background: null + created_at: 1793760708 + error: null + id: resp_62ee9308fa5f4ef5a44ddecf8ef45c20 + incomplete_details: null + instructions: null + max_output_tokens: 2048 + max_tool_calls: null + metadata: {} + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + object: response + output: + - content: + - annotations: [] + text: blue lantern + type: output_text + id: msg_9aa4fd46af65433bbcba01eb85336aa2 + role: assistant + status: completed + type: message + parallel_tool_calls: true + previous_response_id: null + reasoning: + effort: none + status: completed + store: false + temperature: 1.0 + text: + format: + type: text + tool_choice: auto + tools: [] + top_logprobs: null + top_p: 0.95 + truncation: disabled + usage: + input_tokens: 53 + input_tokens_details: + cached_tokens: 27 + output_tokens: 3 + output_tokens_details: + reasoning_tokens: 0 + total_tokens: 56 + user: null + body_bytes: !!binary | + eyJpZCI6InJlc3BfNjJlZTkzMDhmYTVmNGVmNWE0NGRkZWNmOGVmNDVjMjAiLCJvYmplY3QiOiJy + ZXNwb25zZSIsImNyZWF0ZWRfYXQiOjE3OTM3NjA3MDgsInN0YXR1cyI6ImNvbXBsZXRlZCIsIm1v + ZGVsIjoiYWNjb3VudHMvZmlyZXdvcmtzL21vZGVscy9uZW1vdHJvbi1saWdodG5pbmctM3A1LTMw + Yi1hM2IiLCJvdXRwdXQiOlt7ImlkIjoibXNnXzlhYTRmZDQ2YWY2NTQzM2JiY2JhMDFlYjg1MzM2 + YWEyIiwidHlwZSI6Im1lc3NhZ2UiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlw + ZSI6Im91dHB1dF90ZXh0IiwidGV4dCI6ImJsdWUgbGFudGVybiIsImFubm90YXRpb25zIjpbXX1d + LCJzdGF0dXMiOiJjb21wbGV0ZWQifV0sInByZXZpb3VzX3Jlc3BvbnNlX2lkIjpudWxsLCJ1c2Fn + ZSI6eyJpbnB1dF90b2tlbnMiOjUzLCJvdXRwdXRfdG9rZW5zIjozLCJ0b3RhbF90b2tlbnMiOjU2 + LCJpbnB1dF90b2tlbnNfZGV0YWlscyI6eyJjYWNoZWRfdG9rZW5zIjoyN30sIm91dHB1dF90b2tl + bnNfZGV0YWlscyI6eyJyZWFzb25pbmdfdG9rZW5zIjowfX0sImVycm9yIjpudWxsLCJpbmNvbXBs + ZXRlX2RldGFpbHMiOm51bGwsImluc3RydWN0aW9ucyI6bnVsbCwibWF4X291dHB1dF90b2tlbnMi + OjIwNDgsIm1heF90b29sX2NhbGxzIjpudWxsLCJwYXJhbGxlbF90b29sX2NhbGxzIjp0cnVlLCJy + ZWFzb25pbmciOnsiZWZmb3J0Ijoibm9uZSJ9LCJzdG9yZSI6ZmFsc2UsInRlbXBlcmF0dXJlIjox + LjAsInRleHQiOnsiZm9ybWF0Ijp7InR5cGUiOiJ0ZXh0In19LCJ0b29sX2Nob2ljZSI6ImF1dG8i + LCJ0b29scyI6W10sInRvcF9wIjowLjk1LCJ0b3BfbG9ncHJvYnMiOm51bGwsInRydW5jYXRpb24i + OiJkaXNhYmxlZCIsInVzZXIiOm51bGwsImJhY2tncm91bmQiOm51bGwsIm1ldGFkYXRhIjp7fX0= + headers: + connection: keep-alive + content-length: '911' + content-type: application/json + x-request-id: 1314e4df-c0e7-4fc3-8c31-034c9098c995 + status_code: 200 +timestamp: '2026-11-04T02:51:48.288316+00:00' +upstream_url: https://api.fireworks.ai/inference/v1/responses diff --git a/tests/cassettes/upstream_ir/text_chat/fireworks-responses-stream-00.yaml b/tests/cassettes/upstream_ir/text_chat/fireworks-responses-stream-00.yaml new file mode 100644 index 0000000..8280763 --- /dev/null +++ b/tests/cassettes/upstream_ir/text_chat/fireworks-responses-stream-00.yaml @@ -0,0 +1,112 @@ +filename: 2026-11-04-01a1a479-2350-7fc0-856e-232fda3aa49a +request: + body: + input: + - content: + - text: 'Remember the exact phrase: blue lantern.' + type: input_text + - text: Reply briefly. + type: input_text + role: user + max_output_tokens: 2048 + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + reasoning: + effort: none + store: false + stream: true + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '308' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /inference/v1/responses + query_params: {} +request_id: 01a1a479-2350-7fc0-856e-232fda3aa49a +response: + error_event: false + headers: + cache-control: no-cache + connection: keep-alive + content-type: text/event-stream; charset=utf-8 + x-request-id: 1c044698-3a78-4aa3-ae45-ebb60c38aa96 + sse: + - 'data: {"type":"response.created","sequence_number":0,"response":{"id":"resp_7937cb8577cf43999e36cc99acfc712c","object":"response","created_at":1793760765,"status":"in_progress","model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","output":[],"previous_response_id":null,"usage":null,"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":2048,"max_tool_calls":null,"parallel_tool_calls":true,"reasoning":{"effort":"none"},"store":false,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":"auto","tools":[],"top_p":1.0,"top_logprobs":null,"truncation":"disabled","user":null,"background":null,"metadata":{}}} + + ' + - ' + + ' + - 'data: {"type":"response.in_progress","sequence_number":1,"response":{"id":"resp_7937cb8577cf43999e36cc99acfc712c","object":"response","created_at":1793760765,"status":"in_progress","model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","output":[],"previous_response_id":null,"usage":null,"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":2048,"max_tool_calls":null,"parallel_tool_calls":true,"reasoning":{"effort":"none"},"store":false,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":"auto","tools":[],"top_p":1.0,"top_logprobs":null,"truncation":"disabled","user":null,"background":null,"metadata":{}}} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.added","sequence_number":2,"output_index":0,"item":{"type":"message","id":"msg_b348b978c6df4705a726fd7db59e7bf2","status":"in_progress","role":"assistant","content":[]}} + + ' + - ' + + ' + - 'data: {"type":"response.content_part.added","sequence_number":3,"item_id":"msg_b348b978c6df4705a726fd7db59e7bf2","output_index":0,"content_index":0,"part":{"type":"output_text","text":"","annotations":[]}} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":4,"item_id":"msg_b348b978c6df4705a726fd7db59e7bf2","output_index":0,"content_index":0,"delta":"Blue","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":5,"item_id":"msg_b348b978c6df4705a726fd7db59e7bf2","output_index":0,"content_index":0,"delta":" + lantern","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":6,"item_id":"msg_b348b978c6df4705a726fd7db59e7bf2","output_index":0,"content_index":0,"delta":".","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.done","sequence_number":7,"item_id":"msg_b348b978c6df4705a726fd7db59e7bf2","output_index":0,"content_index":0,"text":"Blue + lantern.","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.content_part.done","sequence_number":8,"item_id":"msg_b348b978c6df4705a726fd7db59e7bf2","output_index":0,"content_index":0,"part":{"type":"output_text","text":"Blue + lantern.","annotations":[]}} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.done","sequence_number":9,"output_index":0,"item":{"type":"message","id":"msg_b348b978c6df4705a726fd7db59e7bf2","status":"completed","role":"assistant","content":[{"type":"output_text","text":"Blue + lantern.","annotations":[]}]}} + + ' + - ' + + ' + - 'data: {"type":"response.completed","sequence_number":10,"response":{"id":"resp_7937cb8577cf43999e36cc99acfc712c","object":"response","created_at":1793760765,"status":"completed","model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","output":[{"id":"msg_b348b978c6df4705a726fd7db59e7bf2","type":"message","role":"assistant","content":[{"type":"output_text","text":"Blue + lantern.","annotations":[]}],"status":"completed"}],"previous_response_id":null,"usage":{"input_tokens":28,"output_tokens":4,"total_tokens":32,"input_tokens_details":{"cached_tokens":27},"output_tokens_details":{"reasoning_tokens":0}},"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":2048,"max_tool_calls":null,"parallel_tool_calls":true,"reasoning":{"effort":"none"},"store":false,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":"auto","tools":[],"top_p":0.95,"top_logprobs":null,"truncation":"disabled","user":null,"background":null,"metadata":{}}} + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: null +timestamp: '2026-11-04T02:52:44.752590+00:00' +upstream_url: https://api.fireworks.ai/inference/v1/responses diff --git a/tests/cassettes/upstream_ir/text_chat/fireworks-responses-stream-01.yaml b/tests/cassettes/upstream_ir/text_chat/fireworks-responses-stream-01.yaml new file mode 100644 index 0000000..ba9b3d0 --- /dev/null +++ b/tests/cassettes/upstream_ir/text_chat/fireworks-responses-stream-01.yaml @@ -0,0 +1,120 @@ +filename: 2026-11-04-01a1a479-2ac3-71d1-8f35-fe4669784e94 +request: + body: + input: + - content: + - text: 'Remember the exact phrase: blue lantern.' + type: input_text + - text: Reply briefly. + type: input_text + role: user + - content: + - annotations: [] + text: Blue lantern. + type: output_text + id: msg_b348b978c6df4705a726fd7db59e7bf2 + role: assistant + status: completed + type: message + - content: + - text: Repeat the phrase + type: input_text + - text: ' exactly, preserving its spaces.' + type: input_text + role: user + max_output_tokens: 2048 + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + reasoning: + effort: none + store: false + stream: true + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '627' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /inference/v1/responses + query_params: {} +request_id: 01a1a479-2ac3-71d1-8f35-fe4669784e94 +response: + error_event: false + headers: + cache-control: no-cache + connection: keep-alive + content-type: text/event-stream; charset=utf-8 + x-request-id: c3bf94e2-c109-41ff-ae91-84ec90bc82c3 + sse: + - 'data: {"type":"response.created","sequence_number":0,"response":{"id":"resp_a7a5da5939d443bb8ccd933ffb2b6439","object":"response","created_at":1793760766,"status":"in_progress","model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","output":[],"previous_response_id":null,"usage":null,"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":2048,"max_tool_calls":null,"parallel_tool_calls":true,"reasoning":{"effort":"none"},"store":false,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":"auto","tools":[],"top_p":1.0,"top_logprobs":null,"truncation":"disabled","user":null,"background":null,"metadata":{}}} + + ' + - ' + + ' + - 'data: {"type":"response.in_progress","sequence_number":1,"response":{"id":"resp_a7a5da5939d443bb8ccd933ffb2b6439","object":"response","created_at":1793760766,"status":"in_progress","model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","output":[],"previous_response_id":null,"usage":null,"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":2048,"max_tool_calls":null,"parallel_tool_calls":true,"reasoning":{"effort":"none"},"store":false,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":"auto","tools":[],"top_p":1.0,"top_logprobs":null,"truncation":"disabled","user":null,"background":null,"metadata":{}}} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.added","sequence_number":2,"output_index":0,"item":{"type":"message","id":"msg_58e4d781c3324891bf487bde28670134","status":"in_progress","role":"assistant","content":[]}} + + ' + - ' + + ' + - 'data: {"type":"response.content_part.added","sequence_number":3,"item_id":"msg_58e4d781c3324891bf487bde28670134","output_index":0,"content_index":0,"part":{"type":"output_text","text":"","annotations":[]}} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":4,"item_id":"msg_58e4d781c3324891bf487bde28670134","output_index":0,"content_index":0,"delta":"blue","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":5,"item_id":"msg_58e4d781c3324891bf487bde28670134","output_index":0,"content_index":0,"delta":" + lantern","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.done","sequence_number":6,"item_id":"msg_58e4d781c3324891bf487bde28670134","output_index":0,"content_index":0,"text":"blue + lantern","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.content_part.done","sequence_number":7,"item_id":"msg_58e4d781c3324891bf487bde28670134","output_index":0,"content_index":0,"part":{"type":"output_text","text":"blue + lantern","annotations":[]}} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.done","sequence_number":8,"output_index":0,"item":{"type":"message","id":"msg_58e4d781c3324891bf487bde28670134","status":"completed","role":"assistant","content":[{"type":"output_text","text":"blue + lantern","annotations":[]}]}} + + ' + - ' + + ' + - 'data: {"type":"response.completed","sequence_number":9,"response":{"id":"resp_a7a5da5939d443bb8ccd933ffb2b6439","object":"response","created_at":1793760767,"status":"completed","model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","output":[{"id":"msg_58e4d781c3324891bf487bde28670134","type":"message","role":"assistant","content":[{"type":"output_text","text":"blue + lantern","annotations":[]}],"status":"completed"}],"previous_response_id":null,"usage":{"input_tokens":54,"output_tokens":3,"total_tokens":57,"input_tokens_details":{"cached_tokens":27},"output_tokens_details":{"reasoning_tokens":0}},"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":2048,"max_tool_calls":null,"parallel_tool_calls":true,"reasoning":{"effort":"none"},"store":false,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":"auto","tools":[],"top_p":0.95,"top_logprobs":null,"truncation":"disabled","user":null,"background":null,"metadata":{}}} + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: null +timestamp: '2026-11-04T02:52:46.659874+00:00' +upstream_url: https://api.fireworks.ai/inference/v1/responses diff --git a/tests/cassettes/upstream_ir/text_chat/gemini-chat_completions-non_stream-00.yaml b/tests/cassettes/upstream_ir/text_chat/gemini-chat_completions-non_stream-00.yaml new file mode 100644 index 0000000..7d7b955 --- /dev/null +++ b/tests/cassettes/upstream_ir/text_chat/gemini-chat_completions-non_stream-00.yaml @@ -0,0 +1,180 @@ +filename: 2026-11-06-01a1af0d-271b-7d42-abfc-dfdc607c2e35 +request: + body: + max_completion_tokens: 1024 + messages: + - content: + - text: Suggest a name for a robot gardener. + type: text + role: user + model: gemini-3.1-flash-lite + reasoning_effort: minimal + stream: false + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '209' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /v1beta/openai/chat/completions + query_params: {} +request_id: 01a1af0d-271b-7d42-abfc-dfdc607c2e35 +response: + body: + choices: + - finish_reason: stop + index: 0 + message: + content: 'To choose the best name for a robot gardener, it helps to consider + the "vibe" of your robot. Here are several suggestions categorized by style: + + + ### Botanical & Nature-Inspired + + These names emphasize the robot’s connection to plants and growth. + + * **Floros:** A classic, tech-sounding name derived from "flora." + + * **Sprout:** Cute, simple, and perfect for a small helper. + + * **Chloris:** Named after the Greek nymph of flowers. + + * **Bud:** Friendly and short; implies growth. + + * **Terra:** Latin for earth/soil. + + * **Thistle:** A fun, slightly edgy name for a robot that handles weeds. + + * **Arbor:** Sounds sturdy and structural, like a tree. + + + ### Functional & Descriptive + + These names highlight the robot’s job and capabilities. + + * **GrowBot:** Straight to the point. + + * **Prunella:** A clever play on "pruning." + + * **Cultivator (or "Cully"):** Sounds professional and efficient. + + * **The Trowel:** A nod to the most essential gardening tool. + + * **Rooter:** Simple, punchy, and functional. + + * **WeedWiz:** If the robot is specifically good at weeding. + + + ### Playful & Whimsical + + If you want your robot to have personality. + + * **Wall-E (or "Wally"):** The gold standard for nature-loving bots. + + * **Petal Pusher:** A fun pun on "paper pusher." + + * **Green Thumb:** A classic, slightly ironic name for a machine. + + * **Twiggy:** Light, nimble, and plant-related. + + * **Bloom:** Short, sweet, and descriptive. + + * **Botany:** A clever pun on the field of study. + + + ### Sophisticated & Mythological + + These names sound a bit more "high-end" or elegant. + + * **Gaia:** The personification of the Earth itself. + + * **Demeter:** The Greek goddess of agriculture. + + * **Silvanus:** The Roman god of woods and fields. + + * **Verdant:** An adjective meaning green with grass or other rich vegetation. + + * **Eden:** Suggests the robot is creating a paradise. + + + ### My Personal Favorites: + + 1. **Sprout** (if it’s small and cute) + + 2. **Prunella** (if it’s precise and helpful) + + 3. **Terra** (if it’s a heavy-duty landscaping robot) + + 4. **Bud** (if it’s a friendly companion) + + + **Which one feels like the best fit for your robot''s personality?**' + extra_content: + google: + thought_signature: EnMKcQFpFH0TI4+252Fl0FAaX86pMAl+gciDec4Iol+aGKWnLaddBpKAZrHLCjY8NJHipy292S0D4IKlF5nncWMqOtiRlQvB61PWXVJbg0W/YuRzl/gnAFAlty+notTEppM9cGoWqdI1l5OFXQgpPEctBLPc + role: assistant + created: 1793938239 + id: PVPtaqTiGfyyytMPvoLJiQQ + model: gemini-3.1-flash-lite + object: chat.completion + usage: + completion_tokens: 592 + prompt_tokens: 9 + total_tokens: 601 + body_bytes: !!binary | + eyJjaG9pY2VzIjpbeyJmaW5pc2hfcmVhc29uIjoic3RvcCIsImluZGV4IjowLCJtZXNzYWdlIjp7 + ImNvbnRlbnQiOiJUbyBjaG9vc2UgdGhlIGJlc3QgbmFtZSBmb3IgYSByb2JvdCBnYXJkZW5lciwg + aXQgaGVscHMgdG8gY29uc2lkZXIgdGhlIFwidmliZVwiIG9mIHlvdXIgcm9ib3QuIEhlcmUgYXJl + IHNldmVyYWwgc3VnZ2VzdGlvbnMgY2F0ZWdvcml6ZWQgYnkgc3R5bGU6XG5cbiMjIyBCb3Rhbmlj + YWwgJiBOYXR1cmUtSW5zcGlyZWRcblRoZXNlIG5hbWVzIGVtcGhhc2l6ZSB0aGUgcm9ib3TigJlz + IGNvbm5lY3Rpb24gdG8gcGxhbnRzIGFuZCBncm93dGguXG4qICAgKipGbG9yb3M6KiogQSBjbGFz + c2ljLCB0ZWNoLXNvdW5kaW5nIG5hbWUgZGVyaXZlZCBmcm9tIFwiZmxvcmEuXCJcbiogICAqKlNw + cm91dDoqKiBDdXRlLCBzaW1wbGUsIGFuZCBwZXJmZWN0IGZvciBhIHNtYWxsIGhlbHBlci5cbiog + ICAqKkNobG9yaXM6KiogTmFtZWQgYWZ0ZXIgdGhlIEdyZWVrIG55bXBoIG9mIGZsb3dlcnMuXG4q + ICAgKipCdWQ6KiogRnJpZW5kbHkgYW5kIHNob3J0OyBpbXBsaWVzIGdyb3d0aC5cbiogICAqKlRl + cnJhOioqIExhdGluIGZvciBlYXJ0aC9zb2lsLlxuKiAgICoqVGhpc3RsZToqKiBBIGZ1biwgc2xp + Z2h0bHkgZWRneSBuYW1lIGZvciBhIHJvYm90IHRoYXQgaGFuZGxlcyB3ZWVkcy5cbiogICAqKkFy + Ym9yOioqIFNvdW5kcyBzdHVyZHkgYW5kIHN0cnVjdHVyYWwsIGxpa2UgYSB0cmVlLlxuXG4jIyMg + RnVuY3Rpb25hbCAmIERlc2NyaXB0aXZlXG5UaGVzZSBuYW1lcyBoaWdobGlnaHQgdGhlIHJvYm90 + 4oCZcyBqb2IgYW5kIGNhcGFiaWxpdGllcy5cbiogICAqKkdyb3dCb3Q6KiogU3RyYWlnaHQgdG8g + dGhlIHBvaW50LlxuKiAgICoqUHJ1bmVsbGE6KiogQSBjbGV2ZXIgcGxheSBvbiBcInBydW5pbmcu + XCJcbiogICAqKkN1bHRpdmF0b3IgKG9yIFwiQ3VsbHlcIik6KiogU291bmRzIHByb2Zlc3Npb25h + bCBhbmQgZWZmaWNpZW50LlxuKiAgICoqVGhlIFRyb3dlbDoqKiBBIG5vZCB0byB0aGUgbW9zdCBl + c3NlbnRpYWwgZ2FyZGVuaW5nIHRvb2wuXG4qICAgKipSb290ZXI6KiogU2ltcGxlLCBwdW5jaHks + IGFuZCBmdW5jdGlvbmFsLlxuKiAgICoqV2VlZFdpejoqKiBJZiB0aGUgcm9ib3QgaXMgc3BlY2lm + aWNhbGx5IGdvb2QgYXQgd2VlZGluZy5cblxuIyMjIFBsYXlmdWwgJiBXaGltc2ljYWxcbklmIHlv + dSB3YW50IHlvdXIgcm9ib3QgdG8gaGF2ZSBwZXJzb25hbGl0eS5cbiogICAqKldhbGwtRSAob3Ig + XCJXYWxseVwiKToqKiBUaGUgZ29sZCBzdGFuZGFyZCBmb3IgbmF0dXJlLWxvdmluZyBib3RzLlxu + KiAgICoqUGV0YWwgUHVzaGVyOioqIEEgZnVuIHB1biBvbiBcInBhcGVyIHB1c2hlci5cIlxuKiAg + ICoqR3JlZW4gVGh1bWI6KiogQSBjbGFzc2ljLCBzbGlnaHRseSBpcm9uaWMgbmFtZSBmb3IgYSBt + YWNoaW5lLlxuKiAgICoqVHdpZ2d5OioqIExpZ2h0LCBuaW1ibGUsIGFuZCBwbGFudC1yZWxhdGVk + LlxuKiAgICoqQmxvb206KiogU2hvcnQsIHN3ZWV0LCBhbmQgZGVzY3JpcHRpdmUuXG4qICAgKipC + b3Rhbnk6KiogQSBjbGV2ZXIgcHVuIG9uIHRoZSBmaWVsZCBvZiBzdHVkeS5cblxuIyMjIFNvcGhp + c3RpY2F0ZWQgJiBNeXRob2xvZ2ljYWxcblRoZXNlIG5hbWVzIHNvdW5kIGEgYml0IG1vcmUgXCJo + aWdoLWVuZFwiIG9yIGVsZWdhbnQuXG4qICAgKipHYWlhOioqIFRoZSBwZXJzb25pZmljYXRpb24g + b2YgdGhlIEVhcnRoIGl0c2VsZi5cbiogICAqKkRlbWV0ZXI6KiogVGhlIEdyZWVrIGdvZGRlc3Mg + b2YgYWdyaWN1bHR1cmUuXG4qICAgKipTaWx2YW51czoqKiBUaGUgUm9tYW4gZ29kIG9mIHdvb2Rz + IGFuZCBmaWVsZHMuXG4qICAgKipWZXJkYW50OioqIEFuIGFkamVjdGl2ZSBtZWFuaW5nIGdyZWVu + IHdpdGggZ3Jhc3Mgb3Igb3RoZXIgcmljaCB2ZWdldGF0aW9uLlxuKiAgICoqRWRlbjoqKiBTdWdn + ZXN0cyB0aGUgcm9ib3QgaXMgY3JlYXRpbmcgYSBwYXJhZGlzZS5cblxuIyMjIE15IFBlcnNvbmFs + IEZhdm9yaXRlczpcbjEuICAqKlNwcm91dCoqIChpZiBpdOKAmXMgc21hbGwgYW5kIGN1dGUpXG4y + LiAgKipQcnVuZWxsYSoqIChpZiBpdOKAmXMgcHJlY2lzZSBhbmQgaGVscGZ1bClcbjMuICAqKlRl + cnJhKiogKGlmIGl04oCZcyBhIGhlYXZ5LWR1dHkgbGFuZHNjYXBpbmcgcm9ib3QpXG40LiAgKipC + dWQqKiAoaWYgaXTigJlzIGEgZnJpZW5kbHkgY29tcGFuaW9uKVxuXG4qKldoaWNoIG9uZSBmZWVs + cyBsaWtlIHRoZSBiZXN0IGZpdCBmb3IgeW91ciByb2JvdCdzIHBlcnNvbmFsaXR5PyoqIiwiZXh0 + cmFfY29udGVudCI6eyJnb29nbGUiOnsidGhvdWdodF9zaWduYXR1cmUiOiJFbk1LY1FGcEZIMFRJ + NCsyNTJGbDBGQWFYODZwTUFsK2djaURlYzRJb2wrYUdLV25MYWRkQnBLQVpySExDalk4TkpIaXB5 + MjkyUzBENElLbEY1bm5jV01xT3RpUmxRdkI2MVBXWFZKYmcwVy9ZdVJ6bC9nbkFGQWx0eStub3RU + RXBwTTljR29XcWRJMWw1T0ZYUWdwUEVjdEJMUGMifX0sInJvbGUiOiJhc3Npc3RhbnQifX1dLCJj + cmVhdGVkIjoxNzkzOTM4MjM5LCJpZCI6IlBWUHRhcVRpR2Z5eXl0TVB2b0xKaVFRIiwibW9kZWwi + OiJnZW1pbmktMy4xLWZsYXNoLWxpdGUiLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24iLCJ1c2Fn + ZSI6eyJjb21wbGV0aW9uX3Rva2VucyI6NTkyLCJwcm9tcHRfdG9rZW5zIjo5LCJ0b3RhbF90b2tl + bnMiOjYwMX19 + headers: + content-type: application/json + status_code: 200 +timestamp: '2026-11-06T04:10:37.211418+00:00' +upstream_url: https://generativelanguage.googleapis.com/v1beta/openai/chat/completions diff --git a/tests/cassettes/upstream_ir/text_chat/gemini-chat_completions-non_stream-01.yaml b/tests/cassettes/upstream_ir/text_chat/gemini-chat_completions-non_stream-01.yaml new file mode 100644 index 0000000..45563f8 --- /dev/null +++ b/tests/cassettes/upstream_ir/text_chat/gemini-chat_completions-non_stream-01.yaml @@ -0,0 +1,255 @@ +filename: 2026-11-06-01a1af0d-3158-7200-a9d1-36a9ac59013c +request: + body: + max_completion_tokens: 1024 + messages: + - content: + - text: Suggest a name for a robot gardener. + type: text + role: user + - content: 'To choose the best name for a robot gardener, it helps to consider + the "vibe" of your robot. Here are several suggestions categorized by style: + + + ### Botanical & Nature-Inspired + + These names emphasize the robot’s connection to plants and growth. + + * **Floros:** A classic, tech-sounding name derived from "flora." + + * **Sprout:** Cute, simple, and perfect for a small helper. + + * **Chloris:** Named after the Greek nymph of flowers. + + * **Bud:** Friendly and short; implies growth. + + * **Terra:** Latin for earth/soil. + + * **Thistle:** A fun, slightly edgy name for a robot that handles weeds. + + * **Arbor:** Sounds sturdy and structural, like a tree. + + + ### Functional & Descriptive + + These names highlight the robot’s job and capabilities. + + * **GrowBot:** Straight to the point. + + * **Prunella:** A clever play on "pruning." + + * **Cultivator (or "Cully"):** Sounds professional and efficient. + + * **The Trowel:** A nod to the most essential gardening tool. + + * **Rooter:** Simple, punchy, and functional. + + * **WeedWiz:** If the robot is specifically good at weeding. + + + ### Playful & Whimsical + + If you want your robot to have personality. + + * **Wall-E (or "Wally"):** The gold standard for nature-loving bots. + + * **Petal Pusher:** A fun pun on "paper pusher." + + * **Green Thumb:** A classic, slightly ironic name for a machine. + + * **Twiggy:** Light, nimble, and plant-related. + + * **Bloom:** Short, sweet, and descriptive. + + * **Botany:** A clever pun on the field of study. + + + ### Sophisticated & Mythological + + These names sound a bit more "high-end" or elegant. + + * **Gaia:** The personification of the Earth itself. + + * **Demeter:** The Greek goddess of agriculture. + + * **Silvanus:** The Roman god of woods and fields. + + * **Verdant:** An adjective meaning green with grass or other rich vegetation. + + * **Eden:** Suggests the robot is creating a paradise. + + + ### My Personal Favorites: + + 1. **Sprout** (if it’s small and cute) + + 2. **Prunella** (if it’s precise and helpful) + + 3. **Terra** (if it’s a heavy-duty landscaping robot) + + 4. **Bud** (if it’s a friendly companion) + + + **Which one feels like the best fit for your robot''s personality?**' + extra_content: + google: + thought_signature: EnMKcQFpFH0TI4+252Fl0FAaX86pMAl+gciDec4Iol+aGKWnLaddBpKAZrHLCjY8NJHipy292S0D4IKlF5nncWMqOtiRlQvB61PWXVJbg0W/YuRzl/gnAFAlty+notTEppM9cGoWqdI1l5OFXQgpPEctBLPc + role: assistant + - content: + - text: Explain why that name fits. + type: text + role: user + model: gemini-3.1-flash-lite + reasoning_effort: minimal + stream: false + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '2738' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /v1beta/openai/chat/completions + query_params: {} +request_id: 01a1af0d-3158-7200-a9d1-36a9ac59013c +response: + body: + choices: + - finish_reason: stop + index: 0 + message: + content: 'To give you the best explanation, I have selected the four that + hold the most "character" and explained the logic behind why they work so + well as a robot gardener''s identity: + + + ### 1. Sprout (The "Cute & Capable" Choice) + + * **Why it fits:** The name "Sprout" implies the beginning of growth. + For a robot, it creates an endearing irony: a machine built from cold metal + and code is named after the most delicate, fragile stage of a plant’s life. + It makes the robot seem like a "nurturer" rather than just a machine, which + creates an emotional connection for the human owner. It suggests that while + the robot is technical, its purpose is to protect life. + + + ### 2. Prunella (The "Precision & Professional" Choice) + + * **Why it fits:** This is a play on the word "pruning," but it sounds + like a sophisticated, Victorian-era name. It gives the robot a "human" identity + while immediately signaling its specific skill set. It sounds like an efficient, + highly capable robot that takes its job very seriously. It’s perfect for + a sleek, precise machine that meticulously maintains hedges and roses. + + + ### 3. Terra (The "Foundation & Power" Choice) + + * **Why it fits:** In Latin, *Terra* means Earth. It sounds grounded, + solid, and vast. If your robot is a larger model—perhaps one that handles + heavy-duty landscaping, rototilling, or large-scale irrigation—"Terra" makes + it sound like a force of nature. It elevates the robot from a mere "tool" + to a steward of the environment, implying that the machine is an extension + of the garden itself. + + + ### 4. Bud (The "Friendly Companion" Choice) + + * **Why it fits:** "Bud" serves a double meaning: it refers to both a + plant bud and the slang for "friend" (buddy). It is short, punchy, and incredibly + accessible. It’s the perfect name for a robot that interacts with people, + perhaps one that follows a gardener around or works in a community garden. + It suggests a low-maintenance, reliable, and friendly partner that is always + there to help out. + + + *** + + + **How to decide?** + + * **If the robot looks small/cute:** Go with **Sprout**. + + * **If the robot looks precise/technical:** Go with **Prunella**. + + * **If the robot is large/heavy-duty:** Go with **Terra**. + + * **If the robot is meant to be a helpful companion:** Go with **Bud**. + + + **Which one feels most like your robot?** If you tell me a little about + what the robot *looks* like (e.g., is it a small spider-like drone, a bulky + tracked vehicle, or a humanoid figure?), I can help you narrow it down further!' + extra_content: + google: + thought_signature: EnMKcQFpFH0TiYhg91jnxObJefxsMyAumTGblU6l0dyji2duPSmvRyNj9p6o/b9lv4DRfUIRIXffUSgg8rcn3Uz8WwupQURGqQ3Cjz7LpRqau/BXBNAgAMzkfSaHwdqv4wGB+5xj/4uyPPkSMV1DAGgfq0bY + role: assistant + created: 1793938242 + id: QFPtauZmzqrK0w-6oLj4DQ + model: gemini-3.1-flash-lite + object: chat.completion + usage: + completion_tokens: 608 + prompt_tokens: 609 + total_tokens: 1217 + body_bytes: !!binary | + eyJjaG9pY2VzIjpbeyJmaW5pc2hfcmVhc29uIjoic3RvcCIsImluZGV4IjowLCJtZXNzYWdlIjp7 + ImNvbnRlbnQiOiJUbyBnaXZlIHlvdSB0aGUgYmVzdCBleHBsYW5hdGlvbiwgSSBoYXZlIHNlbGVj + dGVkIHRoZSBmb3VyIHRoYXQgaG9sZCB0aGUgbW9zdCBcImNoYXJhY3RlclwiIGFuZCBleHBsYWlu + ZWQgdGhlIGxvZ2ljIGJlaGluZCB3aHkgdGhleSB3b3JrIHNvIHdlbGwgYXMgYSByb2JvdCBnYXJk + ZW5lcidzIGlkZW50aXR5OlxuXG4jIyMgMS4gU3Byb3V0IChUaGUgXCJDdXRlICYgQ2FwYWJsZVwi + IENob2ljZSlcbiogICAqKldoeSBpdCBmaXRzOioqIFRoZSBuYW1lIFwiU3Byb3V0XCIgaW1wbGll + cyB0aGUgYmVnaW5uaW5nIG9mIGdyb3d0aC4gRm9yIGEgcm9ib3QsIGl0IGNyZWF0ZXMgYW4gZW5k + ZWFyaW5nIGlyb255OiBhIG1hY2hpbmUgYnVpbHQgZnJvbSBjb2xkIG1ldGFsIGFuZCBjb2RlIGlz + IG5hbWVkIGFmdGVyIHRoZSBtb3N0IGRlbGljYXRlLCBmcmFnaWxlIHN0YWdlIG9mIGEgcGxhbnTi + gJlzIGxpZmUuIEl0IG1ha2VzIHRoZSByb2JvdCBzZWVtIGxpa2UgYSBcIm51cnR1cmVyXCIgcmF0 + aGVyIHRoYW4ganVzdCBhIG1hY2hpbmUsIHdoaWNoIGNyZWF0ZXMgYW4gZW1vdGlvbmFsIGNvbm5l + Y3Rpb24gZm9yIHRoZSBodW1hbiBvd25lci4gSXQgc3VnZ2VzdHMgdGhhdCB3aGlsZSB0aGUgcm9i + b3QgaXMgdGVjaG5pY2FsLCBpdHMgcHVycG9zZSBpcyB0byBwcm90ZWN0IGxpZmUuXG5cbiMjIyAy + LiBQcnVuZWxsYSAoVGhlIFwiUHJlY2lzaW9uICYgUHJvZmVzc2lvbmFsXCIgQ2hvaWNlKVxuKiAg + ICoqV2h5IGl0IGZpdHM6KiogVGhpcyBpcyBhIHBsYXkgb24gdGhlIHdvcmQgXCJwcnVuaW5nLFwi + IGJ1dCBpdCBzb3VuZHMgbGlrZSBhIHNvcGhpc3RpY2F0ZWQsIFZpY3Rvcmlhbi1lcmEgbmFtZS4g + SXQgZ2l2ZXMgdGhlIHJvYm90IGEgXCJodW1hblwiIGlkZW50aXR5IHdoaWxlIGltbWVkaWF0ZWx5 + IHNpZ25hbGluZyBpdHMgc3BlY2lmaWMgc2tpbGwgc2V0LiBJdCBzb3VuZHMgbGlrZSBhbiBlZmZp + Y2llbnQsIGhpZ2hseSBjYXBhYmxlIHJvYm90IHRoYXQgdGFrZXMgaXRzIGpvYiB2ZXJ5IHNlcmlv + dXNseS4gSXTigJlzIHBlcmZlY3QgZm9yIGEgc2xlZWssIHByZWNpc2UgbWFjaGluZSB0aGF0IG1l + dGljdWxvdXNseSBtYWludGFpbnMgaGVkZ2VzIGFuZCByb3Nlcy5cblxuIyMjIDMuIFRlcnJhIChU + aGUgXCJGb3VuZGF0aW9uICYgUG93ZXJcIiBDaG9pY2UpXG4qICAgKipXaHkgaXQgZml0czoqKiBJ + biBMYXRpbiwgKlRlcnJhKiBtZWFucyBFYXJ0aC4gSXQgc291bmRzIGdyb3VuZGVkLCBzb2xpZCwg + YW5kIHZhc3QuIElmIHlvdXIgcm9ib3QgaXMgYSBsYXJnZXIgbW9kZWzigJRwZXJoYXBzIG9uZSB0 + aGF0IGhhbmRsZXMgaGVhdnktZHV0eSBsYW5kc2NhcGluZywgcm90b3RpbGxpbmcsIG9yIGxhcmdl + LXNjYWxlIGlycmlnYXRpb27igJRcIlRlcnJhXCIgbWFrZXMgaXQgc291bmQgbGlrZSBhIGZvcmNl + IG9mIG5hdHVyZS4gSXQgZWxldmF0ZXMgdGhlIHJvYm90IGZyb20gYSBtZXJlIFwidG9vbFwiIHRv + IGEgc3Rld2FyZCBvZiB0aGUgZW52aXJvbm1lbnQsIGltcGx5aW5nIHRoYXQgdGhlIG1hY2hpbmUg + aXMgYW4gZXh0ZW5zaW9uIG9mIHRoZSBnYXJkZW4gaXRzZWxmLlxuXG4jIyMgNC4gQnVkIChUaGUg + XCJGcmllbmRseSBDb21wYW5pb25cIiBDaG9pY2UpXG4qICAgKipXaHkgaXQgZml0czoqKiBcIkJ1 + ZFwiIHNlcnZlcyBhIGRvdWJsZSBtZWFuaW5nOiBpdCByZWZlcnMgdG8gYm90aCBhIHBsYW50IGJ1 + ZCBhbmQgdGhlIHNsYW5nIGZvciBcImZyaWVuZFwiIChidWRkeSkuIEl0IGlzIHNob3J0LCBwdW5j + aHksIGFuZCBpbmNyZWRpYmx5IGFjY2Vzc2libGUuIEl04oCZcyB0aGUgcGVyZmVjdCBuYW1lIGZv + ciBhIHJvYm90IHRoYXQgaW50ZXJhY3RzIHdpdGggcGVvcGxlLCBwZXJoYXBzIG9uZSB0aGF0IGZv + bGxvd3MgYSBnYXJkZW5lciBhcm91bmQgb3Igd29ya3MgaW4gYSBjb21tdW5pdHkgZ2FyZGVuLiBJ + dCBzdWdnZXN0cyBhIGxvdy1tYWludGVuYW5jZSwgcmVsaWFibGUsIGFuZCBmcmllbmRseSBwYXJ0 + bmVyIHRoYXQgaXMgYWx3YXlzIHRoZXJlIHRvIGhlbHAgb3V0LlxuXG4qKipcblxuKipIb3cgdG8g + ZGVjaWRlPyoqXG4qICAgKipJZiB0aGUgcm9ib3QgbG9va3Mgc21hbGwvY3V0ZToqKiBHbyB3aXRo + ICoqU3Byb3V0KiouXG4qICAgKipJZiB0aGUgcm9ib3QgbG9va3MgcHJlY2lzZS90ZWNobmljYWw6 + KiogR28gd2l0aCAqKlBydW5lbGxhKiouXG4qICAgKipJZiB0aGUgcm9ib3QgaXMgbGFyZ2UvaGVh + dnktZHV0eToqKiBHbyB3aXRoICoqVGVycmEqKi5cbiogICAqKklmIHRoZSByb2JvdCBpcyBtZWFu + dCB0byBiZSBhIGhlbHBmdWwgY29tcGFuaW9uOioqIEdvIHdpdGggKipCdWQqKi5cblxuKipXaGlj + aCBvbmUgZmVlbHMgbW9zdCBsaWtlIHlvdXIgcm9ib3Q/KiogSWYgeW91IHRlbGwgbWUgYSBsaXR0 + bGUgYWJvdXQgd2hhdCB0aGUgcm9ib3QgKmxvb2tzKiBsaWtlIChlLmcuLCBpcyBpdCBhIHNtYWxs + IHNwaWRlci1saWtlIGRyb25lLCBhIGJ1bGt5IHRyYWNrZWQgdmVoaWNsZSwgb3IgYSBodW1hbm9p + ZCBmaWd1cmU/KSwgSSBjYW4gaGVscCB5b3UgbmFycm93IGl0IGRvd24gZnVydGhlciEiLCJleHRy + YV9jb250ZW50Ijp7Imdvb2dsZSI6eyJ0aG91Z2h0X3NpZ25hdHVyZSI6IkVuTUtjUUZwRkgwVGlZ + aGc5MWpueE9iSmVmeHNNeUF1bVRHYmxVNmwwZHlqaTJkdVBTbXZSeU5qOXA2by9iOWx2NERSZlVJ + UklYZmZVU2dnOHJjbjNVejhXd3VwUVVSR3FRM0NqejdMcFJxYXUvQlhCTkFnQU16a2ZTYUh3ZHF2 + NHdHQis1eGovNHV5UFBrU01WMURBR2dmcTBiWSJ9fSwicm9sZSI6ImFzc2lzdGFudCJ9fV0sImNy + ZWF0ZWQiOjE3OTM5MzgyNDIsImlkIjoiUUZQdGF1Wm16cXJLMHctNm9MajREUSIsIm1vZGVsIjoi + Z2VtaW5pLTMuMS1mbGFzaC1saXRlIiwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uIiwidXNhZ2Ui + OnsiY29tcGxldGlvbl90b2tlbnMiOjYwOCwicHJvbXB0X3Rva2VucyI6NjA5LCJ0b3RhbF90b2tl + bnMiOjEyMTd9fQ== + headers: + content-type: application/json + status_code: 200 +timestamp: '2026-11-06T04:10:39.832330+00:00' +upstream_url: https://generativelanguage.googleapis.com/v1beta/openai/chat/completions diff --git a/tests/cassettes/upstream_ir/text_chat/gemini-chat_completions-stream-00.yaml b/tests/cassettes/upstream_ir/text_chat/gemini-chat_completions-stream-00.yaml new file mode 100644 index 0000000..9960ea4 --- /dev/null +++ b/tests/cassettes/upstream_ir/text_chat/gemini-chat_completions-stream-00.yaml @@ -0,0 +1,202 @@ +filename: 2026-11-06-01a1af0d-1449-7083-9df6-5b57d3d63851 +request: + body: + max_completion_tokens: 1024 + messages: + - content: + - text: Suggest a name for a robot gardener. + type: text + role: user + model: gemini-3.1-flash-lite + reasoning_effort: minimal + stream: true + stream_options: + include_usage: true + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '248' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /v1beta/openai/chat/completions + query_params: {} +request_id: 01a1af0d-1449-7083-9df6-5b57d3d63851 +response: + error_event: false + headers: + cache-control: private + content-type: text/event-stream + sse: + - 'data: {"choices":[{"delta":{"content":"To choose the best name for a robot gardener, + it helps to decide","role":"assistant"},"index":0}],"created":1793938233,"id":"OFPtap_mKpuB1sgPmYaBqQI","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":14,"prompt_tokens":9,"total_tokens":23}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" on the \"personality\" you want it to + have. Here are a few suggestions broken down by category:\n\n### Friendly & Helpful","role":"assistant"},"index":0}],"created":1793938233,"id":"OFPtap_mKpuB1sgPmYaBqQI","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":40,"prompt_tokens":9,"total_tokens":49}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":"\n* **Sprout:** Simple, classic, and + suggests new growth.\n* **Buddy:** Sounds like a reliable, approachable","role":"assistant"},"index":0}],"created":1793938233,"id":"OFPtap_mKpuB1sgPmYaBqQI","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":68,"prompt_tokens":9,"total_tokens":77}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" companion.\n* **Petal:** Gentle and + nature-focused.\n* **Gardner:** A play","role":"assistant"},"index":0}],"created":1793938233,"id":"OFPtap_mKpuB1sgPmYaBqQI","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":92,"prompt_tokens":9,"total_tokens":101}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" on \"gardener\" that feels like a robot + name.\n* **Moss:** Perfect if the robot is small","role":"assistant"},"index":0}],"created":1793938233,"id":"OFPtap_mKpuB1sgPmYaBqQI","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":116,"prompt_tokens":9,"total_tokens":125}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":", green, or rugged.\n\n### Tech-Focused + & Clever\n* **Bot-anist:** The gold standard","role":"assistant"},"index":0}],"created":1793938233,"id":"OFPtap_mKpuB1sgPmYaBqQI","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":141,"prompt_tokens":9,"total_tokens":150}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" for a robot gardener pun.\n* **Terra:** + Latin for Earth; sounds futuristic but grounded.\n* **Root","role":"assistant"},"index":0}],"created":1793938233,"id":"OFPtap_mKpuB1sgPmYaBqQI","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":167,"prompt_tokens":9,"total_tokens":176}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":"-R:** A play on \"Router,\" but for a + plant-based robot.\n* **S.O.I.L","role":"assistant"},"index":0}],"created":1793938233,"id":"OFPtap_mKpuB1sgPmYaBqQI","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":195,"prompt_tokens":9,"total_tokens":204}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":". (System for Organic Integrated Life):** + An acronym name sounds very \"robot-like.\"\n* **Cult","role":"assistant"},"index":0}],"created":1793938233,"id":"OFPtap_mKpuB1sgPmYaBqQI","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":219,"prompt_tokens":9,"total_tokens":228}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":"ivator-9:** Sounds professional and industrial.\n\n### + Whimsical & Fun\n* **Thistle:** A bit","role":"assistant"},"index":0}],"created":1793938233,"id":"OFPtap_mKpuB1sgPmYaBqQI","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":245,"prompt_tokens":9,"total_tokens":254}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" prickly, but charming.\n* **Flowerpot:** + Cute, especially if the robot has a storage compartment.\n* **","role":"assistant"},"index":0}],"created":1793938233,"id":"OFPtap_mKpuB1sgPmYaBqQI","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":272,"prompt_tokens":9,"total_tokens":281}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":"Digby:** Sounds like a helpful little + guy who loves to dig in the dirt.\n* **Clippy:** A nod","role":"assistant"},"index":0}],"created":1793938234,"id":"OFPtap_mKpuB1sgPmYaBqQI","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":298,"prompt_tokens":9,"total_tokens":307}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" to the old Microsoft assistant (but hopefully + much more useful).\n* **Dewey:** A play on \"morning","role":"assistant"},"index":0}],"created":1793938234,"id":"OFPtap_mKpuB1sgPmYaBqQI","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":322,"prompt_tokens":9,"total_tokens":331}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" dew\" and a friendly name.\n\n### Sophisticated + & Elegant\n* **Flora:** Timeless and perfectly suited","role":"assistant"},"index":0}],"created":1793938234,"id":"OFPtap_mKpuB1sgPmYaBqQI","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":346,"prompt_tokens":9,"total_tokens":355}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" for a green space.\n* **Silvan:** Derived + from the Latin word for \"woods\" or \"forest.\"","role":"assistant"},"index":0}],"created":1793938234,"id":"OFPtap_mKpuB1sgPmYaBqQI","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":371,"prompt_tokens":9,"total_tokens":380}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":"\n* **Arbor:** Sounds sturdy, structural, + and sophisticated.\n* **Verde:** Spanish/","role":"assistant"},"index":0}],"created":1793938234,"id":"OFPtap_mKpuB1sgPmYaBqQI","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":395,"prompt_tokens":9,"total_tokens":404}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":"Italian for green; sounds sleek.\n* **Gaia:** + Named after the personification of the Earth.\n\n###","role":"assistant"},"index":0}],"created":1793938234,"id":"OFPtap_mKpuB1sgPmYaBqQI","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":419,"prompt_tokens":9,"total_tokens":428}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" If you want to get creative:\n* **Combine + your favorite plant with a robot term:** (e.g., **","role":"assistant"},"index":0}],"created":1793938234,"id":"OFPtap_mKpuB1sgPmYaBqQI","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":445,"prompt_tokens":9,"total_tokens":454}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":"Fern-droid**, **Rose-o-matic**, **Cactus-bot**)\n* **Use + an acronym","role":"assistant"},"index":0}],"created":1793938234,"id":"OFPtap_mKpuB1sgPmYaBqQI","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":469,"prompt_tokens":9,"total_tokens":478}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":":** (e.g., **G.R.E.E.N.** – Garden Robotic + Ecosystem Engineer Node)\n\n**My","role":"assistant"},"index":0}],"created":1793938234,"id":"OFPtap_mKpuB1sgPmYaBqQI","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":496,"prompt_tokens":9,"total_tokens":505}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" top recommendation:** If you want something + charming, go with **Sprout**. If you want something clever, go with **Bot-an","role":"assistant"},"index":0}],"created":1793938234,"id":"OFPtap_mKpuB1sgPmYaBqQI","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":523,"prompt_tokens":9,"total_tokens":532}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":"ist**.","role":"assistant"},"index":0}],"created":1793938234,"id":"OFPtap_mKpuB1sgPmYaBqQI","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":525,"prompt_tokens":9,"total_tokens":534}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"extra_content":{"google":{"thought_signature":"EnMKcQFpFH0TNsLpBCRAwxC25RsdOMMSlbUxFGz669CzKl/7EoUKw7QVBn0kL1l9ny7ACRc0jkYIL3GqdjpedlVyKmpV8wuT67dBKnBb9AvnIt930RaGiRkDCcE0a2P+IvmMx2AEdBWynXAla7Kps1dTIiEV"}},"role":"assistant"},"finish_reason":"stop","index":0}],"created":1793938234,"id":"OFPtap_mKpuB1sgPmYaBqQI","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":525,"prompt_tokens":9,"total_tokens":534}} + + ' + - ' + + ' + - 'data: [DONE] + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: '[DONE]' +timestamp: '2026-11-06T04:10:32.393603+00:00' +upstream_url: https://generativelanguage.googleapis.com/v1beta/openai/chat/completions diff --git a/tests/cassettes/upstream_ir/text_chat/gemini-chat_completions-stream-01.yaml b/tests/cassettes/upstream_ir/text_chat/gemini-chat_completions-stream-01.yaml new file mode 100644 index 0000000..ff98a76 --- /dev/null +++ b/tests/cassettes/upstream_ir/text_chat/gemini-chat_completions-stream-01.yaml @@ -0,0 +1,266 @@ +filename: 2026-11-06-01a1af0d-1e34-7a61-8b70-a9bfcaeb950c +request: + body: + max_completion_tokens: 1024 + messages: + - content: + - text: Suggest a name for a robot gardener. + type: text + role: user + - content: 'To choose the best name for a robot gardener, it helps to decide on + the "personality" you want it to have. Here are a few suggestions broken down + by category: + + + ### Friendly & Helpful + + * **Sprout:** Simple, classic, and suggests new growth. + + * **Buddy:** Sounds like a reliable, approachable companion. + + * **Petal:** Gentle and nature-focused. + + * **Gardner:** A play on "gardener" that feels like a robot name. + + * **Moss:** Perfect if the robot is small, green, or rugged. + + + ### Tech-Focused & Clever + + * **Bot-anist:** The gold standard for a robot gardener pun. + + * **Terra:** Latin for Earth; sounds futuristic but grounded. + + * **Root-R:** A play on "Router," but for a plant-based robot. + + * **S.O.I.L. (System for Organic Integrated Life):** An acronym name sounds + very "robot-like." + + * **Cultivator-9:** Sounds professional and industrial. + + + ### Whimsical & Fun + + * **Thistle:** A bit prickly, but charming. + + * **Flowerpot:** Cute, especially if the robot has a storage compartment. + + * **Digby:** Sounds like a helpful little guy who loves to dig in the dirt. + + * **Clippy:** A nod to the old Microsoft assistant (but hopefully much more + useful). + + * **Dewey:** A play on "morning dew" and a friendly name. + + + ### Sophisticated & Elegant + + * **Flora:** Timeless and perfectly suited for a green space. + + * **Silvan:** Derived from the Latin word for "woods" or "forest." + + * **Arbor:** Sounds sturdy, structural, and sophisticated. + + * **Verde:** Spanish/Italian for green; sounds sleek. + + * **Gaia:** Named after the personification of the Earth. + + + ### If you want to get creative: + + * **Combine your favorite plant with a robot term:** (e.g., **Fern-droid**, + **Rose-o-matic**, **Cactus-bot**) + + * **Use an acronym:** (e.g., **G.R.E.E.N.** – Garden Robotic Ecosystem Engineer + Node) + + + **My top recommendation:** If you want something charming, go with **Sprout**. + If you want something clever, go with **Bot-anist**.' + extra_content: + google: + thought_signature: EnMKcQFpFH0TNsLpBCRAwxC25RsdOMMSlbUxFGz669CzKl/7EoUKw7QVBn0kL1l9ny7ACRc0jkYIL3GqdjpedlVyKmpV8wuT67dBKnBb9AvnIt930RaGiRkDCcE0a2P+IvmMx2AEdBWynXAla7Kps1dTIiEV + role: assistant + - content: + - text: Explain why that name fits. + type: text + role: user + model: gemini-3.1-flash-lite + reasoning_effort: minimal + stream: true + stream_options: + include_usage: true + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '2545' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /v1beta/openai/chat/completions + query_params: {} +request_id: 01a1af0d-1e34-7a61-8b70-a9bfcaeb950c +response: + error_event: false + headers: + cache-control: private + content-type: text/event-stream + sse: + - 'data: {"choices":[{"delta":{"content":"Since","role":"assistant"},"index":0}],"created":1793938235,"id":"O1Ptar_6Cs6tytMP1PeV6Q4","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":1,"prompt_tokens":542,"total_tokens":543}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" I recommended **Sprout** and **Bot-anist** + as the top choices, here","role":"assistant"},"index":0}],"created":1793938235,"id":"O1Ptar_6Cs6tytMP1PeV6Q4","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":20,"prompt_tokens":542,"total_tokens":562}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" is why each name perfectly captures the + \"vibe\" of a robot gardener:\n\n### Why \"Sprout\" works:\n","role":"assistant"},"index":0}],"created":1793938235,"id":"O1Ptar_6Cs6tytMP1PeV6Q4","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":46,"prompt_tokens":542,"total_tokens":588}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":"* **The Emotional Connection:** \"Sprout\" + implies potential. Because a robot is a machine, people often view them","role":"assistant"},"index":0}],"created":1793938235,"id":"O1Ptar_6Cs6tytMP1PeV6Q4","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":71,"prompt_tokens":542,"total_tokens":613}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" as cold or technical; naming it Sprout + humanizes it. It frames the robot’s job not just as \"maintenance","role":"assistant"},"index":0}],"created":1793938235,"id":"O1Ptar_6Cs6tytMP1PeV6Q4","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":96,"prompt_tokens":542,"total_tokens":638}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":",\" but as \"nurturing.\"\n* **Simplicity:** + It is short, easy to say, and easy for a voice","role":"assistant"},"index":0}],"created":1793938235,"id":"O1Ptar_6Cs6tytMP1PeV6Q4","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":124,"prompt_tokens":542,"total_tokens":666}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":"-activated system to recognize. It feels + like the name of a loyal sidekick in a Pixar movie.\n* **Visual Contrast","role":"assistant"},"index":0}],"created":1793938236,"id":"O1Ptar_6Cs6tytMP1PeV6Q4","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":151,"prompt_tokens":542,"total_tokens":693}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":":** There is a delightful irony in a machine + (made of metal, circuits, and wires) having a name that represents","role":"assistant"},"index":0}],"created":1793938236,"id":"O1Ptar_6Cs6tytMP1PeV6Q4","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":175,"prompt_tokens":542,"total_tokens":717}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" the most delicate, organic stage of plant + life. It suggests that the robot understands the fragility of the things it is + growing","role":"assistant"},"index":0}],"created":1793938236,"id":"O1Ptar_6Cs6tytMP1PeV6Q4","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":199,"prompt_tokens":542,"total_tokens":741}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":".\n\n### Why \"Bot-anist\" works:\n* **The + \"Double Meaning\" Payoff:** It is a","role":"assistant"},"index":0}],"created":1793938236,"id":"O1Ptar_6Cs6tytMP1PeV6Q4","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":226,"prompt_tokens":542,"total_tokens":768}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" clever, high-IQ pun. It explicitly states + exactly what the machine is (a *bot*) and exactly what it","role":"assistant"},"index":0}],"created":1793938236,"id":"O1Ptar_6Cs6tytMP1PeV6Q4","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":250,"prompt_tokens":542,"total_tokens":792}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" does (it is an *anist* / botanist). \n* **Professional + Authority:** While \"Sprout\" sounds","role":"assistant"},"index":0}],"created":1793938236,"id":"O1Ptar_6Cs6tytMP1PeV6Q4","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":277,"prompt_tokens":542,"total_tokens":819}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" like a pet, \"Bot-anist\" sounds like + an expert. If your robot is sophisticated—meaning it has sensors for soil","role":"assistant"},"index":0}],"created":1793938236,"id":"O1Ptar_6Cs6tytMP1PeV6Q4","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":304,"prompt_tokens":542,"total_tokens":846}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" acidity, light levels, and hydration—this + name gives it a sense of scientific purpose.\n* **Memorable Branding","role":"assistant"},"index":0}],"created":1793938236,"id":"O1Ptar_6Cs6tytMP1PeV6Q4","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":329,"prompt_tokens":542,"total_tokens":871}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":":** If you were to paint this name on + the side of the robot, it would immediately tell anyone who sees it exactly","role":"assistant"},"index":0}],"created":1793938236,"id":"O1Ptar_6Cs6tytMP1PeV6Q4","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":353,"prompt_tokens":542,"total_tokens":895}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" what it’s for. It’s witty, punchy, and + feels like something a scientist or a high-tech gardener would genuinely","role":"assistant"},"index":0}],"created":1793938236,"id":"O1Ptar_6Cs6tytMP1PeV6Q4","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":381,"prompt_tokens":542,"total_tokens":923}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" name their invention.\n\n***\n\n**How + to decide between the two:**\n\n* Choose **Sprout** if your","role":"assistant"},"index":0}],"created":1793938236,"id":"O1Ptar_6Cs6tytMP1PeV6Q4","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":406,"prompt_tokens":542,"total_tokens":948}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" robot is small, cute, rounded in shape, + or meant to be a friendly helper for a home garden.\n* Choose","role":"assistant"},"index":0}],"created":1793938237,"id":"O1Ptar_6Cs6tytMP1PeV6Q4","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":432,"prompt_tokens":542,"total_tokens":974}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" **Bot-anist** if your robot is more functional, + tech-forward, analytical, or has a professional \"","role":"assistant"},"index":0}],"created":1793938237,"id":"O1Ptar_6Cs6tytMP1PeV6Q4","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":456,"prompt_tokens":542,"total_tokens":998}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":"research-lab\" aesthetic.","role":"assistant"},"index":0}],"created":1793938237,"id":"O1Ptar_6Cs6tytMP1PeV6Q4","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":462,"prompt_tokens":542,"total_tokens":1004}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"extra_content":{"google":{"thought_signature":"EnMKcQFpFH0T1cwJYPvzREudpqMGFsZQZOKibfwFCPKDH1HInC20Xk3/5IyO2WHJQjg0QPhcByGUKwqNKjKjyknSPojBSDyyYZ83sYKsnTHXjbnT3MSpqJUKX6bMfjY2EHhjGTPq994ZBFbL2oL/gU2dTMI5"}},"role":"assistant"},"finish_reason":"stop","index":0}],"created":1793938237,"id":"O1Ptar_6Cs6tytMP1PeV6Q4","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":462,"prompt_tokens":542,"total_tokens":1004}} + + ' + - ' + + ' + - 'data: [DONE] + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: '[DONE]' +timestamp: '2026-11-06T04:10:34.932037+00:00' +upstream_url: https://generativelanguage.googleapis.com/v1beta/openai/chat/completions diff --git a/tests/cassettes/upstream_ir/text_chat/openrouter-responses-non_stream-00.yaml b/tests/cassettes/upstream_ir/text_chat/openrouter-responses-non_stream-00.yaml new file mode 100644 index 0000000..e0a2f0e --- /dev/null +++ b/tests/cassettes/upstream_ir/text_chat/openrouter-responses-non_stream-00.yaml @@ -0,0 +1,122 @@ +filename: 2026-11-04-01a1a488-970a-7372-9853-00b5185d8f8e +request: + body: + input: + - content: + - text: 'Remember the exact phrase: blue lantern.' + type: input_text + - text: Reply briefly. + type: input_text + role: user + max_output_tokens: 1024 + model: nvidia/nemotron-3.5-lightning:free + provider: + allow_fallbacks: false + max_price: + completion: 0 + prompt: 0 + request: 0 + reasoning: + effort: none + store: false + stream: false + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '376' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /api/v1/responses + query_params: {} +request_id: 01a1a488-970a-7372-9853-00b5185d8f8e +response: + body: + access_programs: null + background: false + completed_at: 1793761777 + created_at: 1793761777 + error: null + frequency_penalty: 0 + id: gen-1793761777-n7Dtm311SaMJBZL9FiGB + incomplete_details: null + instructions: null + max_output_tokens: 1024 + max_tool_calls: null + metadata: {} + model: nvidia/nemotron-3.5-lightning:free + object: response + output: + - content: + - annotations: [] + logprobs: [] + text: Blue lantern. + type: output_text + id: msg_tmp_hgffyg7nbyn + role: assistant + status: completed + type: message + parallel_tool_calls: true + presence_penalty: 0 + previous_response_id: null + prompt_cache_key: null + prompt_cache_options: null + reasoning: + effort: none + safety_identifier: null + service_tier: auto + status: completed + store: false + temperature: 1 + text: + format: + type: text + tool_choice: auto + tools: [] + top_logprobs: 0 + top_p: 1 + truncation: disabled + usage: + cost: 0 + cost_details: + upstream_inference_cost: 0 + upstream_inference_input_cost: 0 + upstream_inference_output_cost: 0 + input_tokens: 28 + input_tokens_details: + cached_tokens: 0 + is_byok: false + output_tokens: 4 + output_tokens_details: + reasoning_tokens: 0 + total_tokens: 32 + body_bytes: !!binary | + eyJpZCI6Imdlbi0xNzkzNzYxNzc3LW43RHRtMzExU2FNSkJaTDlGaUdCIiwib2JqZWN0IjoicmVz + cG9uc2UiLCJjcmVhdGVkX2F0IjoxNzkzNzYxNzc3LCJtb2RlbCI6Im52aWRpYS9uZW1vdHJvbi0z + LjUtbGlnaHRuaW5nOmZyZWUiLCJzdGF0dXMiOiJjb21wbGV0ZWQiLCJjb21wbGV0ZWRfYXQiOjE3 + OTM3NjE3NzcsIm91dHB1dCI6W3siaWQiOiJtc2dfdG1wX2hnZmZ5ZzduYnluIiwidHlwZSI6Im1l + c3NhZ2UiLCJyb2xlIjoiYXNzaXN0YW50Iiwic3RhdHVzIjoiY29tcGxldGVkIiwiY29udGVudCI6 + W3sidHlwZSI6Im91dHB1dF90ZXh0IiwidGV4dCI6IkJsdWUgbGFudGVybi4iLCJhbm5vdGF0aW9u + cyI6W10sImxvZ3Byb2JzIjpbXX1dfV0sImVycm9yIjpudWxsLCJpbmNvbXBsZXRlX2RldGFpbHMi + Om51bGwsImFjY2Vzc19wcm9ncmFtcyI6bnVsbCwidG9vbHMiOltdLCJ0b29sX2Nob2ljZSI6ImF1 + dG8iLCJwYXJhbGxlbF90b29sX2NhbGxzIjp0cnVlLCJtYXhfb3V0cHV0X3Rva2VucyI6MTAyNCwi + dGVtcGVyYXR1cmUiOjEsInRvcF9wIjoxLCJwcmVzZW5jZV9wZW5hbHR5IjowLCJmcmVxdWVuY3lf + cGVuYWx0eSI6MCwidG9wX2xvZ3Byb2JzIjowLCJtYXhfdG9vbF9jYWxscyI6bnVsbCwibWV0YWRh + dGEiOnt9LCJiYWNrZ3JvdW5kIjpmYWxzZSwicHJldmlvdXNfcmVzcG9uc2VfaWQiOm51bGwsInNl + cnZpY2VfdGllciI6ImF1dG8iLCJ0cnVuY2F0aW9uIjoiZGlzYWJsZWQiLCJzdG9yZSI6ZmFsc2Us + Imluc3RydWN0aW9ucyI6bnVsbCwidGV4dCI6eyJmb3JtYXQiOnsidHlwZSI6InRleHQifX0sInJl + YXNvbmluZyI6eyJlZmZvcnQiOiJub25lIn0sInNhZmV0eV9pZGVudGlmaWVyIjpudWxsLCJwcm9t + cHRfY2FjaGVfa2V5IjpudWxsLCJwcm9tcHRfY2FjaGVfb3B0aW9ucyI6bnVsbCwidXNhZ2UiOnsi + aW5wdXRfdG9rZW5zIjoyOCwiaW5wdXRfdG9rZW5zX2RldGFpbHMiOnsiY2FjaGVkX3Rva2VucyI6 + MH0sIm91dHB1dF90b2tlbnMiOjQsIm91dHB1dF90b2tlbnNfZGV0YWlscyI6eyJyZWFzb25pbmdf + dG9rZW5zIjowfSwidG90YWxfdG9rZW5zIjozMiwiY29zdCI6MCwiaXNfYnlvayI6ZmFsc2UsImNv + c3RfZGV0YWlscyI6eyJ1cHN0cmVhbV9pbmZlcmVuY2VfY29zdCI6MCwidXBzdHJlYW1faW5mZXJl + bmNlX2lucHV0X2Nvc3QiOjAsInVwc3RyZWFtX2luZmVyZW5jZV9vdXRwdXRfY29zdCI6MH19fQ== + headers: + connection: keep-alive + content-type: application/json + status_code: 200 +timestamp: '2026-11-04T03:09:37.418820+00:00' +upstream_url: https://openrouter.ai/api/v1/responses diff --git a/tests/cassettes/upstream_ir/text_chat/openrouter-responses-non_stream-01.yaml b/tests/cassettes/upstream_ir/text_chat/openrouter-responses-non_stream-01.yaml new file mode 100644 index 0000000..c9f340f --- /dev/null +++ b/tests/cassettes/upstream_ir/text_chat/openrouter-responses-non_stream-01.yaml @@ -0,0 +1,137 @@ +filename: 2026-11-04-01a1a488-998f-78c3-b53d-ce3a18152d42 +request: + body: + input: + - content: + - text: 'Remember the exact phrase: blue lantern.' + type: input_text + - text: Reply briefly. + type: input_text + role: user + - content: + - annotations: [] + logprobs: [] + text: Blue lantern. + type: output_text + id: msg_tmp_hgffyg7nbyn + role: assistant + status: completed + type: message + - content: + - text: Repeat the phrase + type: input_text + - text: ' exactly, preserving its spaces.' + type: input_text + role: user + max_output_tokens: 1024 + model: nvidia/nemotron-3.5-lightning:free + provider: + allow_fallbacks: false + max_price: + completion: 0 + prompt: 0 + request: 0 + reasoning: + effort: none + store: false + stream: false + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '692' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /api/v1/responses + query_params: {} +request_id: 01a1a488-998f-78c3-b53d-ce3a18152d42 +response: + body: + access_programs: null + background: false + completed_at: 1793761778 + created_at: 1793761778 + error: null + frequency_penalty: 0 + id: gen-1793761778-uyHAwoDvSLdfs2Ymk5pj + incomplete_details: null + instructions: null + max_output_tokens: 1024 + max_tool_calls: null + metadata: {} + model: nvidia/nemotron-3.5-lightning:free + object: response + output: + - content: + - annotations: [] + logprobs: [] + text: blue lantern + type: output_text + id: msg_tmp_rb0pum20tf + role: assistant + status: completed + type: message + parallel_tool_calls: true + presence_penalty: 0 + previous_response_id: null + prompt_cache_key: null + prompt_cache_options: null + reasoning: + effort: none + safety_identifier: null + service_tier: auto + status: completed + store: false + temperature: 1 + text: + format: + type: text + tool_choice: auto + tools: [] + top_logprobs: 0 + top_p: 1 + truncation: disabled + usage: + cost: 0 + cost_details: + upstream_inference_cost: 0 + upstream_inference_input_cost: 0 + upstream_inference_output_cost: 0 + input_tokens: 54 + input_tokens_details: + cached_tokens: 0 + is_byok: false + output_tokens: 4 + output_tokens_details: + reasoning_tokens: 0 + total_tokens: 58 + body_bytes: !!binary | + eyJpZCI6Imdlbi0xNzkzNzYxNzc4LXV5SEF3b0R2U0xkZnMyWW1rNXBqIiwib2JqZWN0IjoicmVz + cG9uc2UiLCJjcmVhdGVkX2F0IjoxNzkzNzYxNzc4LCJtb2RlbCI6Im52aWRpYS9uZW1vdHJvbi0z + LjUtbGlnaHRuaW5nOmZyZWUiLCJzdGF0dXMiOiJjb21wbGV0ZWQiLCJjb21wbGV0ZWRfYXQiOjE3 + OTM3NjE3NzgsIm91dHB1dCI6W3siaWQiOiJtc2dfdG1wX3JiMHB1bTIwdGYiLCJ0eXBlIjoibWVz + c2FnZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJzdGF0dXMiOiJjb21wbGV0ZWQiLCJjb250ZW50Ijpb + eyJ0eXBlIjoib3V0cHV0X3RleHQiLCJ0ZXh0IjoiYmx1ZSAgbGFudGVybiIsImFubm90YXRpb25z + IjpbXSwibG9ncHJvYnMiOltdfV19XSwiZXJyb3IiOm51bGwsImluY29tcGxldGVfZGV0YWlscyI6 + bnVsbCwiYWNjZXNzX3Byb2dyYW1zIjpudWxsLCJ0b29scyI6W10sInRvb2xfY2hvaWNlIjoiYXV0 + byIsInBhcmFsbGVsX3Rvb2xfY2FsbHMiOnRydWUsIm1heF9vdXRwdXRfdG9rZW5zIjoxMDI0LCJ0 + ZW1wZXJhdHVyZSI6MSwidG9wX3AiOjEsInByZXNlbmNlX3BlbmFsdHkiOjAsImZyZXF1ZW5jeV9w + ZW5hbHR5IjowLCJ0b3BfbG9ncHJvYnMiOjAsIm1heF90b29sX2NhbGxzIjpudWxsLCJtZXRhZGF0 + YSI6e30sImJhY2tncm91bmQiOmZhbHNlLCJwcmV2aW91c19yZXNwb25zZV9pZCI6bnVsbCwic2Vy + dmljZV90aWVyIjoiYXV0byIsInRydW5jYXRpb24iOiJkaXNhYmxlZCIsInN0b3JlIjpmYWxzZSwi + aW5zdHJ1Y3Rpb25zIjpudWxsLCJ0ZXh0Ijp7ImZvcm1hdCI6eyJ0eXBlIjoidGV4dCJ9fSwicmVh + c29uaW5nIjp7ImVmZm9ydCI6Im5vbmUifSwic2FmZXR5X2lkZW50aWZpZXIiOm51bGwsInByb21w + dF9jYWNoZV9rZXkiOm51bGwsInByb21wdF9jYWNoZV9vcHRpb25zIjpudWxsLCJ1c2FnZSI6eyJp + bnB1dF90b2tlbnMiOjU0LCJpbnB1dF90b2tlbnNfZGV0YWlscyI6eyJjYWNoZWRfdG9rZW5zIjow + fSwib3V0cHV0X3Rva2VucyI6NCwib3V0cHV0X3Rva2Vuc19kZXRhaWxzIjp7InJlYXNvbmluZ190 + b2tlbnMiOjB9LCJ0b3RhbF90b2tlbnMiOjU4LCJjb3N0IjowLCJpc19ieW9rIjpmYWxzZSwiY29z + dF9kZXRhaWxzIjp7InVwc3RyZWFtX2luZmVyZW5jZV9jb3N0IjowLCJ1cHN0cmVhbV9pbmZlcmVu + Y2VfaW5wdXRfY29zdCI6MCwidXBzdHJlYW1faW5mZXJlbmNlX291dHB1dF9jb3N0IjowfX19 + headers: + connection: keep-alive + content-type: application/json + status_code: 200 +timestamp: '2026-11-04T03:09:38.063778+00:00' +upstream_url: https://openrouter.ai/api/v1/responses diff --git a/tests/cassettes/upstream_ir/text_chat/openrouter-responses-stream-00.yaml b/tests/cassettes/upstream_ir/text_chat/openrouter-responses-stream-00.yaml new file mode 100644 index 0000000..a8f5d72 --- /dev/null +++ b/tests/cassettes/upstream_ir/text_chat/openrouter-responses-stream-00.yaml @@ -0,0 +1,117 @@ +filename: 2026-11-04-01a1a489-9291-7ca3-9323-e38dd7bc0647 +request: + body: + input: + - content: + - text: 'Remember the exact phrase: blue lantern.' + type: input_text + - text: Reply briefly. + type: input_text + role: user + max_output_tokens: 1024 + model: nvidia/nemotron-3.5-lightning:free + provider: + allow_fallbacks: false + max_price: + completion: 0 + prompt: 0 + request: 0 + reasoning: + effort: none + store: false + stream: true + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '375' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /api/v1/responses + query_params: {} +request_id: 01a1a489-9291-7ca3-9323-e38dd7bc0647 +response: + error_event: false + headers: + cache-control: no-cache + connection: keep-alive + content-type: text/event-stream + sse: + - 'data: {"type":"response.created","response":{"id":"gen-1793761841-VpKMVsEG87mVkDeD21SR","object":"response","created_at":1793761841,"model":"nvidia/nemotron-3.5-lightning:free","status":"in_progress","completed_at":null,"output":[],"error":null,"incomplete_details":null,"access_programs":null,"tools":[],"tool_choice":"auto","parallel_tool_calls":true,"max_output_tokens":1024,"temperature":1,"top_p":1,"presence_penalty":0,"frequency_penalty":0,"top_logprobs":0,"max_tool_calls":null,"metadata":{},"background":false,"previous_response_id":null,"service_tier":"auto","truncation":"disabled","store":false,"instructions":null,"text":{"format":{"type":"text"}},"reasoning":{"effort":"none"},"safety_identifier":null,"prompt_cache_key":null,"prompt_cache_options":null,"usage":null},"sequence_number":0} + + ' + - ' + + ' + - 'data: {"type":"response.in_progress","response":{"id":"gen-1793761841-VpKMVsEG87mVkDeD21SR","object":"response","created_at":1793761841,"model":"nvidia/nemotron-3.5-lightning:free","status":"in_progress","completed_at":null,"output":[],"error":null,"incomplete_details":null,"access_programs":null,"tools":[],"tool_choice":"auto","parallel_tool_calls":true,"max_output_tokens":1024,"temperature":1,"top_p":1,"presence_penalty":0,"frequency_penalty":0,"top_logprobs":0,"max_tool_calls":null,"metadata":{},"background":false,"previous_response_id":null,"service_tier":"auto","truncation":"disabled","store":false,"instructions":null,"text":{"format":{"type":"text"}},"reasoning":{"effort":"none"},"safety_identifier":null,"prompt_cache_key":null,"prompt_cache_options":null,"usage":null},"sequence_number":1} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.added","output_index":0,"item":{"id":"msg_tmp_9je8kf4lbol","type":"message","status":"in_progress","role":"assistant","content":[]},"sequence_number":2} + + ' + - ' + + ' + - 'data: {"type":"response.content_part.added","output_index":0,"item_id":"msg_tmp_9je8kf4lbol","content_index":0,"part":{"type":"output_text","text":"","annotations":[],"logprobs":[]},"sequence_number":3} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","output_index":0,"item_id":"msg_tmp_9je8kf4lbol","content_index":0,"delta":"blue","logprobs":[],"sequence_number":4} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","output_index":0,"item_id":"msg_tmp_9je8kf4lbol","content_index":0,"delta":" + lantern","logprobs":[],"sequence_number":5} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.done","output_index":0,"item_id":"msg_tmp_9je8kf4lbol","content_index":0,"text":"blue + lantern","logprobs":[],"sequence_number":6} + + ' + - ' + + ' + - 'data: {"type":"response.content_part.done","output_index":0,"item_id":"msg_tmp_9je8kf4lbol","content_index":0,"part":{"type":"output_text","text":"blue + lantern","annotations":[],"logprobs":[]},"sequence_number":7} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.done","output_index":0,"item":{"id":"msg_tmp_9je8kf4lbol","type":"message","status":"completed","role":"assistant","content":[{"type":"output_text","text":"blue + lantern","annotations":[],"logprobs":[]}]},"sequence_number":8} + + ' + - ' + + ' + - 'data: {"type":"response.completed","response":{"id":"gen-1793761841-VpKMVsEG87mVkDeD21SR","object":"response","created_at":1793761841,"model":"nvidia/nemotron-3.5-lightning:free","status":"completed","completed_at":1793761842,"output":[{"id":"msg_tmp_9je8kf4lbol","type":"message","role":"assistant","status":"completed","content":[{"type":"output_text","text":"blue + lantern","annotations":[],"logprobs":[]}]}],"error":null,"incomplete_details":null,"access_programs":null,"tools":[],"tool_choice":"auto","parallel_tool_calls":true,"max_output_tokens":1024,"temperature":1,"top_p":1,"presence_penalty":0,"frequency_penalty":0,"top_logprobs":0,"max_tool_calls":null,"metadata":{},"background":false,"previous_response_id":null,"service_tier":"auto","truncation":"disabled","store":false,"instructions":null,"text":{"format":{"type":"text"}},"reasoning":{"effort":"none"},"safety_identifier":null,"prompt_cache_key":null,"prompt_cache_options":null,"usage":{"input_tokens":28,"input_tokens_details":{"cached_tokens":0},"output_tokens":3,"output_tokens_details":{"reasoning_tokens":0},"total_tokens":31,"cost":0,"is_byok":false,"cost_details":{"upstream_inference_cost":0,"upstream_inference_input_cost":0,"upstream_inference_output_cost":0}}},"sequence_number":9} + + ' + - ' + + ' + - 'data: [DONE] + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: '[DONE]' +timestamp: '2026-11-04T03:10:41.809748+00:00' +upstream_url: https://openrouter.ai/api/v1/responses diff --git a/tests/cassettes/upstream_ir/text_chat/openrouter-responses-stream-01.yaml b/tests/cassettes/upstream_ir/text_chat/openrouter-responses-stream-01.yaml new file mode 100644 index 0000000..c6280af --- /dev/null +++ b/tests/cassettes/upstream_ir/text_chat/openrouter-responses-stream-01.yaml @@ -0,0 +1,132 @@ +filename: 2026-11-04-01a1a489-985f-7d50-953f-708adb71b035 +request: + body: + input: + - content: + - text: 'Remember the exact phrase: blue lantern.' + type: input_text + - text: Reply briefly. + type: input_text + role: user + - content: + - annotations: [] + logprobs: [] + text: blue lantern + type: output_text + id: msg_tmp_9je8kf4lbol + role: assistant + status: completed + type: message + - content: + - text: Repeat the phrase + type: input_text + - text: ' exactly, preserving its spaces.' + type: input_text + role: user + max_output_tokens: 1024 + model: nvidia/nemotron-3.5-lightning:free + provider: + allow_fallbacks: false + max_price: + completion: 0 + prompt: 0 + request: 0 + reasoning: + effort: none + store: false + stream: true + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '690' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /api/v1/responses + query_params: {} +request_id: 01a1a489-985f-7d50-953f-708adb71b035 +response: + error_event: false + headers: + cache-control: no-cache + connection: keep-alive + content-type: text/event-stream + sse: + - 'data: {"type":"response.created","response":{"id":"gen-1793761843-nn9lX6sVIH8WGNHkcT6U","object":"response","created_at":1793761843,"model":"nvidia/nemotron-3.5-lightning:free","status":"in_progress","completed_at":null,"output":[],"error":null,"incomplete_details":null,"access_programs":null,"tools":[],"tool_choice":"auto","parallel_tool_calls":true,"max_output_tokens":1024,"temperature":1,"top_p":1,"presence_penalty":0,"frequency_penalty":0,"top_logprobs":0,"max_tool_calls":null,"metadata":{},"background":false,"previous_response_id":null,"service_tier":"auto","truncation":"disabled","store":false,"instructions":null,"text":{"format":{"type":"text"}},"reasoning":{"effort":"none"},"safety_identifier":null,"prompt_cache_key":null,"prompt_cache_options":null,"usage":null},"sequence_number":0} + + ' + - ' + + ' + - 'data: {"type":"response.in_progress","response":{"id":"gen-1793761843-nn9lX6sVIH8WGNHkcT6U","object":"response","created_at":1793761843,"model":"nvidia/nemotron-3.5-lightning:free","status":"in_progress","completed_at":null,"output":[],"error":null,"incomplete_details":null,"access_programs":null,"tools":[],"tool_choice":"auto","parallel_tool_calls":true,"max_output_tokens":1024,"temperature":1,"top_p":1,"presence_penalty":0,"frequency_penalty":0,"top_logprobs":0,"max_tool_calls":null,"metadata":{},"background":false,"previous_response_id":null,"service_tier":"auto","truncation":"disabled","store":false,"instructions":null,"text":{"format":{"type":"text"}},"reasoning":{"effort":"none"},"safety_identifier":null,"prompt_cache_key":null,"prompt_cache_options":null,"usage":null},"sequence_number":1} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.added","output_index":0,"item":{"id":"msg_tmp_9tlzcmt0drn","type":"message","status":"in_progress","role":"assistant","content":[]},"sequence_number":2} + + ' + - ' + + ' + - 'data: {"type":"response.content_part.added","output_index":0,"item_id":"msg_tmp_9tlzcmt0drn","content_index":0,"part":{"type":"output_text","text":"","annotations":[],"logprobs":[]},"sequence_number":3} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","output_index":0,"item_id":"msg_tmp_9tlzcmt0drn","content_index":0,"delta":"blue","logprobs":[],"sequence_number":4} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","output_index":0,"item_id":"msg_tmp_9tlzcmt0drn","content_index":0,"delta":" + lantern","logprobs":[],"sequence_number":5} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.done","output_index":0,"item_id":"msg_tmp_9tlzcmt0drn","content_index":0,"text":"blue + lantern","logprobs":[],"sequence_number":6} + + ' + - ' + + ' + - 'data: {"type":"response.content_part.done","output_index":0,"item_id":"msg_tmp_9tlzcmt0drn","content_index":0,"part":{"type":"output_text","text":"blue + lantern","annotations":[],"logprobs":[]},"sequence_number":7} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.done","output_index":0,"item":{"id":"msg_tmp_9tlzcmt0drn","type":"message","status":"completed","role":"assistant","content":[{"type":"output_text","text":"blue + lantern","annotations":[],"logprobs":[]}]},"sequence_number":8} + + ' + - ' + + ' + - 'data: {"type":"response.completed","response":{"id":"gen-1793761843-nn9lX6sVIH8WGNHkcT6U","object":"response","created_at":1793761843,"model":"nvidia/nemotron-3.5-lightning:free","status":"completed","completed_at":1793761843,"output":[{"id":"msg_tmp_9tlzcmt0drn","type":"message","role":"assistant","status":"completed","content":[{"type":"output_text","text":"blue + lantern","annotations":[],"logprobs":[]}]}],"error":null,"incomplete_details":null,"access_programs":null,"tools":[],"tool_choice":"auto","parallel_tool_calls":true,"max_output_tokens":1024,"temperature":1,"top_p":1,"presence_penalty":0,"frequency_penalty":0,"top_logprobs":0,"max_tool_calls":null,"metadata":{},"background":false,"previous_response_id":null,"service_tier":"auto","truncation":"disabled","store":false,"instructions":null,"text":{"format":{"type":"text"}},"reasoning":{"effort":"none"},"safety_identifier":null,"prompt_cache_key":null,"prompt_cache_options":null,"usage":{"input_tokens":53,"input_tokens_details":{"cached_tokens":0},"output_tokens":3,"output_tokens_details":{"reasoning_tokens":0},"total_tokens":56,"cost":0,"is_byok":false,"cost_details":{"upstream_inference_cost":0,"upstream_inference_input_cost":0,"upstream_inference_output_cost":0}}},"sequence_number":9} + + ' + - ' + + ' + - 'data: [DONE] + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: '[DONE]' +timestamp: '2026-11-04T03:10:43.295304+00:00' +upstream_url: https://openrouter.ai/api/v1/responses diff --git a/tests/cassettes/upstream_ir/text_chat/togetherai-chat_completions-non_stream-00.yaml b/tests/cassettes/upstream_ir/text_chat/togetherai-chat_completions-non_stream-00.yaml new file mode 100644 index 0000000..cc29644 --- /dev/null +++ b/tests/cassettes/upstream_ir/text_chat/togetherai-chat_completions-non_stream-00.yaml @@ -0,0 +1,155 @@ +filename: 2026-11-05-01a1ac2e-eed8-71e3-ac1d-6c85448d51d2 +request: + body: + max_completion_tokens: 1024 + messages: + - content: + - text: Suggest a name for a robot gardener. + type: text + role: user + model: Qwen/Qwen3.5-9B + reasoning: + enabled: false + stream: false + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '204' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /v1/chat/completions + query_params: {} +request_id: 01a1ac2e-eed8-71e3-ac1d-6c85448d51d2 +response: + body: + choices: + - finish_reason: stop + index: 0 + matched_stop: 248046 + message: + content: 'Here are a few name suggestions for a robot gardener, categorized + by the "vibe" they project: + + + ### Nature-Inspired & Whimsical + + *These names blend gardening terminology with soft, organic sounds.* + + * **Chloris** (Greek goddess of flowers) + + * **Verdant** + + * **Bloom** + + * **Petra** (Latin for rock/stones, but sounds like "spore") + + * **Seedling** + + * **Fern & Rust** + + * **Petunia Bot** + + + ### Tech-Savvy & Functional + + *These sound like practical tools designed for efficiency and precision.* + + * **AgriBot 3000** + + * **ProGroom** + + * **GreenLogic** + + * **SoilSync** + + * **Hortus AI** + + * **RootSeeker** + + * **CropGuard** + + + ### Friendly & Personable + + *Names that make the machine seem like a helpful neighbor or a pet.* + + * **Genny** + + * **Bud** + + * **Pluck** + + * **Otto the Oaktress** + + * **Sprouty** + + * **Thumb** (as in "my little oatmeal thumb") + + * **Willow** + + + ### My Top Recommendation + + **"Simeris"** + + It sounds elegant and futuristic (like a code name), but it closely mimics + the sound of "simmering" soil or the gentle sound of rain falling on leaves. + It implies a machine that understands the delicate balance of a garden. + + + **Which style fits your robot best?** Do you want it to feel more like a + high-tech engineering marvel or a charming garden companion?' + reasoning_content: null + role: assistant + created: 1793890119 + id: 39aa6c1c-aws_as1 + model: Qwen/Qwen3.5-9B + object: chat.completion + system_fingerprint: default + usage: + completion_tokens: 373 + prompt_tokens: 22 + prompt_tokens_details: + cached_tokens: 0 + total_tokens: 395 + body_bytes: !!binary | + eyJpZCI6IjM5YWE2YzFjLWF3c19hczEiLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24iLCJjcmVh + dGVkIjoxNzkzODkwMTE5LCJtb2RlbCI6IlF3ZW4vUXdlbjMuNS05QiIsImNob2ljZXMiOlt7Imlu + ZGV4IjowLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjoiSGVyZSBhcmUg + YSBmZXcgbmFtZSBzdWdnZXN0aW9ucyBmb3IgYSByb2JvdCBnYXJkZW5lciwgY2F0ZWdvcml6ZWQg + YnkgdGhlIFwidmliZVwiIHRoZXkgcHJvamVjdDpcblxuIyMjIE5hdHVyZS1JbnNwaXJlZCAmIFdo + aW1zaWNhbFxuKlRoZXNlIG5hbWVzIGJsZW5kIGdhcmRlbmluZyB0ZXJtaW5vbG9neSB3aXRoIHNv + ZnQsIG9yZ2FuaWMgc291bmRzLipcbiogICAqKkNobG9yaXMqKiAoR3JlZWsgZ29kZGVzcyBvZiBm + bG93ZXJzKVxuKiAgICoqVmVyZGFudCoqXG4qICAgKipCbG9vbSoqXG4qICAgKipQZXRyYSoqIChM + YXRpbiBmb3Igcm9jay9zdG9uZXMsIGJ1dCBzb3VuZHMgbGlrZSBcInNwb3JlXCIpXG4qICAgKipT + ZWVkbGluZyoqXG4qICAgKipGZXJuICYgUnVzdCoqXG4qICAgKipQZXR1bmlhIEJvdCoqXG5cbiMj + IyBUZWNoLVNhdnZ5ICYgRnVuY3Rpb25hbFxuKlRoZXNlIHNvdW5kIGxpa2UgcHJhY3RpY2FsIHRv + b2xzIGRlc2lnbmVkIGZvciBlZmZpY2llbmN5IGFuZCBwcmVjaXNpb24uKlxuKiAgICoqQWdyaUJv + dCAzMDAwKipcbiogICAqKlByb0dyb29tKipcbiogICAqKkdyZWVuTG9naWMqKlxuKiAgICoqU29p + bFN5bmMqKlxuKiAgICoqSG9ydHVzIEFJKipcbiogICAqKlJvb3RTZWVrZXIqKlxuKiAgICoqQ3Jv + cEd1YXJkKipcblxuIyMjIEZyaWVuZGx5ICYgUGVyc29uYWJsZVxuKk5hbWVzIHRoYXQgbWFrZSB0 + aGUgbWFjaGluZSBzZWVtIGxpa2UgYSBoZWxwZnVsIG5laWdoYm9yIG9yIGEgcGV0LipcbiogICAq + Kkdlbm55KipcbiogICAqKkJ1ZCoqXG4qICAgKipQbHVjayoqXG4qICAgKipPdHRvIHRoZSBPYWt0 + cmVzcyoqXG4qICAgKipTcHJvdXR5KipcbiogICAqKlRodW1iKiogKGFzIGluIFwibXkgbGl0dGxl + IG9hdG1lYWwgdGh1bWJcIilcbiogICAqKldpbGxvdyoqXG5cbiMjIyBNeSBUb3AgUmVjb21tZW5k + YXRpb25cbioqXCJTaW1lcmlzXCIqKlxuSXQgc291bmRzIGVsZWdhbnQgYW5kIGZ1dHVyaXN0aWMg + KGxpa2UgYSBjb2RlIG5hbWUpLCBidXQgaXQgY2xvc2VseSBtaW1pY3MgdGhlIHNvdW5kIG9mIFwi + c2ltbWVyaW5nXCIgc29pbCBvciB0aGUgZ2VudGxlIHNvdW5kIG9mIHJhaW4gZmFsbGluZyBvbiBs + ZWF2ZXMuIEl0IGltcGxpZXMgYSBtYWNoaW5lIHRoYXQgdW5kZXJzdGFuZHMgdGhlIGRlbGljYXRl + IGJhbGFuY2Ugb2YgYSBnYXJkZW4uXG5cbioqV2hpY2ggc3R5bGUgZml0cyB5b3VyIHJvYm90IGJl + c3Q/KiogRG8geW91IHdhbnQgaXQgdG8gZmVlbCBtb3JlIGxpa2UgYSBoaWdoLXRlY2ggZW5naW5l + ZXJpbmcgbWFydmVsIG9yIGEgY2hhcm1pbmcgZ2FyZGVuIGNvbXBhbmlvbj8iLCJyZWFzb25pbmdf + Y29udGVudCI6bnVsbH0sImZpbmlzaF9yZWFzb24iOiJzdG9wIiwibWF0Y2hlZF9zdG9wIjoyNDgw + NDZ9XSwidXNhZ2UiOnsicHJvbXB0X3Rva2VucyI6MjIsImNvbXBsZXRpb25fdG9rZW5zIjozNzMs + InRvdGFsX3Rva2VucyI6Mzk1LCJwcm9tcHRfdG9rZW5zX2RldGFpbHMiOnsiY2FjaGVkX3Rva2Vu + cyI6MH19LCJzeXN0ZW1fZmluZ2VycHJpbnQiOiJkZWZhdWx0In0= + headers: + connection: keep-alive + content-type: application/json + x-request-id: 39aa6c1c-aws_as1 + status_code: 200 +timestamp: '2026-11-05T14:48:39.384697+00:00' +upstream_url: https://api.together.ai/v1/chat/completions diff --git a/tests/cassettes/upstream_ir/text_chat/togetherai-chat_completions-non_stream-01.yaml b/tests/cassettes/upstream_ir/text_chat/togetherai-chat_completions-non_stream-01.yaml new file mode 100644 index 0000000..4b1f8fe --- /dev/null +++ b/tests/cassettes/upstream_ir/text_chat/togetherai-chat_completions-non_stream-01.yaml @@ -0,0 +1,244 @@ +filename: 2026-11-05-01a1ac2e-fac1-76c0-a973-a8f3b3fc66c0 +request: + body: + max_completion_tokens: 1024 + messages: + - content: + - text: Suggest a name for a robot gardener. + type: text + role: user + - content: 'Here are a few name suggestions for a robot gardener, categorized + by the "vibe" they project: + + + ### Nature-Inspired & Whimsical + + *These names blend gardening terminology with soft, organic sounds.* + + * **Chloris** (Greek goddess of flowers) + + * **Verdant** + + * **Bloom** + + * **Petra** (Latin for rock/stones, but sounds like "spore") + + * **Seedling** + + * **Fern & Rust** + + * **Petunia Bot** + + + ### Tech-Savvy & Functional + + *These sound like practical tools designed for efficiency and precision.* + + * **AgriBot 3000** + + * **ProGroom** + + * **GreenLogic** + + * **SoilSync** + + * **Hortus AI** + + * **RootSeeker** + + * **CropGuard** + + + ### Friendly & Personable + + *Names that make the machine seem like a helpful neighbor or a pet.* + + * **Genny** + + * **Bud** + + * **Pluck** + + * **Otto the Oaktress** + + * **Sprouty** + + * **Thumb** (as in "my little oatmeal thumb") + + * **Willow** + + + ### My Top Recommendation + + **"Simeris"** + + It sounds elegant and futuristic (like a code name), but it closely mimics + the sound of "simmering" soil or the gentle sound of rain falling on leaves. + It implies a machine that understands the delicate balance of a garden. + + + **Which style fits your robot best?** Do you want it to feel more like a high-tech + engineering marvel or a charming garden companion?' + reasoning_content: null + role: assistant + - content: + - text: Explain why that name fits. + type: text + role: user + model: Qwen/Qwen3.5-9B + reasoning: + enabled: false + stream: false + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '1651' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /v1/chat/completions + query_params: {} +request_id: 01a1ac2e-fac1-76c0-a973-a8f3b3fc66c0 +response: + body: + choices: + - finish_reason: stop + index: 0 + matched_stop: 248046 + message: + content: 'Here is a breakdown of why **"Simeris"** is a compelling choice + for a robot gardener, analyzing its linguistic roots, phonetic vibe, and + symbolic meaning: + + + ### 1. Etymology: A Blend of Nature and Action + + The name is constructed to sound like two distinct concepts merged together: + + * **"Simmer":** This verb implies a gentle, sustained heat. In cooking, + it''s low and steady; in gardening, it mirrors the ideal soil temperature + where seeds germinate and roots expand slowly without burning out. It suggests + a patient, low-energy constant, which is perfect for a machine that tends + to living things rather than ripping them apart. + + * **"Miris" (from *Perfume* or *Aroma*):** This suffix evokes the word + "outrigger" or "mirro" but leans heavily toward "mirth" (joy) or "flavor/aroma." + It connects to the smell of the garden—the scent of blooming flowers or + damp earth after a rain. + + + ### 2. The Phonetic Vibe + + * **Soft Consonants:** The name starts with an ''S'' (shh) and flows into + a soft ''m'' and ''r''. Unlike names like "Basher" or "Cutter" which sound + aggressive, "Simeris" sounds whisper-soft. It creates a mental image of + a quiet hum or the rustling of a gentle breeze, rather than the clanking + of heavy machinery. + + * **Double ''i'' Vocalic Echo:** The "i" sounds in the middle give the + name a lift, making it feel energetic yet delicate, much like a sprouting + seed pushing through soil. + + + ### 3. Symbolic Dual Nature + + A robot gardener walks a fine line between **artificial intelligence** and + **organic life**. + + * **The Tech Side:** The "S" and the rhythmic, almost syllabic structure + give it a slightly futuristic, coded feel. It sounds like a sophisticated + algorithm designed to optimize growth. + + * **The Organic Side:** The reference to "simmering" and "aroma" grounds + it firmly in the natural world. It hasn''t just been named; it feels like + it *belongs* there. + + + ### 4. Narrative Potential + + Using this name allows for cute character quirks: + + * *"Don''t worry, Simeris won''t overwork the soil; he knows exactly when + to simmer the nutrients."* + + * *"The garden smells wonderful today; I think Simeris hit the sweet spot + on the humidity sensors."* + + + **In short:** **Simeris** fits because it transforms the concept of a machine + from something cold and industrial into something warm, patient, and essential + to the life cycle of a plant. It sounds less like a tool and more like a + partner.' + reasoning_content: null + role: assistant + created: 1793890122 + id: bea9a980-aws_as1 + model: Qwen/Qwen3.5-9B + object: chat.completion + system_fingerprint: default + usage: + completion_tokens: 586 + prompt_tokens: 411 + prompt_tokens_details: + cached_tokens: 0 + total_tokens: 997 + body_bytes: !!binary | + eyJpZCI6ImJlYTlhOTgwLWF3c19hczEiLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24iLCJjcmVh + dGVkIjoxNzkzODkwMTIyLCJtb2RlbCI6IlF3ZW4vUXdlbjMuNS05QiIsImNob2ljZXMiOlt7Imlu + ZGV4IjowLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjoiSGVyZSBpcyBh + IGJyZWFrZG93biBvZiB3aHkgKipcIlNpbWVyaXNcIioqIGlzIGEgY29tcGVsbGluZyBjaG9pY2Ug + Zm9yIGEgcm9ib3QgZ2FyZGVuZXIsIGFuYWx5emluZyBpdHMgbGluZ3Vpc3RpYyByb290cywgcGhv + bmV0aWMgdmliZSwgYW5kIHN5bWJvbGljIG1lYW5pbmc6XG5cbiMjIyAxLiBFdHltb2xvZ3k6IEEg + QmxlbmQgb2YgTmF0dXJlIGFuZCBBY3Rpb25cblRoZSBuYW1lIGlzIGNvbnN0cnVjdGVkIHRvIHNv + dW5kIGxpa2UgdHdvIGRpc3RpbmN0IGNvbmNlcHRzIG1lcmdlZCB0b2dldGhlcjpcbiogICAqKlwi + U2ltbWVyXCI6KiogVGhpcyB2ZXJiIGltcGxpZXMgYSBnZW50bGUsIHN1c3RhaW5lZCBoZWF0LiBJ + biBjb29raW5nLCBpdCdzIGxvdyBhbmQgc3RlYWR5OyBpbiBnYXJkZW5pbmcsIGl0IG1pcnJvcnMg + dGhlIGlkZWFsIHNvaWwgdGVtcGVyYXR1cmUgd2hlcmUgc2VlZHMgZ2VybWluYXRlIGFuZCByb290 + cyBleHBhbmQgc2xvd2x5IHdpdGhvdXQgYnVybmluZyBvdXQuIEl0IHN1Z2dlc3RzIGEgcGF0aWVu + dCwgbG93LWVuZXJneSBjb25zdGFudCwgd2hpY2ggaXMgcGVyZmVjdCBmb3IgYSBtYWNoaW5lIHRo + YXQgdGVuZHMgdG8gbGl2aW5nIHRoaW5ncyByYXRoZXIgdGhhbiByaXBwaW5nIHRoZW0gYXBhcnQu + XG4qICAgKipcIk1pcmlzXCIgKGZyb20gKlBlcmZ1bWUqIG9yICpBcm9tYSopOioqIFRoaXMgc3Vm + Zml4IGV2b2tlcyB0aGUgd29yZCBcIm91dHJpZ2dlclwiIG9yIFwibWlycm9cIiBidXQgbGVhbnMg + aGVhdmlseSB0b3dhcmQgXCJtaXJ0aFwiIChqb3kpIG9yIFwiZmxhdm9yL2Fyb21hLlwiIEl0IGNv + bm5lY3RzIHRvIHRoZSBzbWVsbCBvZiB0aGUgZ2FyZGVu4oCUdGhlIHNjZW50IG9mIGJsb29taW5n + IGZsb3dlcnMgb3IgZGFtcCBlYXJ0aCBhZnRlciBhIHJhaW4uXG5cbiMjIyAyLiBUaGUgUGhvbmV0 + aWMgVmliZVxuKiAgICoqU29mdCBDb25zb25hbnRzOioqIFRoZSBuYW1lIHN0YXJ0cyB3aXRoIGFu + ICdTJyAoc2hoKSBhbmQgZmxvd3MgaW50byBhIHNvZnQgJ20nIGFuZCAncicuIFVubGlrZSBuYW1l + cyBsaWtlIFwiQmFzaGVyXCIgb3IgXCJDdXR0ZXJcIiB3aGljaCBzb3VuZCBhZ2dyZXNzaXZlLCBc + IlNpbWVyaXNcIiBzb3VuZHMgd2hpc3Blci1zb2Z0LiBJdCBjcmVhdGVzIGEgbWVudGFsIGltYWdl + IG9mIGEgcXVpZXQgaHVtIG9yIHRoZSBydXN0bGluZyBvZiBhIGdlbnRsZSBicmVlemUsIHJhdGhl + ciB0aGFuIHRoZSBjbGFua2luZyBvZiBoZWF2eSBtYWNoaW5lcnkuXG4qICAgKipEb3VibGUgJ2kn + IFZvY2FsaWMgRWNobzoqKiBUaGUgXCJpXCIgc291bmRzIGluIHRoZSBtaWRkbGUgZ2l2ZSB0aGUg + bmFtZSBhIGxpZnQsIG1ha2luZyBpdCBmZWVsIGVuZXJnZXRpYyB5ZXQgZGVsaWNhdGUsIG11Y2gg + bGlrZSBhIHNwcm91dGluZyBzZWVkIHB1c2hpbmcgdGhyb3VnaCBzb2lsLlxuXG4jIyMgMy4gU3lt + Ym9saWMgRHVhbCBOYXR1cmVcbkEgcm9ib3QgZ2FyZGVuZXIgd2Fsa3MgYSBmaW5lIGxpbmUgYmV0 + d2VlbiAqKmFydGlmaWNpYWwgaW50ZWxsaWdlbmNlKiogYW5kICoqb3JnYW5pYyBsaWZlKiouXG4q + ICAgKipUaGUgVGVjaCBTaWRlOioqIFRoZSBcIlNcIiBhbmQgdGhlIHJoeXRobWljLCBhbG1vc3Qg + c3lsbGFiaWMgc3RydWN0dXJlIGdpdmUgaXQgYSBzbGlnaHRseSBmdXR1cmlzdGljLCBjb2RlZCBm + ZWVsLiBJdCBzb3VuZHMgbGlrZSBhIHNvcGhpc3RpY2F0ZWQgYWxnb3JpdGhtIGRlc2lnbmVkIHRv + IG9wdGltaXplIGdyb3d0aC5cbiogICAqKlRoZSBPcmdhbmljIFNpZGU6KiogVGhlIHJlZmVyZW5j + ZSB0byBcInNpbW1lcmluZ1wiIGFuZCBcImFyb21hXCIgZ3JvdW5kcyBpdCBmaXJtbHkgaW4gdGhl + IG5hdHVyYWwgd29ybGQuIEl0IGhhc24ndCBqdXN0IGJlZW4gbmFtZWQ7IGl0IGZlZWxzIGxpa2Ug + aXQgKmJlbG9uZ3MqIHRoZXJlLlxuXG4jIyMgNC4gTmFycmF0aXZlIFBvdGVudGlhbFxuVXNpbmcg + dGhpcyBuYW1lIGFsbG93cyBmb3IgY3V0ZSBjaGFyYWN0ZXIgcXVpcmtzOlxuKiAgICpcIkRvbid0 + IHdvcnJ5LCBTaW1lcmlzIHdvbid0IG92ZXJ3b3JrIHRoZSBzb2lsOyBoZSBrbm93cyBleGFjdGx5 + IHdoZW4gdG8gc2ltbWVyIHRoZSBudXRyaWVudHMuXCIqXG4qICAgKlwiVGhlIGdhcmRlbiBzbWVs + bHMgd29uZGVyZnVsIHRvZGF5OyBJIHRoaW5rIFNpbWVyaXMgaGl0IHRoZSBzd2VldCBzcG90IG9u + IHRoZSBodW1pZGl0eSBzZW5zb3JzLlwiKlxuXG4qKkluIHNob3J0OioqICoqU2ltZXJpcyoqIGZp + dHMgYmVjYXVzZSBpdCB0cmFuc2Zvcm1zIHRoZSBjb25jZXB0IG9mIGEgbWFjaGluZSBmcm9tIHNv + bWV0aGluZyBjb2xkIGFuZCBpbmR1c3RyaWFsIGludG8gc29tZXRoaW5nIHdhcm0sIHBhdGllbnQs + IGFuZCBlc3NlbnRpYWwgdG8gdGhlIGxpZmUgY3ljbGUgb2YgYSBwbGFudC4gSXQgc291bmRzIGxl + c3MgbGlrZSBhIHRvb2wgYW5kIG1vcmUgbGlrZSBhIHBhcnRuZXIuIiwicmVhc29uaW5nX2NvbnRl + bnQiOm51bGx9LCJmaW5pc2hfcmVhc29uIjoic3RvcCIsIm1hdGNoZWRfc3RvcCI6MjQ4MDQ2fV0s + InVzYWdlIjp7InByb21wdF90b2tlbnMiOjQxMSwiY29tcGxldGlvbl90b2tlbnMiOjU4NiwidG90 + YWxfdG9rZW5zIjo5OTcsInByb21wdF90b2tlbnNfZGV0YWlscyI6eyJjYWNoZWRfdG9rZW5zIjow + fX0sInN5c3RlbV9maW5nZXJwcmludCI6ImRlZmF1bHQifQ== + headers: + connection: keep-alive + content-type: application/json + x-request-id: bea9a980-aws_as1 + status_code: 200 +timestamp: '2026-11-05T14:48:42.433990+00:00' +upstream_url: https://api.together.ai/v1/chat/completions diff --git a/tests/cassettes/upstream_ir/text_chat/togetherai-chat_completions-stream-00.yaml b/tests/cassettes/upstream_ir/text_chat/togetherai-chat_completions-stream-00.yaml new file mode 100644 index 0000000..e9ff678 --- /dev/null +++ b/tests/cassettes/upstream_ir/text_chat/togetherai-chat_completions-stream-00.yaml @@ -0,0 +1,3641 @@ +filename: 2026-11-05-01a1ac2e-cf55-7f11-85c0-021526b47895 +request: + body: + max_completion_tokens: 1024 + messages: + - content: + - text: Suggest a name for a robot gardener. + type: text + role: user + model: Qwen/Qwen3.5-9B + reasoning: + enabled: false + stream: true + stream_options: + include_usage: true + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '243' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /v1/chat/completions + query_params: {} +request_id: 01a1ac2e-cf55-7f11-85c0-021526b47895 +response: + error_event: false + headers: + cache-control: no-cache + connection: keep-alive + content-type: text/event-stream + x-request-id: 429f400e-aws_as1 + sse: + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Here","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + are","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + several","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + name","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + suggestions","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + for","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + a","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + robot","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + gard","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ener","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":",","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + categorized","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + by","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + the","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + \"","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"v","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ibe","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\"","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + they","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + project","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":":","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"###","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + Cle","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ver","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + &","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + P","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"uns","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"These","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + names","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + play","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + on","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + gardening","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + terms","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + combined","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + with","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + technology","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":".","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"T","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"erra","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Bot","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + (","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"A","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + classic","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + mix","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + of","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + \"","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"T","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"erra","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"/m","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"atter","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\"","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + and","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + Robot","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":")","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"We","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ed","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Out","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + (","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Simple","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":",","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + direct","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":",","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + and","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + slightly","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + aggressive","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + for","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + a","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + pruning","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + bot","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":")","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Al","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"go","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"B","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"loom","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + (","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"S","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"uggest","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"s","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + algorithms","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + helping","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + flowers","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + grow","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":")","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Pr","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"un","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"imus","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + (","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Sounds","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + like","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + \"","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Pr","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"un","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"us","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":",\"","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + the","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + genus","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + for","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + cher","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ries","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"/","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"pe","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"aches","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":",","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + but","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + implies","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + it","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"''s","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + the","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + *","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"first","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + pr","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"uner","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":")","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Ch","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"lor","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"oph","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"yll","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"-","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"1","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + (","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"A","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + scientific","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + nod","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + to","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + the","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + green","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + life","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + it","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + nurt","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ures","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":")","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"RC","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + Spr","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"out","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + (","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Remote","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + Control","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + Spr","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"out","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":")","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"###","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + Nature","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"-In","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"sp","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ired","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + &","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + Wh","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ims","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ical","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Names","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + that","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + sound","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + friendly","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":",","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + organic","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":",","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + and","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + gentle","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":",","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + perfect","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + for","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + a","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + house","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"plant","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + caret","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"aker","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":".","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Ver","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"dia","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + (","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Short","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + for","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + vegetation","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":",","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + sounds","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + elegant","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":")","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"S","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"olan","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"um","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + (","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"A","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + genus","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + of","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + night","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"sh","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ades","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":",","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + sounds","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + sophisticated","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":")","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Leaf","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"gard","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + (","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"A","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + gentle","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + blend","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + of","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + \"","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Leaf","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\"","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + and","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + \"","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Guard","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ian","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\")","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"B","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"am","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"boo","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + (","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Automatic","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":")","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Fern","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + &","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + Steel","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"S","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ylv","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"an","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + (","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Associated","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + with","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + forests","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":",","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + sounds","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + magical","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":")","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"###","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + Functional","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + &","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + Industrial","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"If","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + this","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + is","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + a","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + large","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + agricultural","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + robot","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + or","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + a","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + serious","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + tool","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":",","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + these","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + names","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + sound","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + robust","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + and","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + efficient","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":".","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Ap","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ex","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + Cult","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"iv","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ator","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Root","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Sync","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Har","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"vest","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + Logic","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Nit","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ro","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"G","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"rowth","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"A","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"egis","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + Earth","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + (","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"A","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"egis","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + means","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + protection","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":")","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"C","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ult","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ivo","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"###","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + Character","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"-","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Ready","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + Names","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"If","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + the","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + robot","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + has","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + a","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + personality","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + or","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + is","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + part","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + of","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + a","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + story","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"/game","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":".","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Gr","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"izzly","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + (","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"For","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + a","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + tough","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":",","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + pl","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ow","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"-like","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + robot","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":")","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"B","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"loss","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"om","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + (","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"For","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + a","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + small","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":",","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + delicate","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + robot","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + that","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + pol","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ishes","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + leaves","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":")","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"P","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ulse","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + (","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Because","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + plants","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + need","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + water","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + and","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + rhythm","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":")","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Echo","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + (","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Listening","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + to","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + the","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + soil","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":")","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Chip","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + (","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"As","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + in","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + \"","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"chip","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + away","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + at","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + the","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + weeds","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\")","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Which","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + style","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + fits","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + best","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"?**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + Is","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + it","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + a","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"cute","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + assistant","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + for","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + an","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + apartment","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + balcony","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"?","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + Go","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + with","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + *","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Ver","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"dia","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + or","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + *","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"B","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"loss","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"om","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*.","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + Is","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + it","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + a","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"farm","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + work","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"horse","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"**?","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + Go","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + with","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + *","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Ap","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ex","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + Cult","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"iv","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ator","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + or","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + *","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"T","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"erra","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Bot","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*.","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + Do","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + you","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + want","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + something","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"hum","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"orous","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"**?","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + Go","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + with","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + *","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"We","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ed","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Out","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + or","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + *","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Root","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Sync","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*.","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"reasoning_content":null},"logprobs":null,"finish_reason":"stop","matched_stop":248046}]} + + ' + - ' + + ' + - 'data: {"id":"429f400e-aws_as1","object":"chat.completion.chunk","created":1793890111,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[],"usage":{"prompt_tokens":22,"completion_tokens":557,"total_tokens":579,"prompt_tokens_details":{"cached_tokens":0}}} + + ' + - ' + + ' + - 'data: [DONE] + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: '[DONE]' +timestamp: '2026-11-05T14:48:31.317431+00:00' +upstream_url: https://api.together.ai/v1/chat/completions diff --git a/tests/cassettes/upstream_ir/text_chat/togetherai-chat_completions-stream-01.yaml b/tests/cassettes/upstream_ir/text_chat/togetherai-chat_completions-stream-01.yaml new file mode 100644 index 0000000..31c1bf1 --- /dev/null +++ b/tests/cassettes/upstream_ir/text_chat/togetherai-chat_completions-stream-01.yaml @@ -0,0 +1,3970 @@ +filename: 2026-11-05-01a1ac2e-df2b-71d2-a073-a4cb6314a1e6 +request: + body: + max_completion_tokens: 1024 + messages: + - content: + - text: Suggest a name for a robot gardener. + type: text + role: user + - annotations: null + audio: null + content: 'Here are several name suggestions for a robot gardener, categorized + by the "vibe" they project: + + + ### Clever & Puns + + These names play on gardening terms combined with technology. + + * **TerraBot** (A classic mix of "Terra/matter" and Robot) + + * **WeedOut** (Simple, direct, and slightly aggressive for a pruning bot) + + * **AlgoBloom** (Suggests algorithms helping flowers grow) + + * **Prunimus** (Sounds like "Prunus," the genus for cherries/peaches, but + implies it''s the *first* pruner) + + * **Chlorophyll-1** (A scientific nod to the green life it nurtures) + + * **RC Sprout** (Remote Control Sprout) + + + ### Nature-Inspired & Whimsical + + Names that sound friendly, organic, and gentle, perfect for a houseplant caretaker. + + * **Verdia** (Short for vegetation, sounds elegant) + + * **Solanum** (A genus of nightshades, sounds sophisticated) + + * **Leafgard** (A gentle blend of "Leaf" and "Guardian") + + * **Bamboo** (Automatic) + + * **Fern & Steel** + + * **Sylvan** (Associated with forests, sounds magical) + + + ### Functional & Industrial + + If this is a large agricultural robot or a serious tool, these names sound + robust and efficient. + + * **Apex Cultivator** + + * **RootSync** + + * **Harvest Logic** + + * **NitroGrowth** + + * **Aegis Earth** (Aegis means protection) + + * **Cultivo** + + + ### Character-Ready Names + + If the robot has a personality or is part of a story/game. + + * **Grizzly** (For a tough, plow-like robot) + + * **Blossom** (For a small, delicate robot that polishes leaves) + + * **Pulse** (Because plants need water and rhythm) + + * **Echo** (Listening to the soil) + + * **Chip** (As in "chip away at the weeds") + + + **Which style fits best?** + + * Is it a **cute assistant** for an apartment balcony? Go with *Verdia* + or *Blossom*. + + * Is it a **farm workhorse**? Go with *Apex Cultivator* or *TerraBot*. + + * Do you want something **humorous**? Go with *WeedOut* or *RootSync*.' + function_call: null + reasoning_content: null + refusal: null + role: assistant + tool_calls: null + - content: + - text: Explain why that name fits. + type: text + role: user + model: Qwen/Qwen3.5-9B + reasoning: + enabled: false + stream: true + stream_options: + include_usage: true + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '2383' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /v1/chat/completions + query_params: {} +request_id: 01a1ac2e-df2b-71d2-a073-a4cb6314a1e6 +response: + error_event: false + headers: + cache-control: no-cache + connection: keep-alive + content-type: text/event-stream + x-request-id: 4563d175-aws_as1 + sse: + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Since","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + I","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + provided","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + a","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + wide","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + variety","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + of","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + options","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + in","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + the","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + previous","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + step","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":",","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + the","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + \"","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"best","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\"","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + explanation","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + depends","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + on","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + which","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + specific","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + name","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + reson","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ated","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + with","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + you","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":".","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Here","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + are","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + deep","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + dives","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + into","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"three","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + distinct","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + favorites","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + to","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + show","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + *","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"why","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + that","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + name","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + works","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":",","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + ranging","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + from","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + pun","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ny","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + to","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + profound","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":":","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"###","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"1","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":".","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + The","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + P","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"unny","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + Choice","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":":","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"We","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ed","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Out","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Why","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + it","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + fits","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":":**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + This","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + name","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + relies","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + on","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + double","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + entendre","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":",","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + which","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + makes","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + robots","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + memorable","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":".","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + *","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Literal","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + Meaning","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":":**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + It","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + describes","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + the","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + primary","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + function","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + of","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + a","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + gard","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ener","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"—","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"rem","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"oving","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + unwanted","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + weeds","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":".","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + *","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Code","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + Reference","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":":**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + In","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + programming","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":",","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + to","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + \"","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"weed","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + out","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\"","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + means","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + to","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + remove","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + bad","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + data","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + or","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + errors","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + from","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + a","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + system","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":",","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + leaving","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + only","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + the","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + clean","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":",","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + efficient","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + code","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":".","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + *","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"The","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + V","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ibe","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":":**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + It","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + suggests","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + a","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + robot","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + that","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + is","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + not","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + just","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + helpful","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":",","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + but","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + *","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"essential","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + for","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + maintaining","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + order","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":".","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + It","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + sounds","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + slightly","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + aggressive","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + (","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"good","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + for","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + a","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + pruning","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + bot","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":")","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + and","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + unmistak","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ably","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + clear","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + about","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + its","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + job","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":".","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"###","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"2","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":".","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + The","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + Elegant","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + Choice","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":":","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Ver","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"dia","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Why","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + it","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + fits","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":":**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + This","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + name","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + bridges","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + the","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + gap","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + between","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + high","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"-end","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + technology","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + and","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + organic","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + life","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":".","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + *","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Et","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ymology","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":":**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + It","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + derives","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + from","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + the","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + Latin","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + *","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ver","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + (","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"green","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"/s","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"pring","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":")","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + and","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + suggests","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + \"","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"veget","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ation","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\"","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + or","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + \"","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"verd","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ant","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":".\"","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + *","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Ph","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"on","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"etics","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":":**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + The","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + \"-","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ia","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\"","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + ending","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + gives","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + it","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + a","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + soft","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":",","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + human","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"-like","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + quality","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + (","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"similar","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + to","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + names","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + like","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + Am","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"alia","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + or","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + Cam","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"illa","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":").","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + It","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + doesn","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"''t","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + sound","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + like","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + a","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + cold","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + machine","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":";","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + it","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + sounds","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + like","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + a","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + partner","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":".","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + *","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"The","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + V","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ibe","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":":**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + Perfect","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + for","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + a","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + sophisticated","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + indoor","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + plant","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + assistant","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + that","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + hosts","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + house","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"plants","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":",","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + monitors","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + humidity","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":",","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + and","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + releases","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + a","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + calming","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + mist","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":".","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + It","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + implies","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + that","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + the","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + robot","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + understands","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + the","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + *","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"spirit","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + of","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + green","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ery","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":",","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + not","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + just","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + the","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + mechanics","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + of","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + watering","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":".","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"###","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"3","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":".","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + The","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + Sci","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"-Fi","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + Choice","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":":","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Ch","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"lor","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"oph","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"yll","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"-","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"1","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Why","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + it","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + fits","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":":**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + This","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + name","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + leans","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + into","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + the","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + biological","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + miracle","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + of","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + what","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + the","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + robot","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + is","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + protecting","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":".","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + *","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"Scient","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ific","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + Precision","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":":**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + Chlor","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"oph","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"yll","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + is","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + the","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + specific","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + pigment","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + that","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + allows","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + plants","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + to","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + perform","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + photos","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ynthesis","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + and","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + turn","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + light","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + into","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + food","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":".","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + Naming","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + the","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + robot","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + after","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + the","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + *","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"source","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + of","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + life","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + elev","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ates","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + its","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + purpose","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + from","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + \"","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"maintenance","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\"","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + to","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + \"","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"s","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ust","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"enance","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":".\"","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + *","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"The","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + \"","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"1","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\":","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + The","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + suffix","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + implies","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + it","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + is","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + the","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + first","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + of","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + its","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + kind","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":",","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + the","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + prototype","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":",","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + or","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + the","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + leader","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + of","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + a","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + fleet","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":".","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + *","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" ","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + **","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"The","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + V","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ibe","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":":**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + This","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + feels","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + like","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + a","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + character","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + from","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + a","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + high","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"-con","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"cept","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + science","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + fiction","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + story","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":".","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + It","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + suggests","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + the","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + robot","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + is","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + so","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + advanced","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + it","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + can","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + optimize","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + photos","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ynthesis","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + rates","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + or","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + detect","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + nutrient","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + deficiencies","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + before","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + a","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + human","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + ever","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + notices","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + a","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + yellow","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + leaf","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":".","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"***","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"\n\n","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"If","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + you","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + had","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + a","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + specific","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + name","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + in","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + mind","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + from","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + the","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + original","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + list","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + that","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + *","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"doesn","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"''t","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"*","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + have","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + an","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + explanation","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + here","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":",","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + or","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + if","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + you","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + want","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + to","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + refine","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + one","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + of","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + these","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + further","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":",","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + just","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + let","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + me","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + know","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"!**","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"reasoning_content":null},"logprobs":null,"finish_reason":"stop","matched_stop":248046}]} + + ' + - ' + + ' + - 'data: {"id":"4563d175-aws_as1","object":"chat.completion.chunk","created":1793890115,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[],"usage":{"prompt_tokens":595,"completion_tokens":575,"total_tokens":1170,"prompt_tokens_details":{"cached_tokens":0}}} + + ' + - ' + + ' + - 'data: [DONE] + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: '[DONE]' +timestamp: '2026-11-05T14:48:35.371921+00:00' +upstream_url: https://api.together.ai/v1/chat/completions diff --git a/tests/cassettes/upstream_ir/text_chat/togetherai-responses-non_stream-00.yaml b/tests/cassettes/upstream_ir/text_chat/togetherai-responses-non_stream-00.yaml new file mode 100644 index 0000000..944ea89 --- /dev/null +++ b/tests/cassettes/upstream_ir/text_chat/togetherai-responses-non_stream-00.yaml @@ -0,0 +1,161 @@ +filename: 2026-11-05-01a1a9c9-a113-77e1-b1e0-826cbff9b63a +request: + body: + input: + - content: + - text: Suggest a name for a robot gardener. + type: input_text + role: user + max_output_tokens: 1024 + model: zai-org/GLM-5.2 + reasoning: + effort: minimal + store: false + stream: false + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '220' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /v1/responses + query_params: {} +request_id: 01a1a9c9-a113-77e1-b1e0-826cbff9b63a +response: + body: + background: false + completed_at: 1793849928 + created_at: 1793849926 + error: null + frequency_penalty: 0.0 + id: resp_01a1a9c9-a27b-7162-8c19-affa897ead99 + incomplete_details: null + instructions: null + max_output_tokens: 1024 + max_tool_calls: null + metadata: {} + model: zai-org/GLM-5.2 + object: response + output: + - content: + - annotations: [] + text: "Here are several name suggestions for a robot gardener, broken down\ + \ by the \"vibe\" you might be going for:\n\n**Botanical & Mechanical (Punny\ + \ & Clever)**\n* **Mechanibloom**\n* **Robo-Rooter**\n* **Sproutnik**\n\ + * **Bot-anical**\n* **Turflink**\n* **Metalleaf**\n* **Thornbot**\n\ + * **Circuit-Sprout**\n\n**Cute & Friendly (Great for a home garden)**\n\ + * **BloomBot**\n* **Sprig**\n* **Pip**\n* **Dewey**\n* **Flora**\n\ + * **Sunny**\n* **Bud-E** (Buddy)\n* **Petal**\n\n**Nature & Mythology\ + \ Inspired (Elegant or poetic)**\n* **Sylvia** (Derived from *Silva*,\ + \ Latin for forest)\n* **Demeter** (Greek goddess of the harvest)\n* \ + \ **Flora** (Roman goddess of flowers)\n* **Ceres** (Roman goddess of\ + \ agriculture)\n* **Verdant**\n* **Gaia**\n\n**Sci-Fi & Futuristic (Sleek\ + \ and professional)**\n* **CultiBot**\n* **Green-Drive**\n* **TerraDroid**\n\ + * **Aero-G**\n* **VegiTech**\n* **Sentinel-Sprout**\n* **Bio-Mech**\n\ + \n**Specific Task Names (If it does one thing really well)**\n* **Clipper**\ + \ (For a pruning/hedge-trimming robot)\n* **Digger** (For planting/bulbing)\n\ + * **Sprinkles** (For a watering robot)\n* **Weeder**\n* **Harvestor**\n\ + \n**My Top 3 Recommendations:**\n1. **Sproutnik** – It’s memorable, fun\ + \ to say, and perfectly blends the idea of a new plant sprout with Sputnik\ + \ (the famous robot/satellite). \n2. **BloomBot** – Classic, alliterative,\ + \ and immediately tells you exactly what the robot does.\n3. **Sylvia**\ + \ – A great name if you want something that sounds like a helpful companion\ + \ rather than a machine. \n\nWhat kind of vibe are you going for with your\ + \ robot?" + type: output_text + id: msg_8d272d0e-aws_as1-01a1a9c9-a27b-7162-8c19-b00a4cc7a324 + role: assistant + status: completed + type: message + parallel_tool_calls: true + presence_penalty: 0.0 + previous_response_id: null + prompt_cache_key: null + prompt_cache_retention: null + reasoning: + effort: minimal + summary: null + safety_identifier: null + service_tier: default + status: completed + store: false + temperature: 1.0 + text: + format: + type: text + verbosity: medium + tool_choice: auto + tools: [] + top_logprobs: 0 + top_p: 1.0 + truncation: disabled + usage: + input_tokens: 16 + input_tokens_details: + cache_write_tokens: 0 + cached_tokens: 0 + output_tokens: 498 + output_tokens_details: + reasoning_tokens: 0 + total_tokens: 514 + user: null + body_bytes: !!binary | + eyJpZCI6InJlc3BfMDFhMWE5YzktYTI3Yi03MTYyLThjMTktYWZmYTg5N2VhZDk5Iiwib2JqZWN0 + IjoicmVzcG9uc2UiLCJjcmVhdGVkX2F0IjoxNzkzODQ5OTI2LCJjb21wbGV0ZWRfYXQiOjE3OTM4 + NDk5MjgsImJhY2tncm91bmQiOmZhbHNlLCJzdGF0dXMiOiJjb21wbGV0ZWQiLCJlcnJvciI6bnVs + bCwiaW5jb21wbGV0ZV9kZXRhaWxzIjpudWxsLCJpbnN0cnVjdGlvbnMiOm51bGwsIm1heF9vdXRw + dXRfdG9rZW5zIjoxMDI0LCJtYXhfdG9vbF9jYWxscyI6bnVsbCwibW9kZWwiOiJ6YWktb3JnL0dM + TS01LjIiLCJvdXRwdXQiOlt7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiJtc2dfOGQyNzJkMGUtYXdz + X2FzMS0wMWExYTljOS1hMjdiLTcxNjItOGMxOS1iMDBhNGNjN2EzMjQiLCJyb2xlIjoiYXNzaXN0 + YW50IiwiY29udGVudCI6W3sidHlwZSI6Im91dHB1dF90ZXh0IiwidGV4dCI6IkhlcmUgYXJlIHNl + dmVyYWwgbmFtZSBzdWdnZXN0aW9ucyBmb3IgYSByb2JvdCBnYXJkZW5lciwgYnJva2VuIGRvd24g + YnkgdGhlIFwidmliZVwiIHlvdSBtaWdodCBiZSBnb2luZyBmb3I6XG5cbioqQm90YW5pY2FsICYg + TWVjaGFuaWNhbCAoUHVubnkgJiBDbGV2ZXIpKipcbiogICAqKk1lY2hhbmlibG9vbSoqXG4qICAg + KipSb2JvLVJvb3RlcioqXG4qICAgKipTcHJvdXRuaWsqKlxuKiAgICoqQm90LWFuaWNhbCoqXG4q + ICAgKipUdXJmbGluayoqXG4qICAgKipNZXRhbGxlYWYqKlxuKiAgICoqVGhvcm5ib3QqKlxuKiAg + ICoqQ2lyY3VpdC1TcHJvdXQqKlxuXG4qKkN1dGUgJiBGcmllbmRseSAoR3JlYXQgZm9yIGEgaG9t + ZSBnYXJkZW4pKipcbiogICAqKkJsb29tQm90KipcbiogICAqKlNwcmlnKipcbiogICAqKlBpcCoq + XG4qICAgKipEZXdleSoqXG4qICAgKipGbG9yYSoqXG4qICAgKipTdW5ueSoqXG4qICAgKipCdWQt + RSoqIChCdWRkeSlcbiogICAqKlBldGFsKipcblxuKipOYXR1cmUgJiBNeXRob2xvZ3kgSW5zcGly + ZWQgKEVsZWdhbnQgb3IgcG9ldGljKSoqXG4qICAgKipTeWx2aWEqKiAoRGVyaXZlZCBmcm9tICpT + aWx2YSosIExhdGluIGZvciBmb3Jlc3QpXG4qICAgKipEZW1ldGVyKiogKEdyZWVrIGdvZGRlc3Mg + b2YgdGhlIGhhcnZlc3QpXG4qICAgKipGbG9yYSoqIChSb21hbiBnb2RkZXNzIG9mIGZsb3dlcnMp + XG4qICAgKipDZXJlcyoqIChSb21hbiBnb2RkZXNzIG9mIGFncmljdWx0dXJlKVxuKiAgICoqVmVy + ZGFudCoqXG4qICAgKipHYWlhKipcblxuKipTY2ktRmkgJiBGdXR1cmlzdGljIChTbGVlayBhbmQg + cHJvZmVzc2lvbmFsKSoqXG4qICAgKipDdWx0aUJvdCoqXG4qICAgKipHcmVlbi1Ecml2ZSoqXG4q + ICAgKipUZXJyYURyb2lkKipcbiogICAqKkFlcm8tRyoqXG4qICAgKipWZWdpVGVjaCoqXG4qICAg + KipTZW50aW5lbC1TcHJvdXQqKlxuKiAgICoqQmlvLU1lY2gqKlxuXG4qKlNwZWNpZmljIFRhc2sg + TmFtZXMgKElmIGl0IGRvZXMgb25lIHRoaW5nIHJlYWxseSB3ZWxsKSoqXG4qICAgKipDbGlwcGVy + KiogKEZvciBhIHBydW5pbmcvaGVkZ2UtdHJpbW1pbmcgcm9ib3QpXG4qICAgKipEaWdnZXIqKiAo + Rm9yIHBsYW50aW5nL2J1bGJpbmcpXG4qICAgKipTcHJpbmtsZXMqKiAoRm9yIGEgd2F0ZXJpbmcg + cm9ib3QpXG4qICAgKipXZWVkZXIqKlxuKiAgICoqSGFydmVzdG9yKipcblxuKipNeSBUb3AgMyBS + ZWNvbW1lbmRhdGlvbnM6KipcbjEuICAqKlNwcm91dG5payoqIOKAkyBJdOKAmXMgbWVtb3JhYmxl + LCBmdW4gdG8gc2F5LCBhbmQgcGVyZmVjdGx5IGJsZW5kcyB0aGUgaWRlYSBvZiBhIG5ldyBwbGFu + dCBzcHJvdXQgd2l0aCBTcHV0bmlrICh0aGUgZmFtb3VzIHJvYm90L3NhdGVsbGl0ZSkuIFxuMi4g + ICoqQmxvb21Cb3QqKiDigJMgQ2xhc3NpYywgYWxsaXRlcmF0aXZlLCBhbmQgaW1tZWRpYXRlbHkg + dGVsbHMgeW91IGV4YWN0bHkgd2hhdCB0aGUgcm9ib3QgZG9lcy5cbjMuICAqKlN5bHZpYSoqIOKA + kyBBIGdyZWF0IG5hbWUgaWYgeW91IHdhbnQgc29tZXRoaW5nIHRoYXQgc291bmRzIGxpa2UgYSBo + ZWxwZnVsIGNvbXBhbmlvbiByYXRoZXIgdGhhbiBhIG1hY2hpbmUuIFxuXG5XaGF0IGtpbmQgb2Yg + dmliZSBhcmUgeW91IGdvaW5nIGZvciB3aXRoIHlvdXIgcm9ib3Q/IiwiYW5ub3RhdGlvbnMiOltd + fV0sInN0YXR1cyI6ImNvbXBsZXRlZCJ9XSwicGFyYWxsZWxfdG9vbF9jYWxscyI6dHJ1ZSwicHJl + dmlvdXNfcmVzcG9uc2VfaWQiOm51bGwsInByb21wdF9jYWNoZV9rZXkiOm51bGwsInByb21wdF9j + YWNoZV9yZXRlbnRpb24iOm51bGwsInJlYXNvbmluZyI6eyJlZmZvcnQiOiJtaW5pbWFsIiwic3Vt + bWFyeSI6bnVsbH0sInNlcnZpY2VfdGllciI6ImRlZmF1bHQiLCJzdG9yZSI6ZmFsc2UsInRlbXBl + cmF0dXJlIjoxLjAsInRleHQiOnsiZm9ybWF0Ijp7InR5cGUiOiJ0ZXh0In0sInZlcmJvc2l0eSI6 + Im1lZGl1bSJ9LCJ0b29sX2Nob2ljZSI6ImF1dG8iLCJ0b29scyI6W10sInRvcF9sb2dwcm9icyI6 + MCwidG9wX3AiOjEuMCwidHJ1bmNhdGlvbiI6ImRpc2FibGVkIiwidXNhZ2UiOnsiaW5wdXRfdG9r + ZW5zIjoxNiwib3V0cHV0X3Rva2VucyI6NDk4LCJ0b3RhbF90b2tlbnMiOjUxNCwiaW5wdXRfdG9r + ZW5zX2RldGFpbHMiOnsiY2FjaGVkX3Rva2VucyI6MCwiY2FjaGVfd3JpdGVfdG9rZW5zIjowfSwi + b3V0cHV0X3Rva2Vuc19kZXRhaWxzIjp7InJlYXNvbmluZ190b2tlbnMiOjB9fSwidXNlciI6bnVs + bCwic2FmZXR5X2lkZW50aWZpZXIiOm51bGwsImZyZXF1ZW5jeV9wZW5hbHR5IjowLjAsInByZXNl + bmNlX3BlbmFsdHkiOjAuMCwibWV0YWRhdGEiOnt9fQ== + headers: + connection: keep-alive + content-type: application/json + x-request-id: 8d272d0e-aws_as1 + status_code: 200 +timestamp: '2026-11-05T03:38:45.907749+00:00' +upstream_url: https://api.together.ai/v1/responses diff --git a/tests/cassettes/upstream_ir/text_chat/togetherai-responses-non_stream-01.yaml b/tests/cassettes/upstream_ir/text_chat/togetherai-responses-non_stream-01.yaml new file mode 100644 index 0000000..47fc61b --- /dev/null +++ b/tests/cassettes/upstream_ir/text_chat/togetherai-responses-non_stream-01.yaml @@ -0,0 +1,229 @@ +filename: 2026-11-05-01a1a9c9-d98a-75a0-9bf1-35306c219561 +request: + body: + input: + - content: + - text: Suggest a name for a robot gardener. + type: input_text + role: user + - content: + - annotations: [] + text: "Here are several name suggestions for a robot gardener, broken down\ + \ by the \"vibe\" you might be going for:\n\n**Botanical & Mechanical (Punny\ + \ & Clever)**\n* **Mechanibloom**\n* **Robo-Rooter**\n* **Sproutnik**\n\ + * **Bot-anical**\n* **Turflink**\n* **Metalleaf**\n* **Thornbot**\n\ + * **Circuit-Sprout**\n\n**Cute & Friendly (Great for a home garden)**\n\ + * **BloomBot**\n* **Sprig**\n* **Pip**\n* **Dewey**\n* **Flora**\n\ + * **Sunny**\n* **Bud-E** (Buddy)\n* **Petal**\n\n**Nature & Mythology\ + \ Inspired (Elegant or poetic)**\n* **Sylvia** (Derived from *Silva*,\ + \ Latin for forest)\n* **Demeter** (Greek goddess of the harvest)\n* \ + \ **Flora** (Roman goddess of flowers)\n* **Ceres** (Roman goddess of\ + \ agriculture)\n* **Verdant**\n* **Gaia**\n\n**Sci-Fi & Futuristic (Sleek\ + \ and professional)**\n* **CultiBot**\n* **Green-Drive**\n* **TerraDroid**\n\ + * **Aero-G**\n* **VegiTech**\n* **Sentinel-Sprout**\n* **Bio-Mech**\n\ + \n**Specific Task Names (If it does one thing really well)**\n* **Clipper**\ + \ (For a pruning/hedge-trimming robot)\n* **Digger** (For planting/bulbing)\n\ + * **Sprinkles** (For a watering robot)\n* **Weeder**\n* **Harvestor**\n\ + \n**My Top 3 Recommendations:**\n1. **Sproutnik** – It’s memorable, fun\ + \ to say, and perfectly blends the idea of a new plant sprout with Sputnik\ + \ (the famous robot/satellite). \n2. **BloomBot** – Classic, alliterative,\ + \ and immediately tells you exactly what the robot does.\n3. **Sylvia**\ + \ – A great name if you want something that sounds like a helpful companion\ + \ rather than a machine. \n\nWhat kind of vibe are you going for with your\ + \ robot?" + type: output_text + id: msg_8d272d0e-aws_as1-01a1a9c9-a27b-7162-8c19-b00a4cc7a324 + role: assistant + status: completed + type: message + - content: + - text: Explain why that name fits. + type: input_text + role: user + max_output_tokens: 1024 + model: zai-org/GLM-5.2 + reasoning: + effort: minimal + store: false + stream: false + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '2139' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /v1/responses + query_params: {} +request_id: 01a1a9c9-d98a-75a0-9bf1-35306c219561 +response: + body: + background: false + completed_at: 1793849951 + created_at: 1793849946 + error: null + frequency_penalty: 0.0 + id: resp_01a1a9c9-f30f-7e40-8cdb-3e1e534c693b + incomplete_details: null + instructions: null + max_output_tokens: 1024 + max_tool_calls: null + metadata: {} + model: zai-org/GLM-5.2 + object: response + output: + - content: + - annotations: [] + text: "To explain why these names fit, we have to look at what a robot gardener\ + \ actually does: it blends technology, nature, care, and physical labor.\ + \ The best names bridge the gap between cold mechanics and warm, organic\ + \ life. \n\nHere is why certain names from the list work perfectly based\ + \ on the \"vibe\" they are going for:\n\n**1. Sproutnik (The Fun & Memorable\ + \ Pick)**\n* **Why it fits:** This name is a portmanteau of \"sprout\"\ + \ (the beginning of a plant's life) and \"Sputnik\" (the famous Soviet satellite\ + \ that kicked off the space age). It perfectly captures the essence of a\ + \ robot gardener: it's a piece of advanced technology whose entire purpose\ + \ is to foster new, organic life. It sounds friendly, slightly retro-futuristic,\ + \ and highly approachable.\n\n**2. BloomBot (The Classic Alliteration)**\n\ + * **Why it fits:** This uses alliteration (the repeating \"B\" sound),\ + \ which makes it catchy and easy for humans to say. \"Bloom\" implies health,\ + \ vitality, and the successful result of gardening, while \"Bot\" leaves\ + \ no ambiguity about what the object is. It fits perfectly in a home setting\ + \ where the robot is seen as a helpful household companion.\n\n**3. Sylvia\ + \ (The Elegant / Companion Pick)**\n* **Why it fits:** This name is rooted\ + \ in the Latin word *silva*, meaning \"forest\" or \"woods.\" By giving\ + \ the robot a traditional human name with a hidden botanical meaning, it\ + \ changes the user's relationship with the machine. Instead of treating\ + \ it like an appliance (like a lawnmower or a vacuum), the user will likely\ + \ treat it more like a dedicated assistant or a friend. It softens the mechanical\ + \ nature of the robot. \n\n**4. CultiBot (The Professional / Sci-Fi Pick)**\n\ + * **Why it fits:** This is a blending of \"cultivate\" (to prepare and\ + \ use land for crops, or to promote the growth of) and \"robot.\" It sounds\ + \ like a piece of professional agricultural equipment or a high-end consumer\ + \ product. It fits perfectly if the robot is designed for heavy-duty work—like\ + \ tilling soil, planting seeds, or managing a large greenhouse. \n\n**5.\ + \ Sprig (The Minimalist / Cute Pick)**\n* **Why it fits:** A \"sprig\"\ + \ is a small stem or twig with leaves. It’s a very delicate, organic word.\ + \ Naming a big, metal robot \"Sprig\" creates a fun juxtaposition—it’s a\ + \ massive piece of hardware with a cute, earthy name. It fits perfectly\ + \ for a small, roving robot that tends to indoor plants or a small balcony\ + \ garden. \n\nUltimately, the name you choose should reflect the robot's\ + \ primary function. If it's a heavy-duty outdoor machine, a name like **CultiBot**\ + \ or **TerraDroid** grounds it in utility. If it's a small, friendly robot\ + \ that keeps your houseplants alive, **Sprig** or **BloomBot** makes it\ + \ feel like part of the family." + type: output_text + id: msg_4c6b7efc-aws_as1-01a1a9c9-f310-7831-821a-2d2893466adb + role: assistant + status: completed + type: message + parallel_tool_calls: true + presence_penalty: 0.0 + previous_response_id: null + prompt_cache_key: null + prompt_cache_retention: null + reasoning: + effort: minimal + summary: null + safety_identifier: null + service_tier: default + status: completed + store: false + temperature: 1.0 + text: + format: + type: text + verbosity: medium + tool_choice: auto + tools: [] + top_logprobs: 0 + top_p: 1.0 + truncation: disabled + usage: + input_tokens: 525 + input_tokens_details: + cache_write_tokens: 0 + cached_tokens: 0 + output_tokens: 640 + output_tokens_details: + reasoning_tokens: 0 + total_tokens: 1165 + user: null + body_bytes: !!binary | + eyJpZCI6InJlc3BfMDFhMWE5YzktZjMwZi03ZTQwLThjZGItM2UxZTUzNGM2OTNiIiwib2JqZWN0 + IjoicmVzcG9uc2UiLCJjcmVhdGVkX2F0IjoxNzkzODQ5OTQ2LCJjb21wbGV0ZWRfYXQiOjE3OTM4 + NDk5NTEsImJhY2tncm91bmQiOmZhbHNlLCJzdGF0dXMiOiJjb21wbGV0ZWQiLCJlcnJvciI6bnVs + bCwiaW5jb21wbGV0ZV9kZXRhaWxzIjpudWxsLCJpbnN0cnVjdGlvbnMiOm51bGwsIm1heF9vdXRw + dXRfdG9rZW5zIjoxMDI0LCJtYXhfdG9vbF9jYWxscyI6bnVsbCwibW9kZWwiOiJ6YWktb3JnL0dM + TS01LjIiLCJvdXRwdXQiOlt7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiJtc2dfNGM2YjdlZmMtYXdz + X2FzMS0wMWExYTljOS1mMzEwLTc4MzEtODIxYS0yZDI4OTM0NjZhZGIiLCJyb2xlIjoiYXNzaXN0 + YW50IiwiY29udGVudCI6W3sidHlwZSI6Im91dHB1dF90ZXh0IiwidGV4dCI6IlRvIGV4cGxhaW4g + d2h5IHRoZXNlIG5hbWVzIGZpdCwgd2UgaGF2ZSB0byBsb29rIGF0IHdoYXQgYSByb2JvdCBnYXJk + ZW5lciBhY3R1YWxseSBkb2VzOiBpdCBibGVuZHMgdGVjaG5vbG9neSwgbmF0dXJlLCBjYXJlLCBh + bmQgcGh5c2ljYWwgbGFib3IuIFRoZSBiZXN0IG5hbWVzIGJyaWRnZSB0aGUgZ2FwIGJldHdlZW4g + Y29sZCBtZWNoYW5pY3MgYW5kIHdhcm0sIG9yZ2FuaWMgbGlmZS4gXG5cbkhlcmUgaXMgd2h5IGNl + cnRhaW4gbmFtZXMgZnJvbSB0aGUgbGlzdCB3b3JrIHBlcmZlY3RseSBiYXNlZCBvbiB0aGUgXCJ2 + aWJlXCIgdGhleSBhcmUgZ29pbmcgZm9yOlxuXG4qKjEuIFNwcm91dG5payAoVGhlIEZ1biAmIE1l + bW9yYWJsZSBQaWNrKSoqXG4qICAgKipXaHkgaXQgZml0czoqKiBUaGlzIG5hbWUgaXMgYSBwb3J0 + bWFudGVhdSBvZiBcInNwcm91dFwiICh0aGUgYmVnaW5uaW5nIG9mIGEgcGxhbnQncyBsaWZlKSBh + bmQgXCJTcHV0bmlrXCIgKHRoZSBmYW1vdXMgU292aWV0IHNhdGVsbGl0ZSB0aGF0IGtpY2tlZCBv + ZmYgdGhlIHNwYWNlIGFnZSkuIEl0IHBlcmZlY3RseSBjYXB0dXJlcyB0aGUgZXNzZW5jZSBvZiBh + IHJvYm90IGdhcmRlbmVyOiBpdCdzIGEgcGllY2Ugb2YgYWR2YW5jZWQgdGVjaG5vbG9neSB3aG9z + ZSBlbnRpcmUgcHVycG9zZSBpcyB0byBmb3N0ZXIgbmV3LCBvcmdhbmljIGxpZmUuIEl0IHNvdW5k + cyBmcmllbmRseSwgc2xpZ2h0bHkgcmV0cm8tZnV0dXJpc3RpYywgYW5kIGhpZ2hseSBhcHByb2Fj + aGFibGUuXG5cbioqMi4gQmxvb21Cb3QgKFRoZSBDbGFzc2ljIEFsbGl0ZXJhdGlvbikqKlxuKiAg + ICoqV2h5IGl0IGZpdHM6KiogVGhpcyB1c2VzIGFsbGl0ZXJhdGlvbiAodGhlIHJlcGVhdGluZyBc + IkJcIiBzb3VuZCksIHdoaWNoIG1ha2VzIGl0IGNhdGNoeSBhbmQgZWFzeSBmb3IgaHVtYW5zIHRv + IHNheS4gXCJCbG9vbVwiIGltcGxpZXMgaGVhbHRoLCB2aXRhbGl0eSwgYW5kIHRoZSBzdWNjZXNz + ZnVsIHJlc3VsdCBvZiBnYXJkZW5pbmcsIHdoaWxlIFwiQm90XCIgbGVhdmVzIG5vIGFtYmlndWl0 + eSBhYm91dCB3aGF0IHRoZSBvYmplY3QgaXMuIEl0IGZpdHMgcGVyZmVjdGx5IGluIGEgaG9tZSBz + ZXR0aW5nIHdoZXJlIHRoZSByb2JvdCBpcyBzZWVuIGFzIGEgaGVscGZ1bCBob3VzZWhvbGQgY29t + cGFuaW9uLlxuXG4qKjMuIFN5bHZpYSAoVGhlIEVsZWdhbnQgLyBDb21wYW5pb24gUGljaykqKlxu + KiAgICoqV2h5IGl0IGZpdHM6KiogVGhpcyBuYW1lIGlzIHJvb3RlZCBpbiB0aGUgTGF0aW4gd29y + ZCAqc2lsdmEqLCBtZWFuaW5nIFwiZm9yZXN0XCIgb3IgXCJ3b29kcy5cIiBCeSBnaXZpbmcgdGhl + IHJvYm90IGEgdHJhZGl0aW9uYWwgaHVtYW4gbmFtZSB3aXRoIGEgaGlkZGVuIGJvdGFuaWNhbCBt + ZWFuaW5nLCBpdCBjaGFuZ2VzIHRoZSB1c2VyJ3MgcmVsYXRpb25zaGlwIHdpdGggdGhlIG1hY2hp + bmUuIEluc3RlYWQgb2YgdHJlYXRpbmcgaXQgbGlrZSBhbiBhcHBsaWFuY2UgKGxpa2UgYSBsYXdu + bW93ZXIgb3IgYSB2YWN1dW0pLCB0aGUgdXNlciB3aWxsIGxpa2VseSB0cmVhdCBpdCBtb3JlIGxp + a2UgYSBkZWRpY2F0ZWQgYXNzaXN0YW50IG9yIGEgZnJpZW5kLiBJdCBzb2Z0ZW5zIHRoZSBtZWNo + YW5pY2FsIG5hdHVyZSBvZiB0aGUgcm9ib3QuIFxuXG4qKjQuIEN1bHRpQm90IChUaGUgUHJvZmVz + c2lvbmFsIC8gU2NpLUZpIFBpY2spKipcbiogICAqKldoeSBpdCBmaXRzOioqIFRoaXMgaXMgYSBi + bGVuZGluZyBvZiBcImN1bHRpdmF0ZVwiICh0byBwcmVwYXJlIGFuZCB1c2UgbGFuZCBmb3IgY3Jv + cHMsIG9yIHRvIHByb21vdGUgdGhlIGdyb3d0aCBvZikgYW5kIFwicm9ib3QuXCIgSXQgc291bmRz + IGxpa2UgYSBwaWVjZSBvZiBwcm9mZXNzaW9uYWwgYWdyaWN1bHR1cmFsIGVxdWlwbWVudCBvciBh + IGhpZ2gtZW5kIGNvbnN1bWVyIHByb2R1Y3QuIEl0IGZpdHMgcGVyZmVjdGx5IGlmIHRoZSByb2Jv + dCBpcyBkZXNpZ25lZCBmb3IgaGVhdnktZHV0eSB3b3Jr4oCUbGlrZSB0aWxsaW5nIHNvaWwsIHBs + YW50aW5nIHNlZWRzLCBvciBtYW5hZ2luZyBhIGxhcmdlIGdyZWVuaG91c2UuIFxuXG4qKjUuIFNw + cmlnIChUaGUgTWluaW1hbGlzdCAvIEN1dGUgUGljaykqKlxuKiAgICoqV2h5IGl0IGZpdHM6Kiog + QSBcInNwcmlnXCIgaXMgYSBzbWFsbCBzdGVtIG9yIHR3aWcgd2l0aCBsZWF2ZXMuIEl04oCZcyBh + IHZlcnkgZGVsaWNhdGUsIG9yZ2FuaWMgd29yZC4gTmFtaW5nIGEgYmlnLCBtZXRhbCByb2JvdCBc + IlNwcmlnXCIgY3JlYXRlcyBhIGZ1biBqdXh0YXBvc2l0aW9u4oCUaXTigJlzIGEgbWFzc2l2ZSBw + aWVjZSBvZiBoYXJkd2FyZSB3aXRoIGEgY3V0ZSwgZWFydGh5IG5hbWUuIEl0IGZpdHMgcGVyZmVj + dGx5IGZvciBhIHNtYWxsLCByb3Zpbmcgcm9ib3QgdGhhdCB0ZW5kcyB0byBpbmRvb3IgcGxhbnRz + IG9yIGEgc21hbGwgYmFsY29ueSBnYXJkZW4uIFxuXG5VbHRpbWF0ZWx5LCB0aGUgbmFtZSB5b3Ug + Y2hvb3NlIHNob3VsZCByZWZsZWN0IHRoZSByb2JvdCdzIHByaW1hcnkgZnVuY3Rpb24uIElmIGl0 + J3MgYSBoZWF2eS1kdXR5IG91dGRvb3IgbWFjaGluZSwgYSBuYW1lIGxpa2UgKipDdWx0aUJvdCoq + IG9yICoqVGVycmFEcm9pZCoqIGdyb3VuZHMgaXQgaW4gdXRpbGl0eS4gSWYgaXQncyBhIHNtYWxs + LCBmcmllbmRseSByb2JvdCB0aGF0IGtlZXBzIHlvdXIgaG91c2VwbGFudHMgYWxpdmUsICoqU3By + aWcqKiBvciAqKkJsb29tQm90KiogbWFrZXMgaXQgZmVlbCBsaWtlIHBhcnQgb2YgdGhlIGZhbWls + eS4iLCJhbm5vdGF0aW9ucyI6W119XSwic3RhdHVzIjoiY29tcGxldGVkIn1dLCJwYXJhbGxlbF90 + b29sX2NhbGxzIjp0cnVlLCJwcmV2aW91c19yZXNwb25zZV9pZCI6bnVsbCwicHJvbXB0X2NhY2hl + X2tleSI6bnVsbCwicHJvbXB0X2NhY2hlX3JldGVudGlvbiI6bnVsbCwicmVhc29uaW5nIjp7ImVm + Zm9ydCI6Im1pbmltYWwiLCJzdW1tYXJ5IjpudWxsfSwic2VydmljZV90aWVyIjoiZGVmYXVsdCIs + InN0b3JlIjpmYWxzZSwidGVtcGVyYXR1cmUiOjEuMCwidGV4dCI6eyJmb3JtYXQiOnsidHlwZSI6 + InRleHQifSwidmVyYm9zaXR5IjoibWVkaXVtIn0sInRvb2xfY2hvaWNlIjoiYXV0byIsInRvb2xz + IjpbXSwidG9wX2xvZ3Byb2JzIjowLCJ0b3BfcCI6MS4wLCJ0cnVuY2F0aW9uIjoiZGlzYWJsZWQi + LCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjUyNSwib3V0cHV0X3Rva2VucyI6NjQwLCJ0b3RhbF90 + b2tlbnMiOjExNjUsImlucHV0X3Rva2Vuc19kZXRhaWxzIjp7ImNhY2hlZF90b2tlbnMiOjAsImNh + Y2hlX3dyaXRlX3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnNfZGV0YWlscyI6eyJyZWFzb25pbmdf + dG9rZW5zIjowfX0sInVzZXIiOm51bGwsInNhZmV0eV9pZGVudGlmaWVyIjpudWxsLCJmcmVxdWVu + Y3lfcGVuYWx0eSI6MC4wLCJwcmVzZW5jZV9wZW5hbHR5IjowLjAsIm1ldGFkYXRhIjp7fX0= + headers: + connection: keep-alive + content-type: application/json + x-request-id: 4c6b7efc-aws_as1 + status_code: 200 +timestamp: '2026-11-05T03:39:00.362701+00:00' +upstream_url: https://api.together.ai/v1/responses diff --git a/tests/cassettes/upstream_ir/text_chat/togetherai-responses-stream-00.yaml b/tests/cassettes/upstream_ir/text_chat/togetherai-responses-stream-00.yaml new file mode 100644 index 0000000..8df8aff --- /dev/null +++ b/tests/cassettes/upstream_ir/text_chat/togetherai-responses-stream-00.yaml @@ -0,0 +1,2217 @@ +filename: 2026-11-05-01a1a9c7-4e6b-7d13-88d0-84ff5c0a64e4 +request: + body: + input: + - content: + - text: Suggest a name for a robot gardener. + type: input_text + role: user + max_output_tokens: 1024 + model: zai-org/GLM-5.2 + reasoning: + effort: minimal + store: false + stream: true + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '219' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /v1/responses + query_params: {} +request_id: 01a1a9c7-4e6b-7d13-88d0-84ff5c0a64e4 +response: + error_event: false + headers: + cache-control: no-cache + connection: keep-alive + content-type: text/event-stream + x-request-id: b096134a-aws_as1 + sse: + - 'event: response.created + + ' + - 'data: {"type":"response.created","sequence_number":0,"response":{"id":"resp_01a1a9c7-9d8b-7310-83e0-42b18fbda1f0","object":"response","created_at":1793849793,"completed_at":null,"background":false,"status":"in_progress","error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":1024,"max_tool_calls":null,"model":"zai-org/GLM-5.2","output":[],"parallel_tool_calls":true,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":null,"reasoning":{"effort":"minimal","summary":null},"service_tier":"default","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"safety_identifier":null,"frequency_penalty":0.0,"presence_penalty":0.0,"metadata":{}}} + + ' + - ' + + ' + - 'event: response.in_progress + + ' + - 'data: {"type":"response.in_progress","sequence_number":1,"response":{"id":"resp_01a1a9c7-9d8b-7310-83e0-42b18fbda1f0","object":"response","created_at":1793849793,"completed_at":null,"background":false,"status":"in_progress","error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":1024,"max_tool_calls":null,"model":"zai-org/GLM-5.2","output":[],"parallel_tool_calls":true,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":null,"reasoning":{"effort":"minimal","summary":null},"service_tier":"default","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"safety_identifier":null,"frequency_penalty":0.0,"presence_penalty":0.0,"metadata":{}}} + + ' + - ' + + ' + - 'event: response.output_item.added + + ' + - 'data: {"type":"response.output_item.added","sequence_number":2,"output_index":0,"item":{"id":"msg_01a1a9c79dda7060afc2980080dc45ba","type":"message","role":"assistant","status":"in_progress","content":[]}} + + ' + - ' + + ' + - 'event: response.content_part.added + + ' + - 'data: {"type":"response.content_part.added","sequence_number":3,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"part":{"type":"output_text","text":"","annotations":[]}} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":4,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"Here","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":5,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + are several","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":6,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + name suggestions","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":7,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + for a robot gardener,","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":8,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + broken down by the \"","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":9,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"vibe\" + you might be","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":10,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + going for:\n\n**C","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":11,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"ute + & Friendly**\n","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":12,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"* **Spr","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":13,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"out:** + Simple","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":14,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":", + friendly","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":15,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":", + and perfect","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":16,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + for a robot","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":17,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + that helps things","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":18,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + grow.\n* **B","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":19,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"loomie","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":20,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":":** + Sounds","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":21,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + like a helpful","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":22,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":", + happy","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":23,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + little companion.\n* **","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":24,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"P","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":25,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"etal","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":26,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":":** + Gentle","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":27,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + and sweet","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":28,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":", + great","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":29,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + for a robot","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":30,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + that tends","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":31,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + to flowers.\n","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":32,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"* **Leaf","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":33,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"y:** + A playful","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":34,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":",","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":35,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + approach","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":36,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"able + name.","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":37,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + \n* **D","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":38,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"andy","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":39,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":":** + Inspired","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":40,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + by the d","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":41,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"andelion, + giving","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":42,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + it","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":43,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + a whims","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":44,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"ical + feel","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":45,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":".\n","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":46,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"* **Bud","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":47,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":":** + Short","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":48,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":", + classic","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":49,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":", + and implies","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":50,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + a growing","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":51,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + friendship","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":52,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":".\n\n**Botanical + & Scientific","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":53,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"**\n* **Ch","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":54,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"loris","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":55,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":":** + Named","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":56,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + after the Greek goddess of flowers","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":57,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + (","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":58,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"also","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":59,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + where","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":60,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + the","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":61,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + word chlor","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":62,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"ophyll + comes","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":63,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + from).\n* **Fl","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":64,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"orig","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":65,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"en","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":66,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":":** + Named","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":67,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + after the hormone","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":68,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + in","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":69,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + plants that tells","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":70,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + them to flower","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":71,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":".","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":72,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + Sounds","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":73,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + very high","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":74,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"-tech.\n* **A","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":75,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"ero:** + A nod","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":76,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + to aerop","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":77,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"onics + and","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":78,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + aer","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":79,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"odynamics. + \n* **","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":80,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"F","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":81,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"olia","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":82,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":":** + Derived","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":83,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + from *","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":84,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"foliage* + (le","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":85,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"aves).\n","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":86,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"* **Ar","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":87,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"bor:** + A classic","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":88,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + word","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":89,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + for trees","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":90,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":", + giving","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":91,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + the","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":92,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + robot a sturdy","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":93,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":", + reliable feel.\n\n","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":94,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"**Tech + & Mechanical","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":95,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"**\n* **Green","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":96,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"-B","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":97,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"ot:** + Straight","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":98,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"forward + and classic.\n* ","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":99,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + **Rob","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":100,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"o-","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":101,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"We","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":102,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"ed","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":103,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":":** + Great","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":104,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + if","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":105,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + the robot''s","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":106,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + primary job is pulling","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":107,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + weeds.\n* **V","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":108,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"ine","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":109,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"-O","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":110,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":":** + A pun","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":111,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + on \"","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":112,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"D","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":113,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"ino,\"","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":114,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + but referencing","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":115,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + creeping","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":116,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + vines.\n* **M","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":117,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"echa","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":118,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"-S","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":119,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"prout:** + For","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":120,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + a slightly","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":121,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + more heavy","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":122,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"-duty + gardening","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":123,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + robot.\n* **T","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":124,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"erra","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":125,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"-D","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":126,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"roid:** + \"","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":127,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"Terra\" + meaning","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":128,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + earth/","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":129,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"soil,","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":130,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + combined","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":131,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + with a robotic","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":132,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + suffix.\n","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":133,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"* **Root","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":134,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"-R","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":135,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"over","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":136,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":":** + Sounds","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":137,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + like a rover","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":138,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + exploring","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":139,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + a","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":140,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + garden planet","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":141,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":".\n\n**P","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":142,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"uns","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":143,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + & Play","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":144,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"ful**\n* **R","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":145,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"2","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":146,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"-","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":147,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"Seed2","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":148,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":":** + The","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":149,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + ultimate Star Wars-inspired","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":150,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + gard","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":151,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"ener + pun","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":152,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":".\n* **Wall","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":153,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"-Eed","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":154,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":":** + A play on Wall","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":155,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"-E + and weed","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":156,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"-p","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":157,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"ulling.\n* **Opt","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":158,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"imus","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":159,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + Rh","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":160,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"iz","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":161,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"ome:** + A botanical","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":162,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + take","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":163,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + on Optim","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":164,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"us + Prime (","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":165,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"rhizomes + are underground","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":166,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + plant stems).\n* **","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":167,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"T","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":168,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"rowel","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":169,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"-Tron:** + A classic","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":170,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + robot name merged","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":171,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + with a gardening","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":172,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + tool.\n* **Mul","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":173,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"ch-O","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":174,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":":** + Sounds","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":175,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + like a friendly","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":176,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":", + mud","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":177,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"-loving","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":178,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + robot.\n\n**How","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":179,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + to choose the","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":180,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + best one:**\n* ","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":181,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + If it''s","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":182,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + a **small","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":183,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + indoor","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":184,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + robot** that","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":185,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + potted","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":186,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + plants, go","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":187,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + with something","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":188,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + cute like *","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":189,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"Sprout* + or *B","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":190,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"ud*.\n* If","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":191,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + it''s a **large outdoor","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":192,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + farming","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":193,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + robot**,","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":194,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + go with something stronger","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":195,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + like *Terra-Droid","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":196,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"* + or *Arbor*","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":197,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":".\n* If + it''s","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":198,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + a **smart","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":199,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":",","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":200,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + app","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":201,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"-controlled","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":202,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + robot**,","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":203,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + a","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":204,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + sleek","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":205,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + name","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":206,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":" + like *Fl","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":207,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"origen* + or *F","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":208,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":"olia* + works beautifully","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":209,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"delta":".","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.done + + ' + - 'data: {"type":"response.output_text.done","sequence_number":210,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"text":"Here + are several name suggestions for a robot gardener, broken down by the \"vibe\" + you might be going for:\n\n**Cute & Friendly**\n* **Sprout:** Simple, friendly, + and perfect for a robot that helps things grow.\n* **Bloomie:** Sounds like + a helpful, happy little companion.\n* **Petal:** Gentle and sweet, great for + a robot that tends to flowers.\n* **Leafy:** A playful, approachable name. \n* **Dandy:** + Inspired by the dandelion, giving it a whimsical feel.\n* **Bud:** Short, classic, + and implies a growing friendship.\n\n**Botanical & Scientific**\n* **Chloris:** + Named after the Greek goddess of flowers (also where the word chlorophyll comes + from).\n* **Florigen:** Named after the hormone in plants that tells them to + flower. Sounds very high-tech.\n* **Aero:** A nod to aeroponics and aerodynamics. + \n* **Folia:** Derived from *foliage* (leaves).\n* **Arbor:** A classic word + for trees, giving the robot a sturdy, reliable feel.\n\n**Tech & Mechanical**\n* **Green-Bot:** + Straightforward and classic.\n* **Robo-Weed:** Great if the robot''s primary + job is pulling weeds.\n* **Vine-O:** A pun on \"Dino,\" but referencing creeping + vines.\n* **Mecha-Sprout:** For a slightly more heavy-duty gardening robot.\n* **Terra-Droid:** + \"Terra\" meaning earth/soil, combined with a robotic suffix.\n* **Root-Rover:** + Sounds like a rover exploring a garden planet.\n\n**Puns & Playful**\n* **R2-Seed2:** + The ultimate Star Wars-inspired gardener pun.\n* **Wall-Eed:** A play on Wall-E + and weed-pulling.\n* **Optimus Rhizome:** A botanical take on Optimus Prime + (rhizomes are underground plant stems).\n* **Trowel-Tron:** A classic robot + name merged with a gardening tool.\n* **Mulch-O:** Sounds like a friendly, mud-loving + robot.\n\n**How to choose the best one:**\n* If it''s a **small indoor robot** + that potted plants, go with something cute like *Sprout* or *Bud*.\n* If it''s + a **large outdoor farming robot**, go with something stronger like *Terra-Droid* + or *Arbor*.\n* If it''s a **smart, app-controlled robot**, a sleek name like + *Florigen* or *Folia* works beautifully.","logprobs":[]} + + ' + - ' + + ' + - 'event: response.content_part.done + + ' + - 'data: {"type":"response.content_part.done","sequence_number":211,"output_index":0,"item_id":"msg_01a1a9c79dda7060afc2980080dc45ba","content_index":0,"part":{"type":"output_text","text":"Here + are several name suggestions for a robot gardener, broken down by the \"vibe\" + you might be going for:\n\n**Cute & Friendly**\n* **Sprout:** Simple, friendly, + and perfect for a robot that helps things grow.\n* **Bloomie:** Sounds like + a helpful, happy little companion.\n* **Petal:** Gentle and sweet, great for + a robot that tends to flowers.\n* **Leafy:** A playful, approachable name. \n* **Dandy:** + Inspired by the dandelion, giving it a whimsical feel.\n* **Bud:** Short, classic, + and implies a growing friendship.\n\n**Botanical & Scientific**\n* **Chloris:** + Named after the Greek goddess of flowers (also where the word chlorophyll comes + from).\n* **Florigen:** Named after the hormone in plants that tells them to + flower. Sounds very high-tech.\n* **Aero:** A nod to aeroponics and aerodynamics. + \n* **Folia:** Derived from *foliage* (leaves).\n* **Arbor:** A classic word + for trees, giving the robot a sturdy, reliable feel.\n\n**Tech & Mechanical**\n* **Green-Bot:** + Straightforward and classic.\n* **Robo-Weed:** Great if the robot''s primary + job is pulling weeds.\n* **Vine-O:** A pun on \"Dino,\" but referencing creeping + vines.\n* **Mecha-Sprout:** For a slightly more heavy-duty gardening robot.\n* **Terra-Droid:** + \"Terra\" meaning earth/soil, combined with a robotic suffix.\n* **Root-Rover:** + Sounds like a rover exploring a garden planet.\n\n**Puns & Playful**\n* **R2-Seed2:** + The ultimate Star Wars-inspired gardener pun.\n* **Wall-Eed:** A play on Wall-E + and weed-pulling.\n* **Optimus Rhizome:** A botanical take on Optimus Prime + (rhizomes are underground plant stems).\n* **Trowel-Tron:** A classic robot + name merged with a gardening tool.\n* **Mulch-O:** Sounds like a friendly, mud-loving + robot.\n\n**How to choose the best one:**\n* If it''s a **small indoor robot** + that potted plants, go with something cute like *Sprout* or *Bud*.\n* If it''s + a **large outdoor farming robot**, go with something stronger like *Terra-Droid* + or *Arbor*.\n* If it''s a **smart, app-controlled robot**, a sleek name like + *Florigen* or *Folia* works beautifully.","annotations":[]}} + + ' + - ' + + ' + - 'event: response.output_item.done + + ' + - 'data: {"type":"response.output_item.done","sequence_number":212,"output_index":0,"item":{"id":"msg_01a1a9c79dda7060afc2980080dc45ba","type":"message","role":"assistant","content":[{"type":"output_text","text":"Here + are several name suggestions for a robot gardener, broken down by the \"vibe\" + you might be going for:\n\n**Cute & Friendly**\n* **Sprout:** Simple, friendly, + and perfect for a robot that helps things grow.\n* **Bloomie:** Sounds like + a helpful, happy little companion.\n* **Petal:** Gentle and sweet, great for + a robot that tends to flowers.\n* **Leafy:** A playful, approachable name. \n* **Dandy:** + Inspired by the dandelion, giving it a whimsical feel.\n* **Bud:** Short, classic, + and implies a growing friendship.\n\n**Botanical & Scientific**\n* **Chloris:** + Named after the Greek goddess of flowers (also where the word chlorophyll comes + from).\n* **Florigen:** Named after the hormone in plants that tells them to + flower. Sounds very high-tech.\n* **Aero:** A nod to aeroponics and aerodynamics. + \n* **Folia:** Derived from *foliage* (leaves).\n* **Arbor:** A classic word + for trees, giving the robot a sturdy, reliable feel.\n\n**Tech & Mechanical**\n* **Green-Bot:** + Straightforward and classic.\n* **Robo-Weed:** Great if the robot''s primary + job is pulling weeds.\n* **Vine-O:** A pun on \"Dino,\" but referencing creeping + vines.\n* **Mecha-Sprout:** For a slightly more heavy-duty gardening robot.\n* **Terra-Droid:** + \"Terra\" meaning earth/soil, combined with a robotic suffix.\n* **Root-Rover:** + Sounds like a rover exploring a garden planet.\n\n**Puns & Playful**\n* **R2-Seed2:** + The ultimate Star Wars-inspired gardener pun.\n* **Wall-Eed:** A play on Wall-E + and weed-pulling.\n* **Optimus Rhizome:** A botanical take on Optimus Prime + (rhizomes are underground plant stems).\n* **Trowel-Tron:** A classic robot + name merged with a gardening tool.\n* **Mulch-O:** Sounds like a friendly, mud-loving + robot.\n\n**How to choose the best one:**\n* If it''s a **small indoor robot** + that potted plants, go with something cute like *Sprout* or *Bud*.\n* If it''s + a **large outdoor farming robot**, go with something stronger like *Terra-Droid* + or *Arbor*.\n* If it''s a **smart, app-controlled robot**, a sleek name like + *Florigen* or *Folia* works beautifully.","annotations":[]}],"status":"completed"}} + + ' + - ' + + ' + - 'event: response.completed + + ' + - 'data: {"type":"response.completed","sequence_number":213,"response":{"id":"resp_01a1a9c7-9d8b-7310-83e0-42b18fbda1f0","object":"response","created_at":1793849793,"completed_at":1793849796,"background":false,"status":"completed","error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":1024,"max_tool_calls":null,"model":"zai-org/GLM-5.2","output":[{"id":"msg_01a1a9c79dda7060afc2980080dc45ba","type":"message","role":"assistant","content":[{"type":"output_text","text":"Here + are several name suggestions for a robot gardener, broken down by the \"vibe\" + you might be going for:\n\n**Cute & Friendly**\n* **Sprout:** Simple, friendly, + and perfect for a robot that helps things grow.\n* **Bloomie:** Sounds like + a helpful, happy little companion.\n* **Petal:** Gentle and sweet, great for + a robot that tends to flowers.\n* **Leafy:** A playful, approachable name. \n* **Dandy:** + Inspired by the dandelion, giving it a whimsical feel.\n* **Bud:** Short, classic, + and implies a growing friendship.\n\n**Botanical & Scientific**\n* **Chloris:** + Named after the Greek goddess of flowers (also where the word chlorophyll comes + from).\n* **Florigen:** Named after the hormone in plants that tells them to + flower. Sounds very high-tech.\n* **Aero:** A nod to aeroponics and aerodynamics. + \n* **Folia:** Derived from *foliage* (leaves).\n* **Arbor:** A classic word + for trees, giving the robot a sturdy, reliable feel.\n\n**Tech & Mechanical**\n* **Green-Bot:** + Straightforward and classic.\n* **Robo-Weed:** Great if the robot''s primary + job is pulling weeds.\n* **Vine-O:** A pun on \"Dino,\" but referencing creeping + vines.\n* **Mecha-Sprout:** For a slightly more heavy-duty gardening robot.\n* **Terra-Droid:** + \"Terra\" meaning earth/soil, combined with a robotic suffix.\n* **Root-Rover:** + Sounds like a rover exploring a garden planet.\n\n**Puns & Playful**\n* **R2-Seed2:** + The ultimate Star Wars-inspired gardener pun.\n* **Wall-Eed:** A play on Wall-E + and weed-pulling.\n* **Optimus Rhizome:** A botanical take on Optimus Prime + (rhizomes are underground plant stems).\n* **Trowel-Tron:** A classic robot + name merged with a gardening tool.\n* **Mulch-O:** Sounds like a friendly, mud-loving + robot.\n\n**How to choose the best one:**\n* If it''s a **small indoor robot** + that potted plants, go with something cute like *Sprout* or *Bud*.\n* If it''s + a **large outdoor farming robot**, go with something stronger like *Terra-Droid* + or *Arbor*.\n* If it''s a **smart, app-controlled robot**, a sleek name like + *Florigen* or *Folia* works beautifully.","annotations":[]}],"status":"completed"}],"parallel_tool_calls":true,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":null,"reasoning":{"effort":"minimal","summary":null},"service_tier":"default","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":{"input_tokens":16,"output_tokens":561,"total_tokens":577,"input_tokens_details":{"cached_tokens":0,"cache_write_tokens":0},"output_tokens_details":{"reasoning_tokens":0}},"user":null,"safety_identifier":null,"frequency_penalty":0.0,"presence_penalty":0.0,"metadata":{}}} + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: response.completed +timestamp: '2026-11-05T03:36:13.675202+00:00' +upstream_url: https://api.together.ai/v1/responses diff --git a/tests/cassettes/upstream_ir/text_chat/togetherai-responses-stream-01.yaml b/tests/cassettes/upstream_ir/text_chat/togetherai-responses-stream-01.yaml new file mode 100644 index 0000000..2b27e45 --- /dev/null +++ b/tests/cassettes/upstream_ir/text_chat/togetherai-responses-stream-01.yaml @@ -0,0 +1,2204 @@ +filename: 2026-11-05-01a1a9c8-4533-7840-939d-ce49666302b3 +request: + body: + input: + - content: + - text: Suggest a name for a robot gardener. + type: input_text + role: user + - content: + - annotations: [] + text: "Here are several name suggestions for a robot gardener, broken down\ + \ by the \"vibe\" you might be going for:\n\n**Cute & Friendly**\n* **Sprout:**\ + \ Simple, friendly, and perfect for a robot that helps things grow.\n* \ + \ **Bloomie:** Sounds like a helpful, happy little companion.\n* **Petal:**\ + \ Gentle and sweet, great for a robot that tends to flowers.\n* **Leafy:**\ + \ A playful, approachable name. \n* **Dandy:** Inspired by the dandelion,\ + \ giving it a whimsical feel.\n* **Bud:** Short, classic, and implies\ + \ a growing friendship.\n\n**Botanical & Scientific**\n* **Chloris:**\ + \ Named after the Greek goddess of flowers (also where the word chlorophyll\ + \ comes from).\n* **Florigen:** Named after the hormone in plants that\ + \ tells them to flower. Sounds very high-tech.\n* **Aero:** A nod to aeroponics\ + \ and aerodynamics. \n* **Folia:** Derived from *foliage* (leaves).\n\ + * **Arbor:** A classic word for trees, giving the robot a sturdy, reliable\ + \ feel.\n\n**Tech & Mechanical**\n* **Green-Bot:** Straightforward and\ + \ classic.\n* **Robo-Weed:** Great if the robot's primary job is pulling\ + \ weeds.\n* **Vine-O:** A pun on \"Dino,\" but referencing creeping vines.\n\ + * **Mecha-Sprout:** For a slightly more heavy-duty gardening robot.\n\ + * **Terra-Droid:** \"Terra\" meaning earth/soil, combined with a robotic\ + \ suffix.\n* **Root-Rover:** Sounds like a rover exploring a garden planet.\n\ + \n**Puns & Playful**\n* **R2-Seed2:** The ultimate Star Wars-inspired\ + \ gardener pun.\n* **Wall-Eed:** A play on Wall-E and weed-pulling.\n\ + * **Optimus Rhizome:** A botanical take on Optimus Prime (rhizomes are\ + \ underground plant stems).\n* **Trowel-Tron:** A classic robot name merged\ + \ with a gardening tool.\n* **Mulch-O:** Sounds like a friendly, mud-loving\ + \ robot.\n\n**How to choose the best one:**\n* If it's a **small indoor\ + \ robot** that potted plants, go with something cute like *Sprout* or *Bud*.\n\ + * If it's a **large outdoor farming robot**, go with something stronger\ + \ like *Terra-Droid* or *Arbor*.\n* If it's a **smart, app-controlled\ + \ robot**, a sleek name like *Florigen* or *Folia* works beautifully." + type: output_text + id: msg_01a1a9c79dda7060afc2980080dc45ba + role: assistant + status: completed + type: message + - content: + - text: Explain why that name fits. + type: input_text + role: user + max_output_tokens: 1024 + model: zai-org/GLM-5.2 + reasoning: + effort: minimal + store: false + stream: true + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '2594' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /v1/responses + query_params: {} +request_id: 01a1a9c8-4533-7840-939d-ce49666302b3 +response: + error_event: false + headers: + cache-control: no-cache + connection: keep-alive + content-type: text/event-stream + x-request-id: 4088251b-aws_as1 + sse: + - 'event: response.created + + ' + - 'data: {"type":"response.created","sequence_number":0,"response":{"id":"resp_01a1a9c8-ca9a-7ec1-8b54-9377a627ea3f","object":"response","created_at":1793849871,"completed_at":null,"background":false,"status":"in_progress","error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":1024,"max_tool_calls":null,"model":"zai-org/GLM-5.2","output":[],"parallel_tool_calls":true,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":null,"reasoning":{"effort":"minimal","summary":null},"service_tier":"default","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"safety_identifier":null,"frequency_penalty":0.0,"presence_penalty":0.0,"metadata":{}}} + + ' + - ' + + ' + - 'event: response.in_progress + + ' + - 'data: {"type":"response.in_progress","sequence_number":1,"response":{"id":"resp_01a1a9c8-ca9a-7ec1-8b54-9377a627ea3f","object":"response","created_at":1793849871,"completed_at":null,"background":false,"status":"in_progress","error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":1024,"max_tool_calls":null,"model":"zai-org/GLM-5.2","output":[],"parallel_tool_calls":true,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":null,"reasoning":{"effort":"minimal","summary":null},"service_tier":"default","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"safety_identifier":null,"frequency_penalty":0.0,"presence_penalty":0.0,"metadata":{}}} + + ' + - ' + + ' + - 'event: response.output_item.added + + ' + - 'data: {"type":"response.output_item.added","sequence_number":2,"output_index":0,"item":{"id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","type":"message","role":"assistant","status":"in_progress","content":[]}} + + ' + - ' + + ' + - 'event: response.content_part.added + + ' + - 'data: {"type":"response.content_part.added","sequence_number":3,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"part":{"type":"output_text","text":"","annotations":[]}} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":4,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":"Because","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":5,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + I gave","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":6,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + you a list of several","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":7,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + names","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":8,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":", + I will","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":9,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + pick the","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":10,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + standout","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":11,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + favorite","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":12,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + from each category and explain exactly","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":13,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + why it makes","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":14,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + a","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":15,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + perfect fit for a robot gard","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":16,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":"ener. + \n\nHere","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":17,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + is why","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":18,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + those specific","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":19,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + names work so","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":20,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + well:\n\n**","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":21,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":"1. + Sprout (","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":22,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":"The","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":23,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + Cute & Friendly Option","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":24,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":")**\n* **Why","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":25,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + it fits:** The","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":26,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + word \"sprout\" represents","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":27,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + the very beginning of a plant","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":28,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":"''s + life—the","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":29,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + moment a seed pushes","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":30,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + through the soil.","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":31,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + This","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":32,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + makes","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":33,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + it the","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":34,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + perfect name","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":35,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + for a robot whose","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":36,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + entire","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":37,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + purpose","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":38,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + is to nurture","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":39,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + and protect","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":40,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + young","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":41,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":",","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":42,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + growing plants. Furthermore","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":43,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":", + the word has","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":44,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + a naturally","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":45,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + friendly, soft","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":46,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":", + and approach","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":47,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":"able + sound.","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":48,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + If","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":49,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + the","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":50,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + robot is meant","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":51,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + to be a","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":52,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + household companion that","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":53,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + people","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":54,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + interact with daily","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":55,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + (like a Ro","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":56,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":"omba),","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":57,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + \"Sprout\" makes","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":58,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + it feel","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":59,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + less","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":60,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + like a cold","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":61,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + machine and more like a helpful","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":62,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + little pet.","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":63,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + \n\n**2. Fl","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":64,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":"origen + (The Scientific","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":65,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + & Sle","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":66,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":"ek + Option)**\n* ","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":67,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + **Why it fits:** Fl","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":68,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":"origen + is the","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":69,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + real","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":70,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":"-life","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":71,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + name","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":72,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + of","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":73,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + the protein","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":74,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + hormone in plants that triggers","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":75,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + them","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":76,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + to bloom","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":77,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + and","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":78,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + flower. By","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":79,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + naming a","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":80,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + robot Fl","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":81,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":"origen, + you","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":82,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + are implying","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":83,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + that the machine","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":84,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + is the *","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":85,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":"mechanical + equivalent","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":86,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":"* + of that","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":87,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + hormone","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":88,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":"—it + is the catalyst","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":89,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + that makes the garden","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":90,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + thrive. It sounds","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":91,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + incredibly","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":92,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + high","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":93,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":"-tech, + precise","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":94,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":", + and smart","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":95,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":". + This","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":96,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + name is","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":97,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + a","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":98,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + perfect fit for a highly","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":99,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + advanced, app","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":100,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":"-controlled + robot","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":101,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + that uses","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":102,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + sensors to","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":103,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + monitor soil moisture, pH","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":104,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":",","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":105,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + and light levels.","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":106,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + \n\n**3. Terra-D","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":107,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":"roid + (The Heavy","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":108,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":"-Duty/","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":109,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":"Outdoor + Option)**\n* ","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":110,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + **Why it fits:** \"","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":111,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":"Terra\" + is Latin","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":112,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + for earth","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":113,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + or","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":114,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + soil, and \"","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":115,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":"Droid\" + immediately","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":116,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + communicates","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":117,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + that","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":118,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + this","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":119,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + is an","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":120,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + autonomous machine. Put","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":121,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + together, it","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":122,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + literally translates","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":123,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + to \"Earth Robot","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":124,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":".\" + This name fits","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":125,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + a larger","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":126,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":", + more","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":127,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + rugged robot","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":128,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + perfectly","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":129,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":"—something","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":130,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + that","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":131,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + roams outdoor","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":132,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + garden","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":133,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + beds, t","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":134,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":"ills + soil, or pulls","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":135,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + heavy weeds. It has","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":136,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + a sturdy","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":137,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":", + industrial ring to it,","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":138,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + letting","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":139,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + the user know that this","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":140,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + robot can handle the","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":141,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + dirty","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":142,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":",","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":143,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + heavy","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":144,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + lifting of outdoor","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":145,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + gardening","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":146,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":".\n\n**4. + R","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":147,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":"2-Seed2 + (The","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":148,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + Play","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":149,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":"ful/P","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":150,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":"un + Option)**\n* ","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":151,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + **Why it fits:** This","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":152,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + name","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":153,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + works","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":154,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + on","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":155,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + two","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":156,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + levels. First","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":157,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":", + the","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":158,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + phon","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":159,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":"etic + similarity","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":160,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + to Star","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":161,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + Wars'' R","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":162,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":"2-D","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":163,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":"2 + instantly","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":164,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + gives","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":165,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + the robot","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":166,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + a lo","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":167,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":"vable, + be","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":168,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":"eping, + helpful","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":169,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + personality that","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":170,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + pop","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":171,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":"-c","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":172,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":"ulture + fans will","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":173,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + immediately connect","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":174,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + with. Secondly","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":175,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":", + swapping","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":176,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + \"D","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":177,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":"2\" + for","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":178,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + \"Seed2\" explicitly","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":179,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + states","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":180,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + the","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":181,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + robot''s function. The","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":182,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + name itself","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":183,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + becomes","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":184,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + a conversation","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":185,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + starter and","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":186,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + instantly","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":187,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + brings","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":188,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + a smile to the user","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":189,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":"''s + face,","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":190,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + which","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":191,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + is","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":192,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + exactly the","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":193,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + kind of emotional","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":194,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + connection","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":195,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + you","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":196,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + want a","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":197,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + household","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":198,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"delta":" + robot to have.","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.done + + ' + - 'data: {"type":"response.output_text.done","sequence_number":199,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"text":"Because + I gave you a list of several names, I will pick the standout favorite from each + category and explain exactly why it makes a perfect fit for a robot gardener. + \n\nHere is why those specific names work so well:\n\n**1. Sprout (The Cute & + Friendly Option)**\n* **Why it fits:** The word \"sprout\" represents the very + beginning of a plant''s life—the moment a seed pushes through the soil. This makes + it the perfect name for a robot whose entire purpose is to nurture and protect + young, growing plants. Furthermore, the word has a naturally friendly, soft, and + approachable sound. If the robot is meant to be a household companion that people + interact with daily (like a Roomba), \"Sprout\" makes it feel less like a cold + machine and more like a helpful little pet. \n\n**2. Florigen (The Scientific + & Sleek Option)**\n* **Why it fits:** Florigen is the real-life name of the + protein hormone in plants that triggers them to bloom and flower. By naming a + robot Florigen, you are implying that the machine is the *mechanical equivalent* + of that hormone—it is the catalyst that makes the garden thrive. It sounds incredibly + high-tech, precise, and smart. This name is a perfect fit for a highly advanced, + app-controlled robot that uses sensors to monitor soil moisture, pH, and light + levels. \n\n**3. Terra-Droid (The Heavy-Duty/Outdoor Option)**\n* **Why it fits:** + \"Terra\" is Latin for earth or soil, and \"Droid\" immediately communicates that + this is an autonomous machine. Put together, it literally translates to \"Earth + Robot.\" This name fits a larger, more rugged robot perfectly—something that roams + outdoor garden beds, tills soil, or pulls heavy weeds. It has a sturdy, industrial + ring to it, letting the user know that this robot can handle the dirty, heavy + lifting of outdoor gardening.\n\n**4. R2-Seed2 (The Playful/Pun Option)**\n* **Why + it fits:** This name works on two levels. First, the phonetic similarity to Star + Wars'' R2-D2 instantly gives the robot a lovable, beeping, helpful personality + that pop-culture fans will immediately connect with. Secondly, swapping \"D2\" + for \"Seed2\" explicitly states the robot''s function. The name itself becomes + a conversation starter and instantly brings a smile to the user''s face, which + is exactly the kind of emotional connection you want a household robot to have.","logprobs":[]} + + ' + - ' + + ' + - 'event: response.content_part.done + + ' + - 'data: {"type":"response.content_part.done","sequence_number":200,"output_index":0,"item_id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","content_index":0,"part":{"type":"output_text","text":"Because + I gave you a list of several names, I will pick the standout favorite from each + category and explain exactly why it makes a perfect fit for a robot gardener. + \n\nHere is why those specific names work so well:\n\n**1. Sprout (The Cute & + Friendly Option)**\n* **Why it fits:** The word \"sprout\" represents the very + beginning of a plant''s life—the moment a seed pushes through the soil. This makes + it the perfect name for a robot whose entire purpose is to nurture and protect + young, growing plants. Furthermore, the word has a naturally friendly, soft, and + approachable sound. If the robot is meant to be a household companion that people + interact with daily (like a Roomba), \"Sprout\" makes it feel less like a cold + machine and more like a helpful little pet. \n\n**2. Florigen (The Scientific + & Sleek Option)**\n* **Why it fits:** Florigen is the real-life name of the + protein hormone in plants that triggers them to bloom and flower. By naming a + robot Florigen, you are implying that the machine is the *mechanical equivalent* + of that hormone—it is the catalyst that makes the garden thrive. It sounds incredibly + high-tech, precise, and smart. This name is a perfect fit for a highly advanced, + app-controlled robot that uses sensors to monitor soil moisture, pH, and light + levels. \n\n**3. Terra-Droid (The Heavy-Duty/Outdoor Option)**\n* **Why it fits:** + \"Terra\" is Latin for earth or soil, and \"Droid\" immediately communicates that + this is an autonomous machine. Put together, it literally translates to \"Earth + Robot.\" This name fits a larger, more rugged robot perfectly—something that roams + outdoor garden beds, tills soil, or pulls heavy weeds. It has a sturdy, industrial + ring to it, letting the user know that this robot can handle the dirty, heavy + lifting of outdoor gardening.\n\n**4. R2-Seed2 (The Playful/Pun Option)**\n* **Why + it fits:** This name works on two levels. First, the phonetic similarity to Star + Wars'' R2-D2 instantly gives the robot a lovable, beeping, helpful personality + that pop-culture fans will immediately connect with. Secondly, swapping \"D2\" + for \"Seed2\" explicitly states the robot''s function. The name itself becomes + a conversation starter and instantly brings a smile to the user''s face, which + is exactly the kind of emotional connection you want a household robot to have.","annotations":[]}} + + ' + - ' + + ' + - 'event: response.output_item.done + + ' + - 'data: {"type":"response.output_item.done","sequence_number":201,"output_index":0,"item":{"id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","type":"message","role":"assistant","content":[{"type":"output_text","text":"Because + I gave you a list of several names, I will pick the standout favorite from each + category and explain exactly why it makes a perfect fit for a robot gardener. + \n\nHere is why those specific names work so well:\n\n**1. Sprout (The Cute & + Friendly Option)**\n* **Why it fits:** The word \"sprout\" represents the very + beginning of a plant''s life—the moment a seed pushes through the soil. This makes + it the perfect name for a robot whose entire purpose is to nurture and protect + young, growing plants. Furthermore, the word has a naturally friendly, soft, and + approachable sound. If the robot is meant to be a household companion that people + interact with daily (like a Roomba), \"Sprout\" makes it feel less like a cold + machine and more like a helpful little pet. \n\n**2. Florigen (The Scientific + & Sleek Option)**\n* **Why it fits:** Florigen is the real-life name of the + protein hormone in plants that triggers them to bloom and flower. By naming a + robot Florigen, you are implying that the machine is the *mechanical equivalent* + of that hormone—it is the catalyst that makes the garden thrive. It sounds incredibly + high-tech, precise, and smart. This name is a perfect fit for a highly advanced, + app-controlled robot that uses sensors to monitor soil moisture, pH, and light + levels. \n\n**3. Terra-Droid (The Heavy-Duty/Outdoor Option)**\n* **Why it fits:** + \"Terra\" is Latin for earth or soil, and \"Droid\" immediately communicates that + this is an autonomous machine. Put together, it literally translates to \"Earth + Robot.\" This name fits a larger, more rugged robot perfectly—something that roams + outdoor garden beds, tills soil, or pulls heavy weeds. It has a sturdy, industrial + ring to it, letting the user know that this robot can handle the dirty, heavy + lifting of outdoor gardening.\n\n**4. R2-Seed2 (The Playful/Pun Option)**\n* **Why + it fits:** This name works on two levels. First, the phonetic similarity to Star + Wars'' R2-D2 instantly gives the robot a lovable, beeping, helpful personality + that pop-culture fans will immediately connect with. Secondly, swapping \"D2\" + for \"Seed2\" explicitly states the robot''s function. The name itself becomes + a conversation starter and instantly brings a smile to the user''s face, which + is exactly the kind of emotional connection you want a household robot to have.","annotations":[]}],"status":"completed"}} + + ' + - ' + + ' + - 'event: response.completed + + ' + - 'data: {"type":"response.completed","sequence_number":202,"response":{"id":"resp_01a1a9c8-ca9a-7ec1-8b54-9377a627ea3f","object":"response","created_at":1793849871,"completed_at":1793849873,"background":false,"status":"completed","error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":1024,"max_tool_calls":null,"model":"zai-org/GLM-5.2","output":[{"id":"msg_01a1a9c8cafb75e3aaf690ee57e0fd00","type":"message","role":"assistant","content":[{"type":"output_text","text":"Because + I gave you a list of several names, I will pick the standout favorite from each + category and explain exactly why it makes a perfect fit for a robot gardener. + \n\nHere is why those specific names work so well:\n\n**1. Sprout (The Cute & + Friendly Option)**\n* **Why it fits:** The word \"sprout\" represents the very + beginning of a plant''s life—the moment a seed pushes through the soil. This makes + it the perfect name for a robot whose entire purpose is to nurture and protect + young, growing plants. Furthermore, the word has a naturally friendly, soft, and + approachable sound. If the robot is meant to be a household companion that people + interact with daily (like a Roomba), \"Sprout\" makes it feel less like a cold + machine and more like a helpful little pet. \n\n**2. Florigen (The Scientific + & Sleek Option)**\n* **Why it fits:** Florigen is the real-life name of the + protein hormone in plants that triggers them to bloom and flower. By naming a + robot Florigen, you are implying that the machine is the *mechanical equivalent* + of that hormone—it is the catalyst that makes the garden thrive. It sounds incredibly + high-tech, precise, and smart. This name is a perfect fit for a highly advanced, + app-controlled robot that uses sensors to monitor soil moisture, pH, and light + levels. \n\n**3. Terra-Droid (The Heavy-Duty/Outdoor Option)**\n* **Why it fits:** + \"Terra\" is Latin for earth or soil, and \"Droid\" immediately communicates that + this is an autonomous machine. Put together, it literally translates to \"Earth + Robot.\" This name fits a larger, more rugged robot perfectly—something that roams + outdoor garden beds, tills soil, or pulls heavy weeds. It has a sturdy, industrial + ring to it, letting the user know that this robot can handle the dirty, heavy + lifting of outdoor gardening.\n\n**4. R2-Seed2 (The Playful/Pun Option)**\n* **Why + it fits:** This name works on two levels. First, the phonetic similarity to Star + Wars'' R2-D2 instantly gives the robot a lovable, beeping, helpful personality + that pop-culture fans will immediately connect with. Secondly, swapping \"D2\" + for \"Seed2\" explicitly states the robot''s function. The name itself becomes + a conversation starter and instantly brings a smile to the user''s face, which + is exactly the kind of emotional connection you want a household robot to have.","annotations":[]}],"status":"completed"}],"parallel_tool_calls":true,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":null,"reasoning":{"effort":"minimal","summary":null},"service_tier":"default","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":{"input_tokens":587,"output_tokens":525,"total_tokens":1112,"input_tokens_details":{"cached_tokens":0,"cache_write_tokens":0},"output_tokens_details":{"reasoning_tokens":0}},"user":null,"safety_identifier":null,"frequency_penalty":0.0,"presence_penalty":0.0,"metadata":{}}} + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: response.completed +timestamp: '2026-11-05T03:37:16.851861+00:00' +upstream_url: https://api.together.ai/v1/responses diff --git a/tests/cassettes/upstream_ir/tool_use/bedrock-chat_completions-non_stream-00.yaml b/tests/cassettes/upstream_ir/tool_use/bedrock-chat_completions-non_stream-00.yaml new file mode 100644 index 0000000..f229170 --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/bedrock-chat_completions-non_stream-00.yaml @@ -0,0 +1,99 @@ +filename: 2026-11-05-01a1ac2f-a527-72b1-8d51-f62738ddb154 +request: + body: + max_completion_tokens: 512 + messages: + - content: + - text: Read index.txt using read_file. It contains the path of another file. + Read that file too, then summarize its contents in one sentence. + type: text + role: user + model: global.openai.gpt-5.6-luna + parallel_tool_calls: false + reasoning_effort: none + stream: false + tool_choice: auto + tools: + - function: + description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '595' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /openai/v1/chat/completions + query_params: {} +request_id: 01a1ac2f-a527-72b1-8d51-f62738ddb154 +response: + body: + choices: + - finish_reason: tool_calls + index: 0 + message: + annotations: [] + content: null + refusal: null + role: assistant + tool_calls: + - function: + arguments: '{"path":"index.txt"}' + name: read_file + id: call_773902313372537881e8bd033b9b4546 + type: function + created: 1793890166 + id: chatcmpl-azgzfauele2vm5ariumnrbwsarymg3iatl26ja7spuhtdggvgzuq + model: global.openai.gpt-5.6-luna + object: chat.completion + service_tier: default + system_fingerprint: null + usage: + completion_tokens: 19 + completion_tokens_details: + accepted_prediction_tokens: 0 + audio_tokens: 0 + reasoning_tokens: 0 + rejected_prediction_tokens: 0 + prompt_tokens: 149 + prompt_tokens_details: + audio_tokens: 0 + cache_write_tokens: 0 + cached_tokens: 0 + total_tokens: 168 + body_bytes: !!binary | + eyJjaG9pY2VzIjpbeyJmaW5pc2hfcmVhc29uIjoidG9vbF9jYWxscyIsImluZGV4IjowLCJtZXNz + YWdlIjp7ImFubm90YXRpb25zIjpbXSwiY29udGVudCI6bnVsbCwicmVmdXNhbCI6bnVsbCwicm9s + ZSI6ImFzc2lzdGFudCIsInRvb2xfY2FsbHMiOlt7ImZ1bmN0aW9uIjp7ImFyZ3VtZW50cyI6Intc + InBhdGhcIjpcImluZGV4LnR4dFwifSIsIm5hbWUiOiJyZWFkX2ZpbGUifSwiaWQiOiJjYWxsXzc3 + MzkwMjMxMzM3MjUzNzg4MWU4YmQwMzNiOWI0NTQ2IiwidHlwZSI6ImZ1bmN0aW9uIn1dfX1dLCJj + cmVhdGVkIjoxNzkzODkwMTY2LCJpZCI6ImNoYXRjbXBsLWF6Z3pmYXVlbGUydm01YXJpdW1ucmJ3 + c2FyeW1nM2lhdGwyNmphN3NwdWh0ZGdndmd6dXEiLCJtb2RlbCI6Imdsb2JhbC5vcGVuYWkuZ3B0 + LTUuNi1sdW5hIiwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uIiwic2VydmljZV90aWVyIjoiZGVm + YXVsdCIsInVzYWdlIjp7ImNvbXBsZXRpb25fdG9rZW5zIjoxOSwiY29tcGxldGlvbl90b2tlbnNf + ZGV0YWlscyI6eyJhY2NlcHRlZF9wcmVkaWN0aW9uX3Rva2VucyI6MCwiYXVkaW9fdG9rZW5zIjow + LCJyZWFzb25pbmdfdG9rZW5zIjowLCJyZWplY3RlZF9wcmVkaWN0aW9uX3Rva2VucyI6MH0sInBy + b21wdF90b2tlbnMiOjE0OSwicHJvbXB0X3Rva2Vuc19kZXRhaWxzIjp7ImF1ZGlvX3Rva2VucyI6 + MCwiY2FjaGVfd3JpdGVfdG9rZW5zIjowLCJjYWNoZWRfdG9rZW5zIjowfSwidG90YWxfdG9rZW5z + IjoxNjh9LCJzeXN0ZW1fZmluZ2VycHJpbnQiOm51bGx9 + headers: + connection: keep-alive + content-length: '774' + content-type: application/json + x-request-id: 49db7bdf-180a-4c4d-88b9-2b49f60fe833 + status_code: 200 +timestamp: '2026-11-05T14:49:26.055251+00:00' +upstream_url: https://bedrock-runtime.ap-southeast-1.amazonaws.com/openai/v1/chat/completions diff --git a/tests/cassettes/upstream_ir/tool_use/bedrock-chat_completions-non_stream-01.yaml b/tests/cassettes/upstream_ir/tool_use/bedrock-chat_completions-non_stream-01.yaml new file mode 100644 index 0000000..5aec49b --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/bedrock-chat_completions-non_stream-01.yaml @@ -0,0 +1,112 @@ +filename: 2026-11-05-01a1ac2f-a9bc-7963-928c-827849dd00f5 +request: + body: + max_completion_tokens: 512 + messages: + - content: + - text: Read index.txt using read_file. It contains the path of another file. + Read that file too, then summarize its contents in one sentence. + type: text + role: user + - annotations: [] + content: null + refusal: null + role: assistant + tool_calls: + - function: + arguments: '{"path":"index.txt"}' + name: read_file + id: call_773902313372537881e8bd033b9b4546 + type: function + - content: garden.txt + role: tool + tool_call_id: call_773902313372537881e8bd033b9b4546 + model: global.openai.gpt-5.6-luna + parallel_tool_calls: false + reasoning_effort: none + stream: false + tool_choice: auto + tools: + - function: + description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '908' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /openai/v1/chat/completions + query_params: {} +request_id: 01a1ac2f-a9bc-7963-928c-827849dd00f5 +response: + body: + choices: + - finish_reason: tool_calls + index: 0 + message: + annotations: [] + content: null + refusal: null + role: assistant + tool_calls: + - function: + arguments: '{"path":"garden.txt"}' + name: read_file + id: call_9a637b01109954889f09e3b8592b7833 + type: function + created: 1793890167 + id: chatcmpl-mjl2vx5byltmy7yym2jxwudxnvqsaq3zluexv5uyqkix26ttovcq + model: global.openai.gpt-5.6-luna + object: chat.completion + service_tier: default + system_fingerprint: null + usage: + completion_tokens: 19 + completion_tokens_details: + accepted_prediction_tokens: 0 + audio_tokens: 0 + reasoning_tokens: 0 + rejected_prediction_tokens: 0 + prompt_tokens: 180 + prompt_tokens_details: + audio_tokens: 0 + cache_write_tokens: 0 + cached_tokens: 0 + total_tokens: 199 + body_bytes: !!binary | + eyJjaG9pY2VzIjpbeyJmaW5pc2hfcmVhc29uIjoidG9vbF9jYWxscyIsImluZGV4IjowLCJtZXNz + YWdlIjp7ImFubm90YXRpb25zIjpbXSwiY29udGVudCI6bnVsbCwicmVmdXNhbCI6bnVsbCwicm9s + ZSI6ImFzc2lzdGFudCIsInRvb2xfY2FsbHMiOlt7ImZ1bmN0aW9uIjp7ImFyZ3VtZW50cyI6Intc + InBhdGhcIjpcImdhcmRlbi50eHRcIn0iLCJuYW1lIjoicmVhZF9maWxlIn0sImlkIjoiY2FsbF85 + YTYzN2IwMTEwOTk1NDg4OWYwOWUzYjg1OTJiNzgzMyIsInR5cGUiOiJmdW5jdGlvbiJ9XX19XSwi + Y3JlYXRlZCI6MTc5Mzg5MDE2NywiaWQiOiJjaGF0Y21wbC1tamwydng1YnlsdG15N3l5bTJqeHd1 + ZHhudnFzYXEzemx1ZXh2NXV5cWtpeDI2dHRvdmNxIiwibW9kZWwiOiJnbG9iYWwub3BlbmFpLmdw + dC01LjYtbHVuYSIsIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbiIsInNlcnZpY2VfdGllciI6ImRl + ZmF1bHQiLCJ1c2FnZSI6eyJjb21wbGV0aW9uX3Rva2VucyI6MTksImNvbXBsZXRpb25fdG9rZW5z + X2RldGFpbHMiOnsiYWNjZXB0ZWRfcHJlZGljdGlvbl90b2tlbnMiOjAsImF1ZGlvX3Rva2VucyI6 + MCwicmVhc29uaW5nX3Rva2VucyI6MCwicmVqZWN0ZWRfcHJlZGljdGlvbl90b2tlbnMiOjB9LCJw + cm9tcHRfdG9rZW5zIjoxODAsInByb21wdF90b2tlbnNfZGV0YWlscyI6eyJhdWRpb190b2tlbnMi + OjAsImNhY2hlX3dyaXRlX3Rva2VucyI6MCwiY2FjaGVkX3Rva2VucyI6MH0sInRvdGFsX3Rva2Vu + cyI6MTk5fSwic3lzdGVtX2ZpbmdlcnByaW50IjpudWxsfQ== + headers: + connection: keep-alive + content-length: '775' + content-type: application/json + x-request-id: 039240b6-535e-4caf-bc38-0b0740da2d8a + status_code: 200 +timestamp: '2026-11-05T14:49:27.228145+00:00' +upstream_url: https://bedrock-runtime.ap-southeast-1.amazonaws.com/openai/v1/chat/completions diff --git a/tests/cassettes/upstream_ir/tool_use/bedrock-chat_completions-non_stream-02.yaml b/tests/cassettes/upstream_ir/tool_use/bedrock-chat_completions-non_stream-02.yaml new file mode 100644 index 0000000..6ea6eff --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/bedrock-chat_completions-non_stream-02.yaml @@ -0,0 +1,117 @@ +filename: 2026-11-05-01a1ac2f-acc5-7960-b017-e08ca49d6573 +request: + body: + max_completion_tokens: 512 + messages: + - content: + - text: Read index.txt using read_file. It contains the path of another file. + Read that file too, then summarize its contents in one sentence. + type: text + role: user + - annotations: [] + content: null + refusal: null + role: assistant + tool_calls: + - function: + arguments: '{"path":"index.txt"}' + name: read_file + id: call_773902313372537881e8bd033b9b4546 + type: function + - content: garden.txt + role: tool + tool_call_id: call_773902313372537881e8bd033b9b4546 + - annotations: [] + content: null + refusal: null + role: assistant + tool_calls: + - function: + arguments: '{"path":"garden.txt"}' + name: read_file + id: call_9a637b01109954889f09e3b8592b7833 + type: function + - content: Water the tomatoes every morning and harvest ripe fruit. + role: tool + tool_call_id: call_9a637b01109954889f09e3b8592b7833 + model: global.openai.gpt-5.6-luna + parallel_tool_calls: false + reasoning_effort: none + stream: false + tool_choice: auto + tools: + - function: + description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '1268' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /openai/v1/chat/completions + query_params: {} +request_id: 01a1ac2f-acc5-7960-b017-e08ca49d6573 +response: + body: + choices: + - finish_reason: stop + index: 0 + message: + annotations: [] + content: Water the tomatoes every morning and harvest the ripe fruit. + refusal: null + role: assistant + created: 1793890168 + id: chatcmpl-ti7or4xjtkpf33cj3q75edk6kw6aiimdjywop6pdzs3ydtk52sca + model: global.openai.gpt-5.6-luna + object: chat.completion + service_tier: default + system_fingerprint: null + usage: + completion_tokens: 15 + completion_tokens_details: + accepted_prediction_tokens: 0 + audio_tokens: 0 + reasoning_tokens: 0 + rejected_prediction_tokens: 0 + prompt_tokens: 219 + prompt_tokens_details: + audio_tokens: 0 + cache_write_tokens: 0 + cached_tokens: 0 + total_tokens: 234 + body_bytes: !!binary | + eyJjaG9pY2VzIjpbeyJmaW5pc2hfcmVhc29uIjoic3RvcCIsImluZGV4IjowLCJtZXNzYWdlIjp7 + ImFubm90YXRpb25zIjpbXSwiY29udGVudCI6IldhdGVyIHRoZSB0b21hdG9lcyBldmVyeSBtb3Ju + aW5nIGFuZCBoYXJ2ZXN0IHRoZSByaXBlIGZydWl0LiIsInJlZnVzYWwiOm51bGwsInJvbGUiOiJh + c3Npc3RhbnQifX1dLCJjcmVhdGVkIjoxNzkzODkwMTY4LCJpZCI6ImNoYXRjbXBsLXRpN29yNHhq + dGtwZjMzY2ozcTc1ZWRrNmt3NmFpaW1kanl3b3A2cGR6czN5ZHRrNTJzY2EiLCJtb2RlbCI6Imds + b2JhbC5vcGVuYWkuZ3B0LTUuNi1sdW5hIiwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9uIiwic2Vy + dmljZV90aWVyIjoiZGVmYXVsdCIsInVzYWdlIjp7ImNvbXBsZXRpb25fdG9rZW5zIjoxNSwiY29t + cGxldGlvbl90b2tlbnNfZGV0YWlscyI6eyJhY2NlcHRlZF9wcmVkaWN0aW9uX3Rva2VucyI6MCwi + YXVkaW9fdG9rZW5zIjowLCJyZWFzb25pbmdfdG9rZW5zIjowLCJyZWplY3RlZF9wcmVkaWN0aW9u + X3Rva2VucyI6MH0sInByb21wdF90b2tlbnMiOjIxOSwicHJvbXB0X3Rva2Vuc19kZXRhaWxzIjp7 + ImF1ZGlvX3Rva2VucyI6MCwiY2FjaGVfd3JpdGVfdG9rZW5zIjowLCJjYWNoZWRfdG9rZW5zIjow + fSwidG90YWxfdG9rZW5zIjoyMzR9LCJzeXN0ZW1fZmluZ2VycHJpbnQiOm51bGx9 + headers: + connection: keep-alive + content-length: '675' + content-type: application/json + x-request-id: 9887ee99-142b-4832-9e8f-8996c25779b8 + status_code: 200 +timestamp: '2026-11-05T14:49:28.005757+00:00' +upstream_url: https://bedrock-runtime.ap-southeast-1.amazonaws.com/openai/v1/chat/completions diff --git a/tests/cassettes/upstream_ir/tool_use/bedrock-chat_completions-stream-00.yaml b/tests/cassettes/upstream_ir/tool_use/bedrock-chat_completions-stream-00.yaml new file mode 100644 index 0000000..3c20e34 --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/bedrock-chat_completions-stream-00.yaml @@ -0,0 +1,121 @@ +filename: 2026-11-05-01a1ac2f-9bde-75f0-b071-ffb1c61ea9cb +request: + body: + max_completion_tokens: 512 + messages: + - content: + - text: Read index.txt using read_file. It contains the path of another file. + Read that file too, then summarize its contents in one sentence. + type: text + role: user + model: global.openai.gpt-5.6-luna + parallel_tool_calls: false + reasoning_effort: none + stream: true + stream_options: + include_usage: true + tool_choice: auto + tools: + - function: + description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '634' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /openai/v1/chat/completions + query_params: {} +request_id: 01a1ac2f-9bde-75f0-b071-ffb1c61ea9cb +response: + error_event: false + headers: + connection: keep-alive + content-type: text/event-stream + x-request-id: a398188a-ad5a-43bd-bc5e-e82dce44b90f + sse: + - 'data: {"choices":[{"delta":{"content":"","role":"assistant","refusal":null},"finish_reason":null,"index":0}],"created":1793890164,"id":"chatcmpl-ywd7d2vrp735e4wegtza2mils3lzmg746ball6nj6xn4xnfhfecq","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"tool_calls":[{"function":{"arguments":"","name":"read_file"},"id":"call_4ec5112ac9b6527986ce6d4ff0540948","index":0,"type":"function"}]},"finish_reason":null,"index":0}],"created":1793890164,"id":"chatcmpl-ywd7d2vrp735e4wegtza2mils3lzmg746ball6nj6xn4xnfhfecq","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"tool_calls":[{"function":{"arguments":"{\""},"index":0}]},"finish_reason":null,"index":0}],"created":1793890164,"id":"chatcmpl-ywd7d2vrp735e4wegtza2mils3lzmg746ball6nj6xn4xnfhfecq","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmno"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"tool_calls":[{"function":{"arguments":"path"},"index":0}]},"finish_reason":null,"index":0}],"created":1793890164,"id":"chatcmpl-ywd7d2vrp735e4wegtza2mils3lzmg746ball6nj6xn4xnfhfecq","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQ"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"tool_calls":[{"function":{"arguments":"\":\""},"index":0}]},"finish_reason":null,"index":0}],"created":1793890164,"id":"chatcmpl-ywd7d2vrp735e4wegtza2mils3lzmg746ball6nj6xn4xnfhfecq","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKL"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"tool_calls":[{"function":{"arguments":"index"},"index":0}]},"finish_reason":null,"index":0}],"created":1793890164,"id":"chatcmpl-ywd7d2vrp735e4wegtza2mils3lzmg746ball6nj6xn4xnfhfecq","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRST"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"tool_calls":[{"function":{"arguments":".txt"},"index":0}]},"finish_reason":null,"index":0}],"created":1793890164,"id":"chatcmpl-ywd7d2vrp735e4wegtza2mils3lzmg746ball6nj6xn4xnfhfecq","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNO"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"tool_calls":[{"function":{"arguments":"\"}"},"index":0}]},"finish_reason":null,"index":0}],"created":1793890164,"id":"chatcmpl-ywd7d2vrp735e4wegtza2mils3lzmg746ball6nj6xn4xnfhfecq","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopq"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{},"finish_reason":"tool_calls","index":0}],"created":1793890164,"id":"chatcmpl-ywd7d2vrp735e4wegtza2mils3lzmg746ball6nj6xn4xnfhfecq","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWX"} + + ' + - ' + + ' + - 'data: {"choices":[],"created":1793890164,"id":"chatcmpl-ywd7d2vrp735e4wegtza2mils3lzmg746ball6nj6xn4xnfhfecq","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","usage":{"completion_tokens":19,"completion_tokens_details":{"accepted_prediction_tokens":0,"audio_tokens":0,"reasoning_tokens":0,"rejected_prediction_tokens":0},"prompt_tokens":149,"prompt_tokens_details":{"audio_tokens":0,"cache_write_tokens":0,"cached_tokens":0},"total_tokens":168},"system_fingerprint":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCD"} + + ' + - ' + + ' + - 'data: [DONE] + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: '[DONE]' +timestamp: '2026-11-05T14:49:23.678294+00:00' +upstream_url: https://bedrock-runtime.ap-southeast-1.amazonaws.com/openai/v1/chat/completions diff --git a/tests/cassettes/upstream_ir/tool_use/bedrock-chat_completions-stream-01.yaml b/tests/cassettes/upstream_ir/tool_use/bedrock-chat_completions-stream-01.yaml new file mode 100644 index 0000000..5374aa5 --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/bedrock-chat_completions-stream-01.yaml @@ -0,0 +1,137 @@ +filename: 2026-11-05-01a1ac2f-9ee6-74f1-aee6-c590343d1a2c +request: + body: + max_completion_tokens: 512 + messages: + - content: + - text: Read index.txt using read_file. It contains the path of another file. + Read that file too, then summarize its contents in one sentence. + type: text + role: user + - annotations: null + audio: null + content: '' + function_call: null + refusal: null + role: assistant + tool_calls: + - function: + arguments: '{"path":"index.txt"}' + name: read_file + id: call_4ec5112ac9b6527986ce6d4ff0540948 + index: 0 + type: function + - content: garden.txt + role: tool + tool_call_id: call_4ec5112ac9b6527986ce6d4ff0540948 + model: global.openai.gpt-5.6-luna + parallel_tool_calls: false + reasoning_effort: none + stream: true + stream_options: + include_usage: true + tool_choice: auto + tools: + - function: + description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '991' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /openai/v1/chat/completions + query_params: {} +request_id: 01a1ac2f-9ee6-74f1-aee6-c590343d1a2c +response: + error_event: false + headers: + connection: keep-alive + content-type: text/event-stream + x-request-id: bce97c20-f9cc-490b-9cf2-7719448067e1 + sse: + - 'data: {"choices":[{"delta":{"content":"","role":"assistant","refusal":null},"finish_reason":null,"index":0}],"created":1793890164,"id":"chatcmpl-akcsduzgsyziliskwy5c4w6kh6a5bf5ah27fqu753amgcxzyyoha","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdef"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"tool_calls":[{"function":{"arguments":"","name":"read_file"},"id":"call_e9430643fb64556f86892032ed2c5b41","index":0,"type":"function"}]},"finish_reason":null,"index":0}],"created":1793890164,"id":"chatcmpl-akcsduzgsyziliskwy5c4w6kh6a5bf5ah27fqu753amgcxzyyoha","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghi"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"tool_calls":[{"function":{"arguments":"{\""},"index":0}]},"finish_reason":null,"index":0}],"created":1793890164,"id":"chatcmpl-akcsduzgsyziliskwy5c4w6kh6a5bf5ah27fqu753amgcxzyyoha","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijk"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"tool_calls":[{"function":{"arguments":"path"},"index":0}]},"finish_reason":null,"index":0}],"created":1793890164,"id":"chatcmpl-akcsduzgsyziliskwy5c4w6kh6a5bf5ah27fqu753amgcxzyyoha","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghij"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"tool_calls":[{"function":{"arguments":"\":\""},"index":0}]},"finish_reason":null,"index":0}],"created":1793890164,"id":"chatcmpl-akcsduzgsyziliskwy5c4w6kh6a5bf5ah27fqu753amgcxzyyoha","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWX"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"tool_calls":[{"function":{"arguments":"garden"},"index":0}]},"finish_reason":null,"index":0}],"created":1793890164,"id":"chatcmpl-akcsduzgsyziliskwy5c4w6kh6a5bf5ah27fqu753amgcxzyyoha","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqr"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"tool_calls":[{"function":{"arguments":".txt"},"index":0}]},"finish_reason":null,"index":0}],"created":1793890164,"id":"chatcmpl-akcsduzgsyziliskwy5c4w6kh6a5bf5ah27fqu753amgcxzyyoha","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrs"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"tool_calls":[{"function":{"arguments":"\"}"},"index":0}]},"finish_reason":null,"index":0}],"created":1793890164,"id":"chatcmpl-akcsduzgsyziliskwy5c4w6kh6a5bf5ah27fqu753amgcxzyyoha","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJ"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{},"finish_reason":"tool_calls","index":0}],"created":1793890164,"id":"chatcmpl-akcsduzgsyziliskwy5c4w6kh6a5bf5ah27fqu753amgcxzyyoha","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdef"} + + ' + - ' + + ' + - 'data: {"choices":[],"created":1793890164,"id":"chatcmpl-akcsduzgsyziliskwy5c4w6kh6a5bf5ah27fqu753amgcxzyyoha","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","usage":{"completion_tokens":19,"completion_tokens_details":{"accepted_prediction_tokens":0,"audio_tokens":0,"reasoning_tokens":0,"rejected_prediction_tokens":0},"prompt_tokens":186,"prompt_tokens_details":{"audio_tokens":0,"cache_write_tokens":0,"cached_tokens":0},"total_tokens":205},"system_fingerprint":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKL"} + + ' + - ' + + ' + - 'data: [DONE] + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: '[DONE]' +timestamp: '2026-11-05T14:49:24.454344+00:00' +upstream_url: https://bedrock-runtime.ap-southeast-1.amazonaws.com/openai/v1/chat/completions diff --git a/tests/cassettes/upstream_ir/tool_use/bedrock-chat_completions-stream-02.yaml b/tests/cassettes/upstream_ir/tool_use/bedrock-chat_completions-stream-02.yaml new file mode 100644 index 0000000..7bab9ea --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/bedrock-chat_completions-stream-02.yaml @@ -0,0 +1,201 @@ +filename: 2026-11-05-01a1ac2f-a202-7b02-a09b-80a9e2fad679 +request: + body: + max_completion_tokens: 512 + messages: + - content: + - text: Read index.txt using read_file. It contains the path of another file. + Read that file too, then summarize its contents in one sentence. + type: text + role: user + - annotations: null + audio: null + content: '' + function_call: null + refusal: null + role: assistant + tool_calls: + - function: + arguments: '{"path":"index.txt"}' + name: read_file + id: call_4ec5112ac9b6527986ce6d4ff0540948 + index: 0 + type: function + - content: garden.txt + role: tool + tool_call_id: call_4ec5112ac9b6527986ce6d4ff0540948 + - annotations: null + audio: null + content: '' + function_call: null + refusal: null + role: assistant + tool_calls: + - function: + arguments: '{"path":"garden.txt"}' + name: read_file + id: call_e9430643fb64556f86892032ed2c5b41 + index: 0 + type: function + - content: Water the tomatoes every morning and harvest ripe fruit. + role: tool + tool_call_id: call_e9430643fb64556f86892032ed2c5b41 + model: global.openai.gpt-5.6-luna + parallel_tool_calls: false + reasoning_effort: none + stream: true + stream_options: + include_usage: true + tool_choice: auto + tools: + - function: + description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '1395' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /openai/v1/chat/completions + query_params: {} +request_id: 01a1ac2f-a202-7b02-a09b-80a9e2fad679 +response: + error_event: false + headers: + connection: keep-alive + content-type: text/event-stream + x-request-id: 16a7d27a-e03e-43b2-a6f6-26108af4cb0e + sse: + - 'data: {"choices":[{"delta":{"content":"","role":"assistant","refusal":null},"finish_reason":null,"index":0}],"created":1793890165,"id":"chatcmpl-6q6bt6pwqj34geo3xiz75etgivd42ckrfzai6hbuhysonzhdrpxq","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefgh"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":"The"},"finish_reason":null,"index":0}],"created":1793890165,"id":"chatcmpl-6q6bt6pwqj34geo3xiz75etgivd42ckrfzai6hbuhysonzhdrpxq","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcd"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" file"},"finish_reason":null,"index":0}],"created":1793890165,"id":"chatcmpl-6q6bt6pwqj34geo3xiz75etgivd42ckrfzai6hbuhysonzhdrpxq","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstu"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" says"},"finish_reason":null,"index":0}],"created":1793890165,"id":"chatcmpl-6q6bt6pwqj34geo3xiz75etgivd42ckrfzai6hbuhysonzhdrpxq","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQR"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" to"},"finish_reason":null,"index":0}],"created":1793890165,"id":"chatcmpl-6q6bt6pwqj34geo3xiz75etgivd42ckrfzai6hbuhysonzhdrpxq","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" water"},"finish_reason":null,"index":0}],"created":1793890165,"id":"chatcmpl-6q6bt6pwqj34geo3xiz75etgivd42ckrfzai6hbuhysonzhdrpxq","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstu"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" the"},"finish_reason":null,"index":0}],"created":1793890165,"id":"chatcmpl-6q6bt6pwqj34geo3xiz75etgivd42ckrfzai6hbuhysonzhdrpxq","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWX"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" tomatoes"},"finish_reason":null,"index":0}],"created":1793890165,"id":"chatcmpl-6q6bt6pwqj34geo3xiz75etgivd42ckrfzai6hbuhysonzhdrpxq","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklm"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" every"},"finish_reason":null,"index":0}],"created":1793890165,"id":"chatcmpl-6q6bt6pwqj34geo3xiz75etgivd42ckrfzai6hbuhysonzhdrpxq","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFG"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" morning"},"finish_reason":null,"index":0}],"created":1793890165,"id":"chatcmpl-6q6bt6pwqj34geo3xiz75etgivd42ckrfzai6hbuhysonzhdrpxq","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"ab"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" and"},"finish_reason":null,"index":0}],"created":1793890165,"id":"chatcmpl-6q6bt6pwqj34geo3xiz75etgivd42ckrfzai6hbuhysonzhdrpxq","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEF"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" harvest"},"finish_reason":null,"index":0}],"created":1793890165,"id":"chatcmpl-6q6bt6pwqj34geo3xiz75etgivd42ckrfzai6hbuhysonzhdrpxq","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmno"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" the"},"finish_reason":null,"index":0}],"created":1793890165,"id":"chatcmpl-6q6bt6pwqj34geo3xiz75etgivd42ckrfzai6hbuhysonzhdrpxq","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDE"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" ripe"},"finish_reason":null,"index":0}],"created":1793890165,"id":"chatcmpl-6q6bt6pwqj34geo3xiz75etgivd42ckrfzai6hbuhysonzhdrpxq","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" fruit"},"finish_reason":null,"index":0}],"created":1793890165,"id":"chatcmpl-6q6bt6pwqj34geo3xiz75etgivd42ckrfzai6hbuhysonzhdrpxq","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFG"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":"."},"finish_reason":null,"index":0}],"created":1793890165,"id":"chatcmpl-6q6bt6pwqj34geo3xiz75etgivd42ckrfzai6hbuhysonzhdrpxq","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrst"} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{},"finish_reason":"stop","index":0}],"created":1793890165,"id":"chatcmpl-6q6bt6pwqj34geo3xiz75etgivd42ckrfzai6hbuhysonzhdrpxq","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","system_fingerprint":null,"usage":null,"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXY"} + + ' + - ' + + ' + - 'data: {"choices":[],"created":1793890165,"id":"chatcmpl-6q6bt6pwqj34geo3xiz75etgivd42ckrfzai6hbuhysonzhdrpxq","model":"global.openai.gpt-5.6-luna","object":"chat.completion.chunk","service_tier":"default","usage":{"completion_tokens":19,"completion_tokens_details":{"accepted_prediction_tokens":0,"audio_tokens":0,"reasoning_tokens":0,"rejected_prediction_tokens":0},"prompt_tokens":231,"prompt_tokens_details":{"audio_tokens":0,"cache_write_tokens":0,"cached_tokens":0},"total_tokens":250},"system_fingerprint":null,"obfuscation":"abcdefghijklmnopqrst"} + + ' + - ' + + ' + - 'data: [DONE] + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: '[DONE]' +timestamp: '2026-11-05T14:49:25.250358+00:00' +upstream_url: https://bedrock-runtime.ap-southeast-1.amazonaws.com/openai/v1/chat/completions diff --git a/tests/cassettes/upstream_ir/tool_use/bedrock-responses-non_stream-00.yaml b/tests/cassettes/upstream_ir/tool_use/bedrock-responses-non_stream-00.yaml new file mode 100644 index 0000000..b9809a1 --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/bedrock-responses-non_stream-00.yaml @@ -0,0 +1,148 @@ +filename: 2026-11-05-01a1aab8-faea-7501-b4ab-05661ca5e241 +request: + body: + input: + - content: + - text: Read index.txt using read_file. It contains the path of another file. + Read that file too, then summarize its contents in one sentence. + type: input_text + role: user + max_output_tokens: 1024 + model: global.openai.gpt-5.6-luna + parallel_tool_calls: false + reasoning: + effort: none + store: false + stream: false + tool_choice: auto + tools: + - description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '600' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /openai/v1/responses + query_params: {} +request_id: 01a1aab8-faea-7501-b4ab-05661ca5e241 +response: + body: + background: false + billing: + payer: developer + completed_at: 1793865612 + created_at: 1793865612 + error: null + frequency_penalty: 0.0 + id: resp_o2lhgi3icp3gi2d6bbsjj2orjfs6v6nyx3djaiynvdqjoaw2atva + incomplete_details: null + instructions: null + max_output_tokens: 1024 + max_tool_calls: null + metadata: {} + model: global.openai.gpt-5.6-luna + moderation: null + object: response + output: + - arguments: '{"path":"index.txt"}' + call_id: call_d8cbc14ba1615d1cb00ff5ae0440a064 + id: fc_97193d754f4b5bb5b859e17c66e15fd6 + name: read_file + status: completed + type: function_call + parallel_tool_calls: false + presence_penalty: 0.0 + previous_response_id: null + prompt_cache_key: null + prompt_cache_retention: in_memory + reasoning: + context: all_turns + effort: none + summary: null + safety_identifier: null + service_tier: default + status: completed + store: false + temperature: 1.0 + text: + format: + type: text + verbosity: medium + tool_choice: auto + tools: + - description: Read a file by its path. + name: read_file + output_schema: null + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + top_logprobs: 0 + top_p: 0.98 + truncation: disabled + usage: + input_tokens: 149 + input_tokens_details: + cache_write_tokens: 0 + cached_tokens: 0 + output_tokens: 19 + output_tokens_details: + reasoning_tokens: 0 + total_tokens: 168 + user: null + body_bytes: !!binary | + eyJiYWNrZ3JvdW5kIjpmYWxzZSwiYmlsbGluZyI6eyJwYXllciI6ImRldmVsb3BlciJ9LCJjb21w + bGV0ZWRfYXQiOjE3OTM4NjU2MTIsImNyZWF0ZWRfYXQiOjE3OTM4NjU2MTIsImVycm9yIjpudWxs + LCJmcmVxdWVuY3lfcGVuYWx0eSI6MC4wLCJpZCI6InJlc3BfbzJsaGdpM2ljcDNnaTJkNmJic2pq + Mm9yamZzNnY2bnl4M2RqYWl5bnZkcWpvYXcyYXR2YSIsImluY29tcGxldGVfZGV0YWlscyI6bnVs + bCwiaW5zdHJ1Y3Rpb25zIjpudWxsLCJtYXhfb3V0cHV0X3Rva2VucyI6MTAyNCwibWF4X3Rvb2xf + Y2FsbHMiOm51bGwsIm1ldGFkYXRhIjp7fSwibW9kZWwiOiJnbG9iYWwub3BlbmFpLmdwdC01LjYt + bHVuYSIsIm9iamVjdCI6InJlc3BvbnNlIiwib3V0cHV0IjpbeyJhcmd1bWVudHMiOiJ7XCJwYXRo + XCI6XCJpbmRleC50eHRcIn0iLCJjYWxsX2lkIjoiY2FsbF9kOGNiYzE0YmExNjE1ZDFjYjAwZmY1 + YWUwNDQwYTA2NCIsImlkIjoiZmNfOTcxOTNkNzU0ZjRiNWJiNWI4NTllMTdjNjZlMTVmZDYiLCJu + YW1lIjoicmVhZF9maWxlIiwic3RhdHVzIjoiY29tcGxldGVkIiwidHlwZSI6ImZ1bmN0aW9uX2Nh + bGwifV0sInBhcmFsbGVsX3Rvb2xfY2FsbHMiOmZhbHNlLCJwcmVzZW5jZV9wZW5hbHR5IjowLjAs + InByZXZpb3VzX3Jlc3BvbnNlX2lkIjpudWxsLCJwcm9tcHRfY2FjaGVfa2V5IjpudWxsLCJwcm9t + cHRfY2FjaGVfcmV0ZW50aW9uIjoiaW5fbWVtb3J5IiwicmVhc29uaW5nIjp7InN1bW1hcnkiOm51 + bGwsImVmZm9ydCI6Im5vbmUiLCJjb250ZXh0IjoiYWxsX3R1cm5zIn0sInNhZmV0eV9pZGVudGlm + aWVyIjpudWxsLCJzZXJ2aWNlX3RpZXIiOiJkZWZhdWx0Iiwic3RhdHVzIjoiY29tcGxldGVkIiwi + c3RvcmUiOmZhbHNlLCJ0ZW1wZXJhdHVyZSI6MS4wLCJ0ZXh0Ijp7ImZvcm1hdCI6eyJ0eXBlIjoi + dGV4dCJ9LCJ2ZXJib3NpdHkiOiJtZWRpdW0ifSwidG9vbF9jaG9pY2UiOiJhdXRvIiwidG9vbHMi + Olt7ImRlc2NyaXB0aW9uIjoiUmVhZCBhIGZpbGUgYnkgaXRzIHBhdGguIiwibmFtZSI6InJlYWRf + ZmlsZSIsIm91dHB1dF9zY2hlbWEiOm51bGwsInBhcmFtZXRlcnMiOnsiYWRkaXRpb25hbFByb3Bl + cnRpZXMiOmZhbHNlLCJwcm9wZXJ0aWVzIjp7InBhdGgiOnsidHlwZSI6InN0cmluZyJ9fSwicmVx + dWlyZWQiOlsicGF0aCJdLCJ0eXBlIjoib2JqZWN0In0sInN0cmljdCI6ZmFsc2UsInR5cGUiOiJm + dW5jdGlvbiJ9XSwidG9wX2xvZ3Byb2JzIjowLCJ0b3BfcCI6MC45OCwidHJ1bmNhdGlvbiI6ImRp + c2FibGVkIiwidXNhZ2UiOnsiaW5wdXRfdG9rZW5zIjoxNDksImlucHV0X3Rva2Vuc19kZXRhaWxz + Ijp7ImNhY2hlX3dyaXRlX3Rva2VucyI6MCwiY2FjaGVkX3Rva2VucyI6MH0sIm91dHB1dF90b2tl + bnMiOjE5LCJvdXRwdXRfdG9rZW5zX2RldGFpbHMiOnsicmVhc29uaW5nX3Rva2VucyI6MH0sInRv + dGFsX3Rva2VucyI6MTY4fSwidXNlciI6bnVsbCwibW9kZXJhdGlvbiI6bnVsbH0= + headers: + connection: keep-alive + content-length: '1472' + content-type: application/json + x-request-id: dec5833a-e5b5-4de1-93b9-b424342298ed + status_code: 200 +timestamp: '2026-11-05T08:00:12.010751+00:00' +upstream_url: https://bedrock-runtime.ap-southeast-1.amazonaws.com/openai/v1/responses diff --git a/tests/cassettes/upstream_ir/tool_use/bedrock-responses-non_stream-01.yaml b/tests/cassettes/upstream_ir/tool_use/bedrock-responses-non_stream-01.yaml new file mode 100644 index 0000000..d33100a --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/bedrock-responses-non_stream-01.yaml @@ -0,0 +1,159 @@ +filename: 2026-11-05-01a1aab8-feba-7f22-8cd7-4637f72f5907 +request: + body: + input: + - content: + - text: Read index.txt using read_file. It contains the path of another file. + Read that file too, then summarize its contents in one sentence. + type: input_text + role: user + - arguments: '{"path":"index.txt"}' + call_id: call_d8cbc14ba1615d1cb00ff5ae0440a064 + id: fc_97193d754f4b5bb5b859e17c66e15fd6 + name: read_file + status: completed + type: function_call + - call_id: call_d8cbc14ba1615d1cb00ff5ae0440a064 + output: + - text: garden.txt + type: input_text + type: function_call_output + max_output_tokens: 1024 + model: global.openai.gpt-5.6-luna + parallel_tool_calls: false + reasoning: + effort: none + store: false + stream: false + tool_choice: auto + tools: + - description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '932' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /openai/v1/responses + query_params: {} +request_id: 01a1aab8-feba-7f22-8cd7-4637f72f5907 +response: + body: + background: false + billing: + payer: developer + completed_at: 1793865613 + created_at: 1793865613 + error: null + frequency_penalty: 0.0 + id: resp_h7ynxg3b6hnepi57rhbi473ypgr2uljipxud23hrga2zj7cjevkq + incomplete_details: null + instructions: null + max_output_tokens: 1024 + max_tool_calls: null + metadata: {} + model: global.openai.gpt-5.6-luna + moderation: null + object: response + output: + - arguments: '{"path":"garden.txt"}' + call_id: call_469bebd283a75af8acf30338358f397d + id: fc_6ecc9173dc445e26b71fa574fb4bd957 + name: read_file + status: completed + type: function_call + parallel_tool_calls: false + presence_penalty: 0.0 + previous_response_id: null + prompt_cache_key: null + prompt_cache_retention: in_memory + reasoning: + context: all_turns + effort: none + summary: null + safety_identifier: null + service_tier: default + status: completed + store: false + temperature: 1.0 + text: + format: + type: text + verbosity: medium + tool_choice: auto + tools: + - description: Read a file by its path. + name: read_file + output_schema: null + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + top_logprobs: 0 + top_p: 0.98 + truncation: disabled + usage: + input_tokens: 181 + input_tokens_details: + cache_write_tokens: 0 + cached_tokens: 0 + output_tokens: 19 + output_tokens_details: + reasoning_tokens: 0 + total_tokens: 200 + user: null + body_bytes: !!binary | + eyJiYWNrZ3JvdW5kIjpmYWxzZSwiYmlsbGluZyI6eyJwYXllciI6ImRldmVsb3BlciJ9LCJjb21w + bGV0ZWRfYXQiOjE3OTM4NjU2MTMsImNyZWF0ZWRfYXQiOjE3OTM4NjU2MTMsImVycm9yIjpudWxs + LCJmcmVxdWVuY3lfcGVuYWx0eSI6MC4wLCJpZCI6InJlc3BfaDd5bnhnM2I2aG5lcGk1N3JoYmk0 + NzN5cGdyMnVsamlweHVkMjNocmdhMnpqN2NqZXZrcSIsImluY29tcGxldGVfZGV0YWlscyI6bnVs + bCwiaW5zdHJ1Y3Rpb25zIjpudWxsLCJtYXhfb3V0cHV0X3Rva2VucyI6MTAyNCwibWF4X3Rvb2xf + Y2FsbHMiOm51bGwsIm1ldGFkYXRhIjp7fSwibW9kZWwiOiJnbG9iYWwub3BlbmFpLmdwdC01LjYt + bHVuYSIsIm9iamVjdCI6InJlc3BvbnNlIiwib3V0cHV0IjpbeyJhcmd1bWVudHMiOiJ7XCJwYXRo + XCI6XCJnYXJkZW4udHh0XCJ9IiwiY2FsbF9pZCI6ImNhbGxfNDY5YmViZDI4M2E3NWFmOGFjZjMw + MzM4MzU4ZjM5N2QiLCJpZCI6ImZjXzZlY2M5MTczZGM0NDVlMjZiNzFmYTU3NGZiNGJkOTU3Iiwi + bmFtZSI6InJlYWRfZmlsZSIsInN0YXR1cyI6ImNvbXBsZXRlZCIsInR5cGUiOiJmdW5jdGlvbl9j + YWxsIn1dLCJwYXJhbGxlbF90b29sX2NhbGxzIjpmYWxzZSwicHJlc2VuY2VfcGVuYWx0eSI6MC4w + LCJwcmV2aW91c19yZXNwb25zZV9pZCI6bnVsbCwicHJvbXB0X2NhY2hlX2tleSI6bnVsbCwicHJv + bXB0X2NhY2hlX3JldGVudGlvbiI6ImluX21lbW9yeSIsInJlYXNvbmluZyI6eyJzdW1tYXJ5Ijpu + dWxsLCJlZmZvcnQiOiJub25lIiwiY29udGV4dCI6ImFsbF90dXJucyJ9LCJzYWZldHlfaWRlbnRp + ZmllciI6bnVsbCwic2VydmljZV90aWVyIjoiZGVmYXVsdCIsInN0YXR1cyI6ImNvbXBsZXRlZCIs + InN0b3JlIjpmYWxzZSwidGVtcGVyYXR1cmUiOjEuMCwidGV4dCI6eyJmb3JtYXQiOnsidHlwZSI6 + InRleHQifSwidmVyYm9zaXR5IjoibWVkaXVtIn0sInRvb2xfY2hvaWNlIjoiYXV0byIsInRvb2xz + IjpbeyJkZXNjcmlwdGlvbiI6IlJlYWQgYSBmaWxlIGJ5IGl0cyBwYXRoLiIsIm5hbWUiOiJyZWFk + X2ZpbGUiLCJvdXRwdXRfc2NoZW1hIjpudWxsLCJwYXJhbWV0ZXJzIjp7ImFkZGl0aW9uYWxQcm9w + ZXJ0aWVzIjpmYWxzZSwicHJvcGVydGllcyI6eyJwYXRoIjp7InR5cGUiOiJzdHJpbmcifX0sInJl + cXVpcmVkIjpbInBhdGgiXSwidHlwZSI6Im9iamVjdCJ9LCJzdHJpY3QiOmZhbHNlLCJ0eXBlIjoi + ZnVuY3Rpb24ifV0sInRvcF9sb2dwcm9icyI6MCwidG9wX3AiOjAuOTgsInRydW5jYXRpb24iOiJk + aXNhYmxlZCIsInVzYWdlIjp7ImlucHV0X3Rva2VucyI6MTgxLCJpbnB1dF90b2tlbnNfZGV0YWls + cyI6eyJjYWNoZV93cml0ZV90b2tlbnMiOjAsImNhY2hlZF90b2tlbnMiOjB9LCJvdXRwdXRfdG9r + ZW5zIjoxOSwib3V0cHV0X3Rva2Vuc19kZXRhaWxzIjp7InJlYXNvbmluZ190b2tlbnMiOjB9LCJ0 + b3RhbF90b2tlbnMiOjIwMH0sInVzZXIiOm51bGwsIm1vZGVyYXRpb24iOm51bGx9 + headers: + connection: keep-alive + content-length: '1473' + content-type: application/json + x-request-id: 6d8f6132-aae6-494c-9a06-f0b8b91a3717 + status_code: 200 +timestamp: '2026-11-05T08:00:12.987009+00:00' +upstream_url: https://bedrock-runtime.ap-southeast-1.amazonaws.com/openai/v1/responses diff --git a/tests/cassettes/upstream_ir/tool_use/bedrock-responses-non_stream-02.yaml b/tests/cassettes/upstream_ir/tool_use/bedrock-responses-non_stream-02.yaml new file mode 100644 index 0000000..332b84b --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/bedrock-responses-non_stream-02.yaml @@ -0,0 +1,175 @@ +filename: 2026-11-05-01a1aab9-0245-7e13-9b33-dfdc8dd65069 +request: + body: + input: + - content: + - text: Read index.txt using read_file. It contains the path of another file. + Read that file too, then summarize its contents in one sentence. + type: input_text + role: user + - arguments: '{"path":"index.txt"}' + call_id: call_d8cbc14ba1615d1cb00ff5ae0440a064 + id: fc_97193d754f4b5bb5b859e17c66e15fd6 + name: read_file + status: completed + type: function_call + - call_id: call_d8cbc14ba1615d1cb00ff5ae0440a064 + output: + - text: garden.txt + type: input_text + type: function_call_output + - arguments: '{"path":"garden.txt"}' + call_id: call_469bebd283a75af8acf30338358f397d + id: fc_6ecc9173dc445e26b71fa574fb4bd957 + name: read_file + status: completed + type: function_call + - call_id: call_469bebd283a75af8acf30338358f397d + output: + - text: Water the tomatoes every morning and harvest ripe fruit. + type: input_text + type: function_call_output + max_output_tokens: 1024 + model: global.openai.gpt-5.6-luna + parallel_tool_calls: false + reasoning: + effort: none + store: false + stream: false + tool_choice: auto + tools: + - description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '1311' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /openai/v1/responses + query_params: {} +request_id: 01a1aab9-0245-7e13-9b33-dfdc8dd65069 +response: + body: + background: false + billing: + payer: developer + completed_at: 1793865614 + created_at: 1793865614 + error: null + frequency_penalty: 0.0 + id: resp_vzttezwexrtaxb4nfvyymp2wpk22nfua4ayge4wytrmxcmy3y2ka + incomplete_details: null + instructions: null + max_output_tokens: 1024 + max_tool_calls: null + metadata: {} + model: global.openai.gpt-5.6-luna + moderation: null + object: response + output: + - content: + - annotations: [] + logprobs: [] + text: Water the tomatoes every morning and harvest ripe fruit. + type: output_text + id: msg_377e2b3c3cef5ef19ffccf7854c7839b + phase: final_answer + role: assistant + status: completed + type: message + parallel_tool_calls: false + presence_penalty: 0.0 + previous_response_id: null + prompt_cache_key: null + prompt_cache_retention: in_memory + reasoning: + context: all_turns + effort: none + summary: null + safety_identifier: null + service_tier: default + status: completed + store: false + temperature: 1.0 + text: + format: + type: text + verbosity: medium + tool_choice: auto + tools: + - description: Read a file by its path. + name: read_file + output_schema: null + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + top_logprobs: 0 + top_p: 0.98 + truncation: disabled + usage: + input_tokens: 221 + input_tokens_details: + cache_write_tokens: 0 + cached_tokens: 0 + output_tokens: 14 + output_tokens_details: + reasoning_tokens: 0 + total_tokens: 235 + user: null + body_bytes: !!binary | + eyJiYWNrZ3JvdW5kIjpmYWxzZSwiYmlsbGluZyI6eyJwYXllciI6ImRldmVsb3BlciJ9LCJjb21w + bGV0ZWRfYXQiOjE3OTM4NjU2MTQsImNyZWF0ZWRfYXQiOjE3OTM4NjU2MTQsImVycm9yIjpudWxs + LCJmcmVxdWVuY3lfcGVuYWx0eSI6MC4wLCJpZCI6InJlc3Bfdnp0dGV6d2V4cnRheGI0bmZ2eXlt + cDJ3cGsyMm5mdWE0YXlnZTR3eXRybXhjbXkzeTJrYSIsImluY29tcGxldGVfZGV0YWlscyI6bnVs + bCwiaW5zdHJ1Y3Rpb25zIjpudWxsLCJtYXhfb3V0cHV0X3Rva2VucyI6MTAyNCwibWF4X3Rvb2xf + Y2FsbHMiOm51bGwsIm1ldGFkYXRhIjp7fSwibW9kZWwiOiJnbG9iYWwub3BlbmFpLmdwdC01LjYt + bHVuYSIsIm9iamVjdCI6InJlc3BvbnNlIiwib3V0cHV0IjpbeyJjb250ZW50IjpbeyJhbm5vdGF0 + aW9ucyI6W10sImxvZ3Byb2JzIjpbXSwidGV4dCI6IldhdGVyIHRoZSB0b21hdG9lcyBldmVyeSBt + b3JuaW5nIGFuZCBoYXJ2ZXN0IHJpcGUgZnJ1aXQuIiwidHlwZSI6Im91dHB1dF90ZXh0In1dLCJp + ZCI6Im1zZ18zNzdlMmIzYzNjZWY1ZWYxOWZmY2NmNzg1NGM3ODM5YiIsInBoYXNlIjoiZmluYWxf + YW5zd2VyIiwicm9sZSI6ImFzc2lzdGFudCIsInN0YXR1cyI6ImNvbXBsZXRlZCIsInR5cGUiOiJt + ZXNzYWdlIn1dLCJwYXJhbGxlbF90b29sX2NhbGxzIjpmYWxzZSwicHJlc2VuY2VfcGVuYWx0eSI6 + MC4wLCJwcmV2aW91c19yZXNwb25zZV9pZCI6bnVsbCwicHJvbXB0X2NhY2hlX2tleSI6bnVsbCwi + cHJvbXB0X2NhY2hlX3JldGVudGlvbiI6ImluX21lbW9yeSIsInJlYXNvbmluZyI6eyJzdW1tYXJ5 + IjpudWxsLCJlZmZvcnQiOiJub25lIiwiY29udGV4dCI6ImFsbF90dXJucyJ9LCJzYWZldHlfaWRl + bnRpZmllciI6bnVsbCwic2VydmljZV90aWVyIjoiZGVmYXVsdCIsInN0YXR1cyI6ImNvbXBsZXRl + ZCIsInN0b3JlIjpmYWxzZSwidGVtcGVyYXR1cmUiOjEuMCwidGV4dCI6eyJmb3JtYXQiOnsidHlw + ZSI6InRleHQifSwidmVyYm9zaXR5IjoibWVkaXVtIn0sInRvb2xfY2hvaWNlIjoiYXV0byIsInRv + b2xzIjpbeyJkZXNjcmlwdGlvbiI6IlJlYWQgYSBmaWxlIGJ5IGl0cyBwYXRoLiIsIm5hbWUiOiJy + ZWFkX2ZpbGUiLCJvdXRwdXRfc2NoZW1hIjpudWxsLCJwYXJhbWV0ZXJzIjp7ImFkZGl0aW9uYWxQ + cm9wZXJ0aWVzIjpmYWxzZSwicHJvcGVydGllcyI6eyJwYXRoIjp7InR5cGUiOiJzdHJpbmcifX0s + InJlcXVpcmVkIjpbInBhdGgiXSwidHlwZSI6Im9iamVjdCJ9LCJzdHJpY3QiOmZhbHNlLCJ0eXBl + IjoiZnVuY3Rpb24ifV0sInRvcF9sb2dwcm9icyI6MCwidG9wX3AiOjAuOTgsInRydW5jYXRpb24i + OiJkaXNhYmxlZCIsInVzYWdlIjp7ImlucHV0X3Rva2VucyI6MjIxLCJpbnB1dF90b2tlbnNfZGV0 + YWlscyI6eyJjYWNoZV93cml0ZV90b2tlbnMiOjAsImNhY2hlZF90b2tlbnMiOjB9LCJvdXRwdXRf + dG9rZW5zIjoxNCwib3V0cHV0X3Rva2Vuc19kZXRhaWxzIjp7InJlYXNvbmluZ190b2tlbnMiOjB9 + LCJ0b3RhbF90b2tlbnMiOjIzNX0sInVzZXIiOm51bGwsIm1vZGVyYXRpb24iOm51bGx9 + headers: + connection: keep-alive + content-length: '1533' + content-type: application/json + x-request-id: cec737a5-3d2c-4ebd-a386-a7d51eda1f5d + status_code: 200 +timestamp: '2026-11-05T08:00:13.893057+00:00' +upstream_url: https://bedrock-runtime.ap-southeast-1.amazonaws.com/openai/v1/responses diff --git a/tests/cassettes/upstream_ir/tool_use/bedrock-responses-stream-00.yaml b/tests/cassettes/upstream_ir/tool_use/bedrock-responses-stream-00.yaml new file mode 100644 index 0000000..eaad92e --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/bedrock-responses-stream-00.yaml @@ -0,0 +1,135 @@ +filename: 2026-11-05-01a1aab8-efb2-7fd3-acd6-bf2ca1c479a4 +request: + body: + input: + - content: + - text: Read index.txt using read_file. It contains the path of another file. + Read that file too, then summarize its contents in one sentence. + type: input_text + role: user + max_output_tokens: 1024 + model: global.openai.gpt-5.6-luna + parallel_tool_calls: false + reasoning: + effort: none + store: false + stream: true + tool_choice: auto + tools: + - description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '599' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /openai/v1/responses + query_params: {} +request_id: 01a1aab8-efb2-7fd3-acd6-bf2ca1c479a4 +response: + error_event: false + headers: + connection: keep-alive + content-type: text/event-stream + x-request-id: 13855726-3e73-4e13-a15e-cff3576cbf4c + sse: + - 'data: {"response":{"background":false,"completed_at":null,"created_at":1793865609,"error":null,"frequency_penalty":0.0,"id":"resp_655qwwnojkpejgvpgs2f5d2tmroenlsy2tvndmyki4lzpok2wllq","incomplete_details":null,"instructions":null,"max_output_tokens":1024,"max_tool_calls":null,"metadata":{},"model":"global.openai.gpt-5.6-luna","object":"response","output":[],"parallel_tool_calls":false,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"summary":null,"effort":"none","context":"all_turns"},"safety_identifier":null,"service_tier":"auto","status":"in_progress","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[{"description":"Read + a file by its path.","name":"read_file","output_schema":null,"parameters":{"additionalProperties":false,"properties":{"path":{"type":"string"}},"required":["path"],"type":"object"},"strict":false,"type":"function"}],"top_logprobs":0,"top_p":0.98,"truncation":"disabled","usage":null,"user":null,"moderation":null},"sequence_number":0,"type":"response.created"} + + ' + - ' + + ' + - 'data: {"response":{"background":false,"completed_at":null,"created_at":1793865609,"error":null,"frequency_penalty":0.0,"id":"resp_655qwwnojkpejgvpgs2f5d2tmroenlsy2tvndmyki4lzpok2wllq","incomplete_details":null,"instructions":null,"max_output_tokens":1024,"max_tool_calls":null,"metadata":{},"model":"global.openai.gpt-5.6-luna","object":"response","output":[],"parallel_tool_calls":false,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"summary":null,"effort":"none","context":"all_turns"},"safety_identifier":null,"service_tier":"auto","status":"in_progress","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[{"description":"Read + a file by its path.","name":"read_file","output_schema":null,"parameters":{"additionalProperties":false,"properties":{"path":{"type":"string"}},"required":["path"],"type":"object"},"strict":false,"type":"function"}],"top_logprobs":0,"top_p":0.98,"truncation":"disabled","usage":null,"user":null,"moderation":null},"sequence_number":1,"type":"response.in_progress"} + + ' + - ' + + ' + - 'data: {"item":{"arguments":"","call_id":"call_c80a312cdcb9565ba95378477b5a66cc","id":"fc_952eccd443bc551ea316b2dfc89f16af","name":"read_file","status":"in_progress","type":"function_call"},"output_index":0,"sequence_number":2,"type":"response.output_item.added"} + + ' + - ' + + ' + - 'data: {"delta":"{\"","item_id":"fc_952eccd443bc551ea316b2dfc89f16af","obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123","output_index":0,"sequence_number":3,"type":"response.function_call_arguments.delta"} + + ' + - ' + + ' + - 'data: {"delta":"path","item_id":"fc_952eccd443bc551ea316b2dfc89f16af","obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012345","output_index":0,"sequence_number":4,"type":"response.function_call_arguments.delta"} + + ' + - ' + + ' + - 'data: {"delta":"\":\"","item_id":"fc_952eccd443bc551ea316b2dfc89f16af","obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN","output_index":0,"sequence_number":5,"type":"response.function_call_arguments.delta"} + + ' + - ' + + ' + - 'data: {"delta":"index","item_id":"fc_952eccd443bc551ea316b2dfc89f16af","obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJK","output_index":0,"sequence_number":6,"type":"response.function_call_arguments.delta"} + + ' + - ' + + ' + - 'data: {"delta":".txt","item_id":"fc_952eccd443bc551ea316b2dfc89f16af","obfuscation":"abcdefghijklmnopqrstuvwxyz","output_index":0,"sequence_number":7,"type":"response.function_call_arguments.delta"} + + ' + - ' + + ' + - 'data: {"delta":"\"}","item_id":"fc_952eccd443bc551ea316b2dfc89f16af","obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567","output_index":0,"sequence_number":8,"type":"response.function_call_arguments.delta"} + + ' + - ' + + ' + - 'data: {"arguments":"{\"path\":\"index.txt\"}","item_id":"fc_952eccd443bc551ea316b2dfc89f16af","output_index":0,"sequence_number":9,"type":"response.function_call_arguments.done"} + + ' + - ' + + ' + - 'data: {"item":{"arguments":"{\"path\":\"index.txt\"}","call_id":"call_c80a312cdcb9565ba95378477b5a66cc","id":"fc_952eccd443bc551ea316b2dfc89f16af","name":"read_file","status":"completed","type":"function_call"},"output_index":0,"sequence_number":10,"type":"response.output_item.done"} + + ' + - ' + + ' + - 'data: {"response":{"background":false,"completed_at":1793865609,"created_at":1793865609,"error":null,"frequency_penalty":0.0,"id":"resp_655qwwnojkpejgvpgs2f5d2tmroenlsy2tvndmyki4lzpok2wllq","incomplete_details":null,"instructions":null,"max_output_tokens":1024,"max_tool_calls":null,"metadata":{},"model":"global.openai.gpt-5.6-luna","object":"response","output":[{"arguments":"{\"path\":\"index.txt\"}","call_id":"call_c80a312cdcb9565ba95378477b5a66cc","id":"fc_952eccd443bc551ea316b2dfc89f16af","name":"read_file","status":"completed","type":"function_call"}],"parallel_tool_calls":false,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"summary":null,"effort":"none","context":"all_turns"},"safety_identifier":null,"service_tier":"default","status":"completed","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[{"description":"Read + a file by its path.","name":"read_file","output_schema":null,"parameters":{"additionalProperties":false,"properties":{"path":{"type":"string"}},"required":["path"],"type":"object"},"strict":false,"type":"function"}],"top_logprobs":0,"top_p":0.98,"truncation":"disabled","usage":{"input_tokens":149,"input_tokens_details":{"cache_write_tokens":0,"cached_tokens":0},"output_tokens":19,"output_tokens_details":{"reasoning_tokens":0},"total_tokens":168},"user":null,"moderation":null},"sequence_number":11,"type":"response.completed"} + + ' + - ' + + ' + - 'data: [DONE] + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: '[DONE]' +timestamp: '2026-11-05T08:00:09.138339+00:00' +upstream_url: https://bedrock-runtime.ap-southeast-1.amazonaws.com/openai/v1/responses diff --git a/tests/cassettes/upstream_ir/tool_use/bedrock-responses-stream-01.yaml b/tests/cassettes/upstream_ir/tool_use/bedrock-responses-stream-01.yaml new file mode 100644 index 0000000..26e0c34 --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/bedrock-responses-stream-01.yaml @@ -0,0 +1,146 @@ +filename: 2026-11-05-01a1aab8-f354-77e0-ba3b-bb78b5ed058e +request: + body: + input: + - content: + - text: Read index.txt using read_file. It contains the path of another file. + Read that file too, then summarize its contents in one sentence. + type: input_text + role: user + - arguments: '{"path":"index.txt"}' + call_id: call_c80a312cdcb9565ba95378477b5a66cc + id: fc_952eccd443bc551ea316b2dfc89f16af + name: read_file + status: completed + type: function_call + - call_id: call_c80a312cdcb9565ba95378477b5a66cc + output: + - text: garden.txt + type: input_text + type: function_call_output + max_output_tokens: 1024 + model: global.openai.gpt-5.6-luna + parallel_tool_calls: false + reasoning: + effort: none + store: false + stream: true + tool_choice: auto + tools: + - description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '931' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /openai/v1/responses + query_params: {} +request_id: 01a1aab8-f354-77e0-ba3b-bb78b5ed058e +response: + error_event: false + headers: + connection: keep-alive + content-type: text/event-stream + x-request-id: 9b1c2ad4-057a-4130-a960-b3e3f53f25cb + sse: + - 'data: {"response":{"background":false,"completed_at":null,"created_at":1793865610,"error":null,"frequency_penalty":0.0,"id":"resp_nukjjaf42tep7ovkqftyottixuqnxxax4p7weuu5b43cmytp725q","incomplete_details":null,"instructions":null,"max_output_tokens":1024,"max_tool_calls":null,"metadata":{},"model":"global.openai.gpt-5.6-luna","object":"response","output":[],"parallel_tool_calls":false,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"summary":null,"effort":"none","context":"all_turns"},"safety_identifier":null,"service_tier":"auto","status":"in_progress","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[{"description":"Read + a file by its path.","name":"read_file","output_schema":null,"parameters":{"additionalProperties":false,"properties":{"path":{"type":"string"}},"required":["path"],"type":"object"},"strict":false,"type":"function"}],"top_logprobs":0,"top_p":0.98,"truncation":"disabled","usage":null,"user":null,"moderation":null},"sequence_number":0,"type":"response.created"} + + ' + - ' + + ' + - 'data: {"response":{"background":false,"completed_at":null,"created_at":1793865610,"error":null,"frequency_penalty":0.0,"id":"resp_nukjjaf42tep7ovkqftyottixuqnxxax4p7weuu5b43cmytp725q","incomplete_details":null,"instructions":null,"max_output_tokens":1024,"max_tool_calls":null,"metadata":{},"model":"global.openai.gpt-5.6-luna","object":"response","output":[],"parallel_tool_calls":false,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"summary":null,"effort":"none","context":"all_turns"},"safety_identifier":null,"service_tier":"auto","status":"in_progress","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[{"description":"Read + a file by its path.","name":"read_file","output_schema":null,"parameters":{"additionalProperties":false,"properties":{"path":{"type":"string"}},"required":["path"],"type":"object"},"strict":false,"type":"function"}],"top_logprobs":0,"top_p":0.98,"truncation":"disabled","usage":null,"user":null,"moderation":null},"sequence_number":1,"type":"response.in_progress"} + + ' + - ' + + ' + - 'data: {"item":{"arguments":"","call_id":"call_832dd15bb178544bbaf5f59cb6c66241","id":"fc_cabb51fd142754369edc77b439734db5","name":"read_file","status":"in_progress","type":"function_call"},"output_index":0,"sequence_number":2,"type":"response.output_item.added"} + + ' + - ' + + ' + - 'data: {"delta":"{\"","item_id":"fc_cabb51fd142754369edc77b439734db5","obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQR","output_index":0,"sequence_number":3,"type":"response.function_call_arguments.delta"} + + ' + - ' + + ' + - 'data: {"delta":"path","item_id":"fc_cabb51fd142754369edc77b439734db5","obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01","output_index":0,"sequence_number":4,"type":"response.function_call_arguments.delta"} + + ' + - ' + + ' + - 'data: {"delta":"\":\"","item_id":"fc_cabb51fd142754369edc77b439734db5","obfuscation":"abcdefghijklmnopqrstuvwxy","output_index":0,"sequence_number":5,"type":"response.function_call_arguments.delta"} + + ' + - ' + + ' + - 'data: {"delta":"garden","item_id":"fc_cabb51fd142754369edc77b439734db5","obfuscation":"abcdefghijklmn","output_index":0,"sequence_number":6,"type":"response.function_call_arguments.delta"} + + ' + - ' + + ' + - 'data: {"delta":".txt","item_id":"fc_cabb51fd142754369edc77b439734db5","obfuscation":"abcdefghijklmnopqrstuvwxyzABCD","output_index":0,"sequence_number":7,"type":"response.function_call_arguments.delta"} + + ' + - ' + + ' + - 'data: {"delta":"\"}","item_id":"fc_cabb51fd142754369edc77b439734db5","obfuscation":"abcdef","output_index":0,"sequence_number":8,"type":"response.function_call_arguments.delta"} + + ' + - ' + + ' + - 'data: {"arguments":"{\"path\":\"garden.txt\"}","item_id":"fc_cabb51fd142754369edc77b439734db5","output_index":0,"sequence_number":9,"type":"response.function_call_arguments.done"} + + ' + - ' + + ' + - 'data: {"item":{"arguments":"{\"path\":\"garden.txt\"}","call_id":"call_832dd15bb178544bbaf5f59cb6c66241","id":"fc_cabb51fd142754369edc77b439734db5","name":"read_file","status":"completed","type":"function_call"},"output_index":0,"sequence_number":10,"type":"response.output_item.done"} + + ' + - ' + + ' + - 'data: {"response":{"background":false,"completed_at":1793865611,"created_at":1793865610,"error":null,"frequency_penalty":0.0,"id":"resp_nukjjaf42tep7ovkqftyottixuqnxxax4p7weuu5b43cmytp725q","incomplete_details":null,"instructions":null,"max_output_tokens":1024,"max_tool_calls":null,"metadata":{},"model":"global.openai.gpt-5.6-luna","object":"response","output":[{"arguments":"{\"path\":\"garden.txt\"}","call_id":"call_832dd15bb178544bbaf5f59cb6c66241","id":"fc_cabb51fd142754369edc77b439734db5","name":"read_file","status":"completed","type":"function_call"}],"parallel_tool_calls":false,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"summary":null,"effort":"none","context":"all_turns"},"safety_identifier":null,"service_tier":"default","status":"completed","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[{"description":"Read + a file by its path.","name":"read_file","output_schema":null,"parameters":{"additionalProperties":false,"properties":{"path":{"type":"string"}},"required":["path"],"type":"object"},"strict":false,"type":"function"}],"top_logprobs":0,"top_p":0.98,"truncation":"disabled","usage":{"input_tokens":181,"input_tokens_details":{"cache_write_tokens":0,"cached_tokens":0},"output_tokens":19,"output_tokens_details":{"reasoning_tokens":0},"total_tokens":200},"user":null,"moderation":null},"sequence_number":11,"type":"response.completed"} + + ' + - ' + + ' + - 'data: [DONE] + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: '[DONE]' +timestamp: '2026-11-05T08:00:10.068955+00:00' +upstream_url: https://bedrock-runtime.ap-southeast-1.amazonaws.com/openai/v1/responses diff --git a/tests/cassettes/upstream_ir/tool_use/bedrock-responses-stream-02.yaml b/tests/cassettes/upstream_ir/tool_use/bedrock-responses-stream-02.yaml new file mode 100644 index 0000000..f655fed --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/bedrock-responses-stream-02.yaml @@ -0,0 +1,197 @@ +filename: 2026-11-05-01a1aab8-f7a9-7140-ba69-93624ea286ab +request: + body: + input: + - content: + - text: Read index.txt using read_file. It contains the path of another file. + Read that file too, then summarize its contents in one sentence. + type: input_text + role: user + - arguments: '{"path":"index.txt"}' + call_id: call_c80a312cdcb9565ba95378477b5a66cc + id: fc_952eccd443bc551ea316b2dfc89f16af + name: read_file + status: completed + type: function_call + - call_id: call_c80a312cdcb9565ba95378477b5a66cc + output: + - text: garden.txt + type: input_text + type: function_call_output + - arguments: '{"path":"garden.txt"}' + call_id: call_832dd15bb178544bbaf5f59cb6c66241 + id: fc_cabb51fd142754369edc77b439734db5 + name: read_file + status: completed + type: function_call + - call_id: call_832dd15bb178544bbaf5f59cb6c66241 + output: + - text: Water the tomatoes every morning and harvest ripe fruit. + type: input_text + type: function_call_output + max_output_tokens: 1024 + model: global.openai.gpt-5.6-luna + parallel_tool_calls: false + reasoning: + effort: none + store: false + stream: true + tool_choice: auto + tools: + - description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '1310' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /openai/v1/responses + query_params: {} +request_id: 01a1aab8-f7a9-7140-ba69-93624ea286ab +response: + error_event: false + headers: + connection: keep-alive + content-type: text/event-stream + x-request-id: d79dad9a-9a51-40da-b844-ba3aaf1aff0c + sse: + - 'data: {"response":{"background":false,"completed_at":null,"created_at":1793865611,"error":null,"frequency_penalty":0.0,"id":"resp_jdxo56t7dvjd4rto2ebrnpapecby25y3vu4y5uvd377g4lk24dgq","incomplete_details":null,"instructions":null,"max_output_tokens":1024,"max_tool_calls":null,"metadata":{},"model":"global.openai.gpt-5.6-luna","object":"response","output":[],"parallel_tool_calls":false,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"summary":null,"effort":"none","context":"all_turns"},"safety_identifier":null,"service_tier":"auto","status":"in_progress","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[{"description":"Read + a file by its path.","name":"read_file","output_schema":null,"parameters":{"additionalProperties":false,"properties":{"path":{"type":"string"}},"required":["path"],"type":"object"},"strict":false,"type":"function"}],"top_logprobs":0,"top_p":0.98,"truncation":"disabled","usage":null,"user":null,"moderation":null},"sequence_number":0,"type":"response.created"} + + ' + - ' + + ' + - 'data: {"response":{"background":false,"completed_at":null,"created_at":1793865611,"error":null,"frequency_penalty":0.0,"id":"resp_jdxo56t7dvjd4rto2ebrnpapecby25y3vu4y5uvd377g4lk24dgq","incomplete_details":null,"instructions":null,"max_output_tokens":1024,"max_tool_calls":null,"metadata":{},"model":"global.openai.gpt-5.6-luna","object":"response","output":[],"parallel_tool_calls":false,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"summary":null,"effort":"none","context":"all_turns"},"safety_identifier":null,"service_tier":"auto","status":"in_progress","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[{"description":"Read + a file by its path.","name":"read_file","output_schema":null,"parameters":{"additionalProperties":false,"properties":{"path":{"type":"string"}},"required":["path"],"type":"object"},"strict":false,"type":"function"}],"top_logprobs":0,"top_p":0.98,"truncation":"disabled","usage":null,"user":null,"moderation":null},"sequence_number":1,"type":"response.in_progress"} + + ' + - ' + + ' + - 'data: {"item":{"content":[],"id":"msg_b97e18ab57da56d89a6008b7604beea8","phase":"final_answer","role":"assistant","status":"in_progress","type":"message"},"output_index":0,"sequence_number":2,"type":"response.output_item.added"} + + ' + - ' + + ' + - 'data: {"content_index":0,"item_id":"msg_b97e18ab57da56d89a6008b7604beea8","output_index":0,"part":{"annotations":[],"logprobs":[],"text":"","type":"output_text"},"sequence_number":3,"type":"response.content_part.added"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":"Water","item_id":"msg_b97e18ab57da56d89a6008b7604beea8","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDE","output_index":0,"sequence_number":4,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" the","item_id":"msg_b97e18ab57da56d89a6008b7604beea8","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJ","output_index":0,"sequence_number":5,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" tomatoes","item_id":"msg_b97e18ab57da56d89a6008b7604beea8","logprobs":[],"obfuscation":"abcdefgh","output_index":0,"sequence_number":6,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" every","item_id":"msg_b97e18ab57da56d89a6008b7604beea8","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDE","output_index":0,"sequence_number":7,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" morning","item_id":"msg_b97e18ab57da56d89a6008b7604beea8","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXY","output_index":0,"sequence_number":8,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" and","item_id":"msg_b97e18ab57da56d89a6008b7604beea8","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNO","output_index":0,"sequence_number":9,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" harvest","item_id":"msg_b97e18ab57da56d89a6008b7604beea8","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012","output_index":0,"sequence_number":10,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" ripe","item_id":"msg_b97e18ab57da56d89a6008b7604beea8","logprobs":[],"obfuscation":"abcdefghijk","output_index":0,"sequence_number":11,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":" fruit","item_id":"msg_b97e18ab57da56d89a6008b7604beea8","logprobs":[],"obfuscation":"abcdefghijklm","output_index":0,"sequence_number":12,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"delta":".","item_id":"msg_b97e18ab57da56d89a6008b7604beea8","logprobs":[],"obfuscation":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTU","output_index":0,"sequence_number":13,"type":"response.output_text.delta"} + + ' + - ' + + ' + - 'data: {"content_index":0,"item_id":"msg_b97e18ab57da56d89a6008b7604beea8","logprobs":[],"output_index":0,"sequence_number":14,"text":"Water + the tomatoes every morning and harvest ripe fruit.","type":"response.output_text.done"} + + ' + - ' + + ' + - 'data: {"content_index":0,"item_id":"msg_b97e18ab57da56d89a6008b7604beea8","output_index":0,"part":{"annotations":[],"logprobs":[],"text":"Water + the tomatoes every morning and harvest ripe fruit.","type":"output_text"},"sequence_number":15,"type":"response.content_part.done"} + + ' + - ' + + ' + - 'data: {"item":{"content":[{"annotations":[],"logprobs":[],"text":"Water the tomatoes + every morning and harvest ripe fruit.","type":"output_text"}],"id":"msg_b97e18ab57da56d89a6008b7604beea8","phase":"final_answer","role":"assistant","status":"completed","type":"message"},"output_index":0,"sequence_number":16,"type":"response.output_item.done"} + + ' + - ' + + ' + - 'data: {"response":{"background":false,"completed_at":1793865611,"created_at":1793865611,"error":null,"frequency_penalty":0.0,"id":"resp_jdxo56t7dvjd4rto2ebrnpapecby25y3vu4y5uvd377g4lk24dgq","incomplete_details":null,"instructions":null,"max_output_tokens":1024,"max_tool_calls":null,"metadata":{},"model":"global.openai.gpt-5.6-luna","object":"response","output":[{"content":[{"annotations":[],"logprobs":[],"text":"Water + the tomatoes every morning and harvest ripe fruit.","type":"output_text"}],"id":"msg_b97e18ab57da56d89a6008b7604beea8","phase":"final_answer","role":"assistant","status":"completed","type":"message"}],"parallel_tool_calls":false,"presence_penalty":0.0,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":"in_memory","reasoning":{"summary":null,"effort":"none","context":"all_turns"},"safety_identifier":null,"service_tier":"default","status":"completed","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[{"description":"Read + a file by its path.","name":"read_file","output_schema":null,"parameters":{"additionalProperties":false,"properties":{"path":{"type":"string"}},"required":["path"],"type":"object"},"strict":false,"type":"function"}],"top_logprobs":0,"top_p":0.98,"truncation":"disabled","usage":{"input_tokens":221,"input_tokens_details":{"cache_write_tokens":0,"cached_tokens":0},"output_tokens":14,"output_tokens_details":{"reasoning_tokens":0},"total_tokens":235},"user":null,"moderation":null},"sequence_number":17,"type":"response.completed"} + + ' + - ' + + ' + - 'data: [DONE] + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: '[DONE]' +timestamp: '2026-11-05T08:00:11.177722+00:00' +upstream_url: https://bedrock-runtime.ap-southeast-1.amazonaws.com/openai/v1/responses diff --git a/tests/cassettes/upstream_ir/tool_use/fireworks-chat_completions-non_stream-00.yaml b/tests/cassettes/upstream_ir/tool_use/fireworks-chat_completions-non_stream-00.yaml new file mode 100644 index 0000000..10b22b9 --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/fireworks-chat_completions-non_stream-00.yaml @@ -0,0 +1,93 @@ +filename: 2026-11-05-01a1ac2f-c79c-78c0-b1e7-7c1abd0135c3 +request: + body: + max_completion_tokens: 1024 + messages: + - content: + - text: Read index.txt using read_file. It contains the path of another file. + Read that file too, then summarize its contents in one sentence. + type: text + role: user + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + parallel_tool_calls: false + reasoning_effort: none + stream: false + tool_choice: auto + tools: + - function: + description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '626' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /inference/v1/chat/completions + query_params: {} +request_id: 01a1ac2f-c79c-78c0-b1e7-7c1abd0135c3 +response: + body: + choices: + - finish_reason: tool_calls + index: 0 + message: + content: '' + role: assistant + tool_calls: + - function: + arguments: '{"path": "index.txt"}' + name: read_file + id: chatcmpl-tool-994c8fb2cc9445e6 + index: 0 + name: null + type: function + tools: null + created: 1793890175 + id: chatcmpl-ed8a5f067641484e98b8ff1658586f71 + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + object: chat.completion + usage: + completion_tokens: 26 + completion_tokens_details: + reasoning_tokens: 0 + output_tokens_details: + reasoning_tokens: 0 + prompt_tokens: 304 + prompt_tokens_details: + cached_tokens: 303 + total_tokens: 330 + body_bytes: !!binary | + eyJpZCI6ImNoYXRjbXBsLWVkOGE1ZjA2NzY0MTQ4NGU5OGI4ZmYxNjU4NTg2ZjcxIiwib2JqZWN0 + IjoiY2hhdC5jb21wbGV0aW9uIiwiY3JlYXRlZCI6MTc5Mzg5MDE3NSwibW9kZWwiOiJhY2NvdW50 + cy9maXJld29ya3MvbW9kZWxzL25lbW90cm9uLWxpZ2h0bmluZy0zcDUtMzBiLWEzYiIsImNob2lj + ZXMiOlt7ImluZGV4IjowLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50Ijoi + IiwidG9vbF9jYWxscyI6W3siaW5kZXgiOjAsImlkIjoiY2hhdGNtcGwtdG9vbC05OTRjOGZiMmNj + OTQ0NWU2IiwidHlwZSI6ImZ1bmN0aW9uIiwiZnVuY3Rpb24iOnsibmFtZSI6InJlYWRfZmlsZSIs + ImFyZ3VtZW50cyI6IntcInBhdGhcIjogXCJpbmRleC50eHRcIn0ifSwibmFtZSI6bnVsbH1dLCJ0 + b29scyI6bnVsbH0sImZpbmlzaF9yZWFzb24iOiJ0b29sX2NhbGxzIn1dLCJ1c2FnZSI6eyJwcm9t + cHRfdG9rZW5zIjozMDQsInRvdGFsX3Rva2VucyI6MzMwLCJjb21wbGV0aW9uX3Rva2VucyI6MjYs + InByb21wdF90b2tlbnNfZGV0YWlscyI6eyJjYWNoZWRfdG9rZW5zIjozMDN9LCJjb21wbGV0aW9u + X3Rva2Vuc19kZXRhaWxzIjp7InJlYXNvbmluZ190b2tlbnMiOjB9LCJvdXRwdXRfdG9rZW5zX2Rl + dGFpbHMiOnsicmVhc29uaW5nX3Rva2VucyI6MH19fQ== + headers: + connection: keep-alive + content-length: '658' + content-type: application/json + x-request-id: chatcmpl-ed8a5f067641484e98b8ff1658586f71 + status_code: 200 +timestamp: '2026-11-05T14:49:34.876886+00:00' +upstream_url: https://api.fireworks.ai/inference/v1/chat/completions diff --git a/tests/cassettes/upstream_ir/tool_use/fireworks-chat_completions-non_stream-01.yaml b/tests/cassettes/upstream_ir/tool_use/fireworks-chat_completions-non_stream-01.yaml new file mode 100644 index 0000000..8d9dec0 --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/fireworks-chat_completions-non_stream-01.yaml @@ -0,0 +1,105 @@ +filename: 2026-11-05-01a1ac2f-c9d0-7232-a1e2-635b60b7f357 +request: + body: + max_completion_tokens: 1024 + messages: + - content: + - text: Read index.txt using read_file. It contains the path of another file. + Read that file too, then summarize its contents in one sentence. + type: text + role: user + - content: '' + role: assistant + tool_calls: + - function: + arguments: '{"path": "index.txt"}' + name: read_file + id: chatcmpl-tool-994c8fb2cc9445e6 + index: 0 + type: function + - content: garden.txt + role: tool + tool_call_id: chatcmpl-tool-994c8fb2cc9445e6 + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + parallel_tool_calls: false + reasoning_effort: none + stream: false + tool_choice: auto + tools: + - function: + description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '902' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /inference/v1/chat/completions + query_params: {} +request_id: 01a1ac2f-c9d0-7232-a1e2-635b60b7f357 +response: + body: + choices: + - finish_reason: tool_calls + index: 0 + message: + content: '' + role: assistant + tool_calls: + - function: + arguments: '{"path": "garden.txt"}' + name: read_file + id: chatcmpl-tool-aca9f1448e2aa8f3 + index: 0 + name: null + type: function + tools: null + created: 1793890176 + id: chatcmpl-6ba8a0480db84186b4728e87653ce818 + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + object: chat.completion + usage: + completion_tokens: 27 + completion_tokens_details: + reasoning_tokens: 0 + output_tokens_details: + reasoning_tokens: 0 + prompt_tokens: 350 + prompt_tokens_details: + cached_tokens: 0 + total_tokens: 377 + body_bytes: !!binary | + eyJpZCI6ImNoYXRjbXBsLTZiYThhMDQ4MGRiODQxODZiNDcyOGU4NzY1M2NlODE4Iiwib2JqZWN0 + IjoiY2hhdC5jb21wbGV0aW9uIiwiY3JlYXRlZCI6MTc5Mzg5MDE3NiwibW9kZWwiOiJhY2NvdW50 + cy9maXJld29ya3MvbW9kZWxzL25lbW90cm9uLWxpZ2h0bmluZy0zcDUtMzBiLWEzYiIsImNob2lj + ZXMiOlt7ImluZGV4IjowLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50Ijoi + IiwidG9vbF9jYWxscyI6W3siaW5kZXgiOjAsImlkIjoiY2hhdGNtcGwtdG9vbC1hY2E5ZjE0NDhl + MmFhOGYzIiwidHlwZSI6ImZ1bmN0aW9uIiwiZnVuY3Rpb24iOnsibmFtZSI6InJlYWRfZmlsZSIs + ImFyZ3VtZW50cyI6IntcInBhdGhcIjogXCJnYXJkZW4udHh0XCJ9In0sIm5hbWUiOm51bGx9XSwi + dG9vbHMiOm51bGx9LCJmaW5pc2hfcmVhc29uIjoidG9vbF9jYWxscyJ9XSwidXNhZ2UiOnsicHJv + bXB0X3Rva2VucyI6MzUwLCJ0b3RhbF90b2tlbnMiOjM3NywiY29tcGxldGlvbl90b2tlbnMiOjI3 + LCJwcm9tcHRfdG9rZW5zX2RldGFpbHMiOnsiY2FjaGVkX3Rva2VucyI6MH0sImNvbXBsZXRpb25f + dG9rZW5zX2RldGFpbHMiOnsicmVhc29uaW5nX3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnNfZGV0 + YWlscyI6eyJyZWFzb25pbmdfdG9rZW5zIjowfX19 + headers: + connection: keep-alive + content-length: '657' + content-type: application/json + x-request-id: chatcmpl-6ba8a0480db84186b4728e87653ce818 + status_code: 200 +timestamp: '2026-11-05T14:49:35.440664+00:00' +upstream_url: https://api.fireworks.ai/inference/v1/chat/completions diff --git a/tests/cassettes/upstream_ir/tool_use/fireworks-chat_completions-non_stream-02.yaml b/tests/cassettes/upstream_ir/tool_use/fireworks-chat_completions-non_stream-02.yaml new file mode 100644 index 0000000..ccf3777 --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/fireworks-chat_completions-non_stream-02.yaml @@ -0,0 +1,109 @@ +filename: 2026-11-05-01a1ac2f-cbc4-7152-9ed6-7c1db56f3006 +request: + body: + max_completion_tokens: 1024 + messages: + - content: + - text: Read index.txt using read_file. It contains the path of another file. + Read that file too, then summarize its contents in one sentence. + type: text + role: user + - content: '' + role: assistant + tool_calls: + - function: + arguments: '{"path": "index.txt"}' + name: read_file + id: chatcmpl-tool-994c8fb2cc9445e6 + index: 0 + type: function + - content: garden.txt + role: tool + tool_call_id: chatcmpl-tool-994c8fb2cc9445e6 + - content: '' + role: assistant + tool_calls: + - function: + arguments: '{"path": "garden.txt"}' + name: read_file + id: chatcmpl-tool-aca9f1448e2aa8f3 + index: 0 + type: function + - content: Water the tomatoes every morning and harvest ripe fruit. + role: tool + tool_call_id: chatcmpl-tool-aca9f1448e2aa8f3 + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + parallel_tool_calls: false + reasoning_effort: none + stream: false + tool_choice: auto + tools: + - function: + description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '1225' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /inference/v1/chat/completions + query_params: {} +request_id: 01a1ac2f-cbc4-7152-9ed6-7c1db56f3006 +response: + body: + choices: + - finish_reason: stop + index: 0 + message: + content: 'The garden.txt file contains a single sentence: "Water the tomatoes + every morning and harvest ripe fruit."' + role: assistant + tools: null + created: 1793890176 + id: chatcmpl-7d77f28829ee48e3807c661d7118c793 + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + object: chat.completion + usage: + completion_tokens: 21 + completion_tokens_details: + reasoning_tokens: 0 + output_tokens_details: + reasoning_tokens: 0 + prompt_tokens: 403 + prompt_tokens_details: + cached_tokens: 349 + total_tokens: 424 + body_bytes: !!binary | + eyJpZCI6ImNoYXRjbXBsLTdkNzdmMjg4MjllZTQ4ZTM4MDdjNjYxZDcxMThjNzkzIiwib2JqZWN0 + IjoiY2hhdC5jb21wbGV0aW9uIiwiY3JlYXRlZCI6MTc5Mzg5MDE3NiwibW9kZWwiOiJhY2NvdW50 + cy9maXJld29ya3MvbW9kZWxzL25lbW90cm9uLWxpZ2h0bmluZy0zcDUtMzBiLWEzYiIsImNob2lj + ZXMiOlt7ImluZGV4IjowLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50Ijoi + VGhlIGdhcmRlbi50eHQgZmlsZSBjb250YWlucyBhIHNpbmdsZSBzZW50ZW5jZTogXCJXYXRlciB0 + aGUgdG9tYXRvZXMgZXZlcnkgbW9ybmluZyBhbmQgaGFydmVzdCByaXBlIGZydWl0LlwiIiwidG9v + bHMiOm51bGx9LCJmaW5pc2hfcmVhc29uIjoic3RvcCJ9XSwidXNhZ2UiOnsicHJvbXB0X3Rva2Vu + cyI6NDAzLCJ0b3RhbF90b2tlbnMiOjQyNCwiY29tcGxldGlvbl90b2tlbnMiOjIxLCJwcm9tcHRf + dG9rZW5zX2RldGFpbHMiOnsiY2FjaGVkX3Rva2VucyI6MzQ5fSwiY29tcGxldGlvbl90b2tlbnNf + ZGV0YWlscyI6eyJyZWFzb25pbmdfdG9rZW5zIjowfSwib3V0cHV0X3Rva2Vuc19kZXRhaWxzIjp7 + InJlYXNvbmluZ190b2tlbnMiOjB9fX0= + headers: + connection: keep-alive + content-length: '593' + content-type: application/json + x-request-id: chatcmpl-7d77f28829ee48e3807c661d7118c793 + status_code: 200 +timestamp: '2026-11-05T14:49:35.940052+00:00' +upstream_url: https://api.fireworks.ai/inference/v1/chat/completions diff --git a/tests/cassettes/upstream_ir/tool_use/fireworks-chat_completions-stream-00.yaml b/tests/cassettes/upstream_ir/tool_use/fireworks-chat_completions-stream-00.yaml new file mode 100644 index 0000000..32e5391 --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/fireworks-chat_completions-stream-00.yaml @@ -0,0 +1,110 @@ +filename: 2026-11-05-01a1ac2f-c1b0-7853-82d9-591f4779d3c7 +request: + body: + max_completion_tokens: 1024 + messages: + - content: + - text: Read index.txt using read_file. It contains the path of another file. + Read that file too, then summarize its contents in one sentence. + type: text + role: user + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + parallel_tool_calls: false + reasoning_effort: none + stream: true + stream_options: + include_usage: true + tool_choice: auto + tools: + - function: + description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '665' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /inference/v1/chat/completions + query_params: {} +request_id: 01a1ac2f-c1b0-7853-82d9-591f4779d3c7 +response: + error_event: false + headers: + connection: keep-alive + content-type: text/event-stream; charset=utf-8 + x-request-id: chatcmpl-6e70a859ea3c4485a6d1b5248db86537 + sse: + - 'data: {"id":"chatcmpl-6e70a859ea3c4485a6d1b5248db86537","object":"chat.completion.chunk","created":1793890174,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-6e70a859ea3c4485a6d1b5248db86537","object":"chat.completion.chunk","created":1793890174,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"id":"chatcmpl-tool-9e4b1d2fe8c72961","type":"function","function":{"name":"read_file","arguments":""}}]},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-6e70a859ea3c4485a6d1b5248db86537","object":"chat.completion.chunk","created":1793890174,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"path\": + \""}}]},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-6e70a859ea3c4485a6d1b5248db86537","object":"chat.completion.chunk","created":1793890174,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"index"}}]},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-6e70a859ea3c4485a6d1b5248db86537","object":"chat.completion.chunk","created":1793890174,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".txt"}}]},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-6e70a859ea3c4485a6d1b5248db86537","object":"chat.completion.chunk","created":1793890174,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"}"}}]},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-6e70a859ea3c4485a6d1b5248db86537","object":"chat.completion.chunk","created":1793890174,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls","raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-6e70a859ea3c4485a6d1b5248db86537","object":"chat.completion.chunk","created":1793890174,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[],"usage":{"prompt_tokens":304,"total_tokens":330,"completion_tokens":26,"prompt_tokens_details":{"cached_tokens":0},"completion_tokens_details":{"reasoning_tokens":0},"output_tokens_details":{"reasoning_tokens":0}}} + + ' + - ' + + ' + - 'data: [DONE] + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: '[DONE]' +timestamp: '2026-11-05T14:49:33.360212+00:00' +upstream_url: https://api.fireworks.ai/inference/v1/chat/completions diff --git a/tests/cassettes/upstream_ir/tool_use/fireworks-chat_completions-stream-01.yaml b/tests/cassettes/upstream_ir/tool_use/fireworks-chat_completions-stream-01.yaml new file mode 100644 index 0000000..f0f2a6d --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/fireworks-chat_completions-stream-01.yaml @@ -0,0 +1,127 @@ +filename: 2026-11-05-01a1ac2f-c399-7763-a293-098c1af77e02 +request: + body: + max_completion_tokens: 1024 + messages: + - content: + - text: Read index.txt using read_file. It contains the path of another file. + Read that file too, then summarize its contents in one sentence. + type: text + role: user + - role: assistant + tool_calls: + - function: + arguments: '{"path": "index.txt"}' + name: read_file + id: chatcmpl-tool-9e4b1d2fe8c72961 + index: 0 + type: function + - content: garden.txt + role: tool + tool_call_id: chatcmpl-tool-9e4b1d2fe8c72961 + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + parallel_tool_calls: false + reasoning_effort: none + stream: true + stream_options: + include_usage: true + tool_choice: auto + tools: + - function: + description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '928' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /inference/v1/chat/completions + query_params: {} +request_id: 01a1ac2f-c399-7763-a293-098c1af77e02 +response: + error_event: false + headers: + connection: keep-alive + content-type: text/event-stream; charset=utf-8 + x-request-id: chatcmpl-9683ed81783f432c9a2ed0bd96bbde04 + sse: + - 'data: {"id":"chatcmpl-9683ed81783f432c9a2ed0bd96bbde04","object":"chat.completion.chunk","created":1793890174,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-9683ed81783f432c9a2ed0bd96bbde04","object":"chat.completion.chunk","created":1793890174,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"id":"chatcmpl-tool-bffccb6cb252e0d8","type":"function","function":{"name":"read_file","arguments":""}}]},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-9683ed81783f432c9a2ed0bd96bbde04","object":"chat.completion.chunk","created":1793890174,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"path\": + \""}}]},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-9683ed81783f432c9a2ed0bd96bbde04","object":"chat.completion.chunk","created":1793890174,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"g"}}]},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-9683ed81783f432c9a2ed0bd96bbde04","object":"chat.completion.chunk","created":1793890174,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"arden"}}]},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-9683ed81783f432c9a2ed0bd96bbde04","object":"chat.completion.chunk","created":1793890174,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".txt"}}]},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-9683ed81783f432c9a2ed0bd96bbde04","object":"chat.completion.chunk","created":1793890174,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"}"}}]},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-9683ed81783f432c9a2ed0bd96bbde04","object":"chat.completion.chunk","created":1793890174,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls","raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-9683ed81783f432c9a2ed0bd96bbde04","object":"chat.completion.chunk","created":1793890174,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[],"usage":{"prompt_tokens":350,"total_tokens":377,"completion_tokens":27,"prompt_tokens_details":{"cached_tokens":303},"completion_tokens_details":{"reasoning_tokens":0},"output_tokens_details":{"reasoning_tokens":0}}} + + ' + - ' + + ' + - 'data: [DONE] + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: '[DONE]' +timestamp: '2026-11-05T14:49:33.849520+00:00' +upstream_url: https://api.fireworks.ai/inference/v1/chat/completions diff --git a/tests/cassettes/upstream_ir/tool_use/fireworks-chat_completions-stream-02.yaml b/tests/cassettes/upstream_ir/tool_use/fireworks-chat_completions-stream-02.yaml new file mode 100644 index 0000000..45124b6 --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/fireworks-chat_completions-stream-02.yaml @@ -0,0 +1,244 @@ +filename: 2026-11-05-01a1ac2f-c596-7bd0-af6e-422f5e240059 +request: + body: + max_completion_tokens: 1024 + messages: + - content: + - text: Read index.txt using read_file. It contains the path of another file. + Read that file too, then summarize its contents in one sentence. + type: text + role: user + - role: assistant + tool_calls: + - function: + arguments: '{"path": "index.txt"}' + name: read_file + id: chatcmpl-tool-9e4b1d2fe8c72961 + index: 0 + type: function + - content: garden.txt + role: tool + tool_call_id: chatcmpl-tool-9e4b1d2fe8c72961 + - role: assistant + tool_calls: + - function: + arguments: '{"path": "garden.txt"}' + name: read_file + id: chatcmpl-tool-bffccb6cb252e0d8 + index: 0 + type: function + - content: Water the tomatoes every morning and harvest ripe fruit. + role: tool + tool_call_id: chatcmpl-tool-bffccb6cb252e0d8 + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + parallel_tool_calls: false + reasoning_effort: none + stream: true + stream_options: + include_usage: true + tool_choice: auto + tools: + - function: + description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '1238' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /inference/v1/chat/completions + query_params: {} +request_id: 01a1ac2f-c596-7bd0-af6e-422f5e240059 +response: + error_event: false + headers: + connection: keep-alive + content-type: text/event-stream; charset=utf-8 + x-request-id: chatcmpl-05568d8489e94c378f0766f9a6927207 + sse: + - 'data: {"id":"chatcmpl-05568d8489e94c378f0766f9a6927207","object":"chat.completion.chunk","created":1793890175,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-05568d8489e94c378f0766f9a6927207","object":"chat.completion.chunk","created":1793890175,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"The"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-05568d8489e94c378f0766f9a6927207","object":"chat.completion.chunk","created":1793890175,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + file"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-05568d8489e94c378f0766f9a6927207","object":"chat.completion.chunk","created":1793890175,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + garden"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-05568d8489e94c378f0766f9a6927207","object":"chat.completion.chunk","created":1793890175,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":".txt"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-05568d8489e94c378f0766f9a6927207","object":"chat.completion.chunk","created":1793890175,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + contains"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-05568d8489e94c378f0766f9a6927207","object":"chat.completion.chunk","created":1793890175,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + a"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-05568d8489e94c378f0766f9a6927207","object":"chat.completion.chunk","created":1793890175,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + single"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-05568d8489e94c378f0766f9a6927207","object":"chat.completion.chunk","created":1793890175,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + sentence"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-05568d8489e94c378f0766f9a6927207","object":"chat.completion.chunk","created":1793890175,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + instruct"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-05568d8489e94c378f0766f9a6927207","object":"chat.completion.chunk","created":1793890175,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"ing"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-05568d8489e94c378f0766f9a6927207","object":"chat.completion.chunk","created":1793890175,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + to"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-05568d8489e94c378f0766f9a6927207","object":"chat.completion.chunk","created":1793890175,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + water"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-05568d8489e94c378f0766f9a6927207","object":"chat.completion.chunk","created":1793890175,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + the"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-05568d8489e94c378f0766f9a6927207","object":"chat.completion.chunk","created":1793890175,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + tomatoes"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-05568d8489e94c378f0766f9a6927207","object":"chat.completion.chunk","created":1793890175,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + every"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-05568d8489e94c378f0766f9a6927207","object":"chat.completion.chunk","created":1793890175,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + morning"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-05568d8489e94c378f0766f9a6927207","object":"chat.completion.chunk","created":1793890175,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + and"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-05568d8489e94c378f0766f9a6927207","object":"chat.completion.chunk","created":1793890175,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + harvest"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-05568d8489e94c378f0766f9a6927207","object":"chat.completion.chunk","created":1793890175,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + ripe"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-05568d8489e94c378f0766f9a6927207","object":"chat.completion.chunk","created":1793890175,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":" + fruit"},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-05568d8489e94c378f0766f9a6927207","object":"chat.completion.chunk","created":1793890175,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null,"raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-05568d8489e94c378f0766f9a6927207","object":"chat.completion.chunk","created":1793890175,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[{"index":0,"delta":{},"finish_reason":"stop","raw_output":null}],"usage":null} + + ' + - ' + + ' + - 'data: {"id":"chatcmpl-05568d8489e94c378f0766f9a6927207","object":"chat.completion.chunk","created":1793890175,"model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","choices":[],"usage":{"prompt_tokens":403,"total_tokens":425,"completion_tokens":22,"prompt_tokens_details":{"cached_tokens":349},"completion_tokens_details":{"reasoning_tokens":0},"output_tokens_details":{"reasoning_tokens":0}}} + + ' + - ' + + ' + - 'data: [DONE] + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: '[DONE]' +timestamp: '2026-11-05T14:49:34.358694+00:00' +upstream_url: https://api.fireworks.ai/inference/v1/chat/completions diff --git a/tests/cassettes/upstream_ir/tool_use/fireworks-responses-non_stream-00.yaml b/tests/cassettes/upstream_ir/tool_use/fireworks-responses-non_stream-00.yaml new file mode 100644 index 0000000..bb3153c --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/fireworks-responses-non_stream-00.yaml @@ -0,0 +1,134 @@ +filename: 2026-11-04-01a1a479-3920-75e2-8891-7d59ab220d38 +request: + body: + input: + - content: Use add to add 2 and 3. After the result, use add to add that result + and 4. Then give the final answer. + role: user + max_output_tokens: 2048 + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + parallel_tool_calls: false + reasoning: + effort: none + store: false + stream: false + tool_choice: + name: add + type: function + tools: + - description: Add two integers. + name: add + parameters: + additionalProperties: false + properties: + a: + type: integer + b: + type: integer + required: + - a + - b + type: object + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '588' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /inference/v1/responses + query_params: {} +request_id: 01a1a479-3920-75e2-8891-7d59ab220d38 +response: + body: + background: null + created_at: 1793760770 + error: null + id: resp_422ccdbecde248769df4d281b44096dd + incomplete_details: null + instructions: null + max_output_tokens: 2048 + max_tool_calls: null + metadata: {} + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + object: response + output: + - arguments: '{"a": 2, "b": 3}' + call_id: chatcmpl-tool-b5fe5a18789bed43 + id: fc_a41631b60d3748b3877834672cfd85fb + name: add + status: completed + type: function_call + parallel_tool_calls: false + previous_response_id: null + reasoning: + effort: none + status: completed + store: false + temperature: 1.0 + text: + format: + type: text + tool_choice: + name: add + type: function + tools: + - description: Add two integers. + name: add + parameters: + additionalProperties: false + properties: + a: + type: integer + b: + type: integer + required: + - a + - b + type: object + type: function + top_logprobs: null + top_p: 0.95 + truncation: disabled + usage: + input_tokens: 325 + input_tokens_details: + cached_tokens: 0 + output_tokens: 31 + output_tokens_details: + reasoning_tokens: 0 + total_tokens: 356 + user: null + body_bytes: !!binary | + eyJpZCI6InJlc3BfNDIyY2NkYmVjZGUyNDg3NjlkZjRkMjgxYjQ0MDk2ZGQiLCJvYmplY3QiOiJy + ZXNwb25zZSIsImNyZWF0ZWRfYXQiOjE3OTM3NjA3NzAsInN0YXR1cyI6ImNvbXBsZXRlZCIsIm1v + ZGVsIjoiYWNjb3VudHMvZmlyZXdvcmtzL21vZGVscy9uZW1vdHJvbi1saWdodG5pbmctM3A1LTMw + Yi1hM2IiLCJvdXRwdXQiOlt7ImlkIjoiZmNfYTQxNjMxYjYwZDM3NDhiMzg3NzgzNDY3MmNmZDg1 + ZmIiLCJ0eXBlIjoiZnVuY3Rpb25fY2FsbCIsImNhbGxfaWQiOiJjaGF0Y21wbC10b29sLWI1ZmU1 + YTE4Nzg5YmVkNDMiLCJuYW1lIjoiYWRkIiwiYXJndW1lbnRzIjoie1wiYVwiOiAyLCBcImJcIjog + M30iLCJzdGF0dXMiOiJjb21wbGV0ZWQifV0sInByZXZpb3VzX3Jlc3BvbnNlX2lkIjpudWxsLCJ1 + c2FnZSI6eyJpbnB1dF90b2tlbnMiOjMyNSwib3V0cHV0X3Rva2VucyI6MzEsInRvdGFsX3Rva2Vu + cyI6MzU2LCJpbnB1dF90b2tlbnNfZGV0YWlscyI6eyJjYWNoZWRfdG9rZW5zIjowfSwib3V0cHV0 + X3Rva2Vuc19kZXRhaWxzIjp7InJlYXNvbmluZ190b2tlbnMiOjB9fSwiZXJyb3IiOm51bGwsImlu + Y29tcGxldGVfZGV0YWlscyI6bnVsbCwiaW5zdHJ1Y3Rpb25zIjpudWxsLCJtYXhfb3V0cHV0X3Rv + a2VucyI6MjA0OCwibWF4X3Rvb2xfY2FsbHMiOm51bGwsInBhcmFsbGVsX3Rvb2xfY2FsbHMiOmZh + bHNlLCJyZWFzb25pbmciOnsiZWZmb3J0Ijoibm9uZSJ9LCJzdG9yZSI6ZmFsc2UsInRlbXBlcmF0 + dXJlIjoxLjAsInRleHQiOnsiZm9ybWF0Ijp7InR5cGUiOiJ0ZXh0In19LCJ0b29sX2Nob2ljZSI6 + eyJ0eXBlIjoiZnVuY3Rpb24iLCJuYW1lIjoiYWRkIn0sInRvb2xzIjpbeyJ0eXBlIjoiZnVuY3Rp + b24iLCJuYW1lIjoiYWRkIiwiZGVzY3JpcHRpb24iOiJBZGQgdHdvIGludGVnZXJzLiIsInBhcmFt + ZXRlcnMiOnsidHlwZSI6Im9iamVjdCIsInByb3BlcnRpZXMiOnsiYSI6eyJ0eXBlIjoiaW50ZWdl + ciJ9LCJiIjp7InR5cGUiOiJpbnRlZ2VyIn19LCJyZXF1aXJlZCI6WyJhIiwiYiJdLCJhZGRpdGlv + bmFsUHJvcGVydGllcyI6ZmFsc2V9fV0sInRvcF9wIjowLjk1LCJ0b3BfbG9ncHJvYnMiOm51bGws + InRydW5jYXRpb24iOiJkaXNhYmxlZCIsInVzZXIiOm51bGwsImJhY2tncm91bmQiOm51bGwsIm1l + dGFkYXRhIjp7fX0= + headers: + connection: keep-alive + content-length: '1151' + content-type: application/json + x-request-id: 3dfbfddf-bd70-45a4-b511-e770bae3b646 + status_code: 200 +timestamp: '2026-11-04T02:52:50.336420+00:00' +upstream_url: https://api.fireworks.ai/inference/v1/responses diff --git a/tests/cassettes/upstream_ir/tool_use/fireworks-responses-non_stream-01.yaml b/tests/cassettes/upstream_ir/tool_use/fireworks-responses-non_stream-01.yaml new file mode 100644 index 0000000..11c71d7 --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/fireworks-responses-non_stream-01.yaml @@ -0,0 +1,143 @@ +filename: 2026-11-04-01a1a479-3ca7-7e32-84aa-5ca8ec32ac30 +request: + body: + input: + - content: Use add to add 2 and 3. After the result, use add to add that result + and 4. Then give the final answer. + role: user + - arguments: '{"a": 2, "b": 3}' + call_id: chatcmpl-tool-b5fe5a18789bed43 + id: fc_a41631b60d3748b3877834672cfd85fb + name: add + status: completed + type: function_call + - call_id: chatcmpl-tool-b5fe5a18789bed43 + output: '5' + type: function_call_output + max_output_tokens: 2048 + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + parallel_tool_calls: false + reasoning: + effort: none + store: false + stream: false + tool_choice: + name: add + type: function + tools: + - description: Add two integers. + name: add + parameters: + additionalProperties: false + properties: + a: + type: integer + b: + type: integer + required: + - a + - b + type: object + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '856' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /inference/v1/responses + query_params: {} +request_id: 01a1a479-3ca7-7e32-84aa-5ca8ec32ac30 +response: + body: + background: null + created_at: 1793760771 + error: null + id: resp_f59dba79b3a24d17a4e016d2de882bbe + incomplete_details: null + instructions: null + max_output_tokens: 2048 + max_tool_calls: null + metadata: {} + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + object: response + output: + - arguments: '{"a": 5, "b": 4}' + call_id: chatcmpl-tool-bb94cf4a6795034f + id: fc_6e9d59f1a9f94f57a826f8ee13d97f35 + name: add + status: completed + type: function_call + parallel_tool_calls: false + previous_response_id: null + reasoning: + effort: none + status: completed + store: false + temperature: 1.0 + text: + format: + type: text + tool_choice: + name: add + type: function + tools: + - description: Add two integers. + name: add + parameters: + additionalProperties: false + properties: + a: + type: integer + b: + type: integer + required: + - a + - b + type: object + type: function + top_logprobs: null + top_p: 0.95 + truncation: disabled + usage: + input_tokens: 375 + input_tokens_details: + cached_tokens: 324 + output_tokens: 31 + output_tokens_details: + reasoning_tokens: 0 + total_tokens: 406 + user: null + body_bytes: !!binary | + eyJpZCI6InJlc3BfZjU5ZGJhNzliM2EyNGQxN2E0ZTAxNmQyZGU4ODJiYmUiLCJvYmplY3QiOiJy + ZXNwb25zZSIsImNyZWF0ZWRfYXQiOjE3OTM3NjA3NzEsInN0YXR1cyI6ImNvbXBsZXRlZCIsIm1v + ZGVsIjoiYWNjb3VudHMvZmlyZXdvcmtzL21vZGVscy9uZW1vdHJvbi1saWdodG5pbmctM3A1LTMw + Yi1hM2IiLCJvdXRwdXQiOlt7ImlkIjoiZmNfNmU5ZDU5ZjFhOWY5NGY1N2E4MjZmOGVlMTNkOTdm + MzUiLCJ0eXBlIjoiZnVuY3Rpb25fY2FsbCIsImNhbGxfaWQiOiJjaGF0Y21wbC10b29sLWJiOTRj + ZjRhNjc5NTAzNGYiLCJuYW1lIjoiYWRkIiwiYXJndW1lbnRzIjoie1wiYVwiOiA1LCBcImJcIjog + NH0iLCJzdGF0dXMiOiJjb21wbGV0ZWQifV0sInByZXZpb3VzX3Jlc3BvbnNlX2lkIjpudWxsLCJ1 + c2FnZSI6eyJpbnB1dF90b2tlbnMiOjM3NSwib3V0cHV0X3Rva2VucyI6MzEsInRvdGFsX3Rva2Vu + cyI6NDA2LCJpbnB1dF90b2tlbnNfZGV0YWlscyI6eyJjYWNoZWRfdG9rZW5zIjozMjR9LCJvdXRw + dXRfdG9rZW5zX2RldGFpbHMiOnsicmVhc29uaW5nX3Rva2VucyI6MH19LCJlcnJvciI6bnVsbCwi + aW5jb21wbGV0ZV9kZXRhaWxzIjpudWxsLCJpbnN0cnVjdGlvbnMiOm51bGwsIm1heF9vdXRwdXRf + dG9rZW5zIjoyMDQ4LCJtYXhfdG9vbF9jYWxscyI6bnVsbCwicGFyYWxsZWxfdG9vbF9jYWxscyI6 + ZmFsc2UsInJlYXNvbmluZyI6eyJlZmZvcnQiOiJub25lIn0sInN0b3JlIjpmYWxzZSwidGVtcGVy + YXR1cmUiOjEuMCwidGV4dCI6eyJmb3JtYXQiOnsidHlwZSI6InRleHQifX0sInRvb2xfY2hvaWNl + Ijp7InR5cGUiOiJmdW5jdGlvbiIsIm5hbWUiOiJhZGQifSwidG9vbHMiOlt7InR5cGUiOiJmdW5j + dGlvbiIsIm5hbWUiOiJhZGQiLCJkZXNjcmlwdGlvbiI6IkFkZCB0d28gaW50ZWdlcnMuIiwicGFy + YW1ldGVycyI6eyJ0eXBlIjoib2JqZWN0IiwicHJvcGVydGllcyI6eyJhIjp7InR5cGUiOiJpbnRl + Z2VyIn0sImIiOnsidHlwZSI6ImludGVnZXIifX0sInJlcXVpcmVkIjpbImEiLCJiIl0sImFkZGl0 + aW9uYWxQcm9wZXJ0aWVzIjpmYWxzZX19XSwidG9wX3AiOjAuOTUsInRvcF9sb2dwcm9icyI6bnVs + bCwidHJ1bmNhdGlvbiI6ImRpc2FibGVkIiwidXNlciI6bnVsbCwiYmFja2dyb3VuZCI6bnVsbCwi + bWV0YWRhdGEiOnt9fQ== + headers: + connection: keep-alive + content-length: '1153' + content-type: application/json + x-request-id: d065ff0e-6d9b-470b-b3e0-302b4826357d + status_code: 200 +timestamp: '2026-11-04T02:52:51.239960+00:00' +upstream_url: https://api.fireworks.ai/inference/v1/responses diff --git a/tests/cassettes/upstream_ir/tool_use/fireworks-responses-non_stream-02.yaml b/tests/cassettes/upstream_ir/tool_use/fireworks-responses-non_stream-02.yaml new file mode 100644 index 0000000..9f0d154 --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/fireworks-responses-non_stream-02.yaml @@ -0,0 +1,149 @@ +filename: 2026-11-04-01a1a479-3f9b-7632-be50-6f95cb0f280b +request: + body: + input: + - content: Use add to add 2 and 3. After the result, use add to add that result + and 4. Then give the final answer. + role: user + - arguments: '{"a": 2, "b": 3}' + call_id: chatcmpl-tool-b5fe5a18789bed43 + id: fc_a41631b60d3748b3877834672cfd85fb + name: add + status: completed + type: function_call + - call_id: chatcmpl-tool-b5fe5a18789bed43 + output: '5' + type: function_call_output + - arguments: '{"a": 5, "b": 4}' + call_id: chatcmpl-tool-bb94cf4a6795034f + id: fc_6e9d59f1a9f94f57a826f8ee13d97f35 + name: add + status: completed + type: function_call + - call_id: chatcmpl-tool-bb94cf4a6795034f + output: '9' + type: function_call_output + max_output_tokens: 2048 + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + parallel_tool_calls: false + reasoning: + effort: none + store: false + stream: false + tool_choice: none + tools: + - description: Add two integers. + name: add + parameters: + additionalProperties: false + properties: + a: + type: integer + b: + type: integer + required: + - a + - b + type: object + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '1098' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /inference/v1/responses + query_params: {} +request_id: 01a1a479-3f9b-7632-be50-6f95cb0f280b +response: + body: + background: null + created_at: 1793760772 + error: null + id: resp_dec370d7818b47aebcdce61706ef8c82 + incomplete_details: null + instructions: null + max_output_tokens: 2048 + max_tool_calls: null + metadata: {} + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + object: response + output: + - content: + - annotations: [] + text: The final answer is 9. + type: output_text + id: msg_49196a1274414e8cbcca6f8ae754d850 + role: assistant + status: completed + type: message + parallel_tool_calls: false + previous_response_id: null + reasoning: + effort: none + status: completed + store: false + temperature: 1.0 + text: + format: + type: text + tool_choice: none + tools: + - description: Add two integers. + name: add + parameters: + additionalProperties: false + properties: + a: + type: integer + b: + type: integer + required: + - a + - b + type: object + type: function + top_logprobs: null + top_p: 0.95 + truncation: disabled + usage: + input_tokens: 146 + input_tokens_details: + cached_tokens: 0 + output_tokens: 8 + output_tokens_details: + reasoning_tokens: 0 + total_tokens: 154 + user: null + body_bytes: !!binary | + eyJpZCI6InJlc3BfZGVjMzcwZDc4MThiNDdhZWJjZGNlNjE3MDZlZjhjODIiLCJvYmplY3QiOiJy + ZXNwb25zZSIsImNyZWF0ZWRfYXQiOjE3OTM3NjA3NzIsInN0YXR1cyI6ImNvbXBsZXRlZCIsIm1v + ZGVsIjoiYWNjb3VudHMvZmlyZXdvcmtzL21vZGVscy9uZW1vdHJvbi1saWdodG5pbmctM3A1LTMw + Yi1hM2IiLCJvdXRwdXQiOlt7ImlkIjoibXNnXzQ5MTk2YTEyNzQ0MTRlOGNiY2NhNmY4YWU3NTRk + ODUwIiwidHlwZSI6Im1lc3NhZ2UiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlw + ZSI6Im91dHB1dF90ZXh0IiwidGV4dCI6IlRoZSBmaW5hbCBhbnN3ZXIgaXMgOS4iLCJhbm5vdGF0 + aW9ucyI6W119XSwic3RhdHVzIjoiY29tcGxldGVkIn1dLCJwcmV2aW91c19yZXNwb25zZV9pZCI6 + bnVsbCwidXNhZ2UiOnsiaW5wdXRfdG9rZW5zIjoxNDYsIm91dHB1dF90b2tlbnMiOjgsInRvdGFs + X3Rva2VucyI6MTU0LCJpbnB1dF90b2tlbnNfZGV0YWlscyI6eyJjYWNoZWRfdG9rZW5zIjowfSwi + b3V0cHV0X3Rva2Vuc19kZXRhaWxzIjp7InJlYXNvbmluZ190b2tlbnMiOjB9fSwiZXJyb3IiOm51 + bGwsImluY29tcGxldGVfZGV0YWlscyI6bnVsbCwiaW5zdHJ1Y3Rpb25zIjpudWxsLCJtYXhfb3V0 + cHV0X3Rva2VucyI6MjA0OCwibWF4X3Rvb2xfY2FsbHMiOm51bGwsInBhcmFsbGVsX3Rvb2xfY2Fs + bHMiOmZhbHNlLCJyZWFzb25pbmciOnsiZWZmb3J0Ijoibm9uZSJ9LCJzdG9yZSI6ZmFsc2UsInRl + bXBlcmF0dXJlIjoxLjAsInRleHQiOnsiZm9ybWF0Ijp7InR5cGUiOiJ0ZXh0In19LCJ0b29sX2No + b2ljZSI6Im5vbmUiLCJ0b29scyI6W3sidHlwZSI6ImZ1bmN0aW9uIiwibmFtZSI6ImFkZCIsImRl + c2NyaXB0aW9uIjoiQWRkIHR3byBpbnRlZ2Vycy4iLCJwYXJhbWV0ZXJzIjp7InR5cGUiOiJvYmpl + Y3QiLCJwcm9wZXJ0aWVzIjp7ImEiOnsidHlwZSI6ImludGVnZXIifSwiYiI6eyJ0eXBlIjoiaW50 + ZWdlciJ9fSwicmVxdWlyZWQiOlsiYSIsImIiXSwiYWRkaXRpb25hbFByb3BlcnRpZXMiOmZhbHNl + fX1dLCJ0b3BfcCI6MC45NSwidG9wX2xvZ3Byb2JzIjpudWxsLCJ0cnVuY2F0aW9uIjoiZGlzYWJs + ZWQiLCJ1c2VyIjpudWxsLCJiYWNrZ3JvdW5kIjpudWxsLCJtZXRhZGF0YSI6e319 + headers: + connection: keep-alive + content-length: '1131' + content-type: application/json + x-request-id: c126d604-fcb8-4aff-ac48-c0707f3decb7 + status_code: 200 +timestamp: '2026-11-04T02:52:51.995238+00:00' +upstream_url: https://api.fireworks.ai/inference/v1/responses diff --git a/tests/cassettes/upstream_ir/tool_use/fireworks-responses-stream-00.yaml b/tests/cassettes/upstream_ir/tool_use/fireworks-responses-stream-00.yaml new file mode 100644 index 0000000..11b48c0 --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/fireworks-responses-stream-00.yaml @@ -0,0 +1,119 @@ +filename: 2026-11-04-01a1a479-4d46-7d13-b5b1-7a82e46888a3 +request: + body: + input: + - content: Use add to add 2 and 3. After the result, use add to add that result + and 4. Then give the final answer. + role: user + max_output_tokens: 2048 + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + parallel_tool_calls: false + reasoning: + effort: none + store: false + stream: true + tool_choice: + name: add + type: function + tools: + - description: Add two integers. + name: add + parameters: + additionalProperties: false + properties: + a: + type: integer + b: + type: integer + required: + - a + - b + type: object + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '587' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /inference/v1/responses + query_params: {} +request_id: 01a1a479-4d46-7d13-b5b1-7a82e46888a3 +response: + error_event: false + headers: + cache-control: no-cache + connection: keep-alive + content-type: text/event-stream; charset=utf-8 + x-request-id: 8764e915-c874-4450-bcd8-21946e65f337 + sse: + - 'data: {"type":"response.created","sequence_number":0,"response":{"id":"resp_fca348903bbc49ce8056b1d07c5b7d52","object":"response","created_at":1793760775,"status":"in_progress","model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","output":[],"previous_response_id":null,"usage":null,"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":2048,"max_tool_calls":null,"parallel_tool_calls":false,"reasoning":{"effort":"none"},"store":false,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":{"type":"function","name":"add"},"tools":[{"type":"function","name":"add","description":"Add + two integers.","parameters":{"type":"object","properties":{"a":{"type":"integer"},"b":{"type":"integer"}},"required":["a","b"],"additionalProperties":false}}],"top_p":1.0,"top_logprobs":null,"truncation":"disabled","user":null,"background":null,"metadata":{}}} + + ' + - ' + + ' + - 'data: {"type":"response.in_progress","sequence_number":1,"response":{"id":"resp_fca348903bbc49ce8056b1d07c5b7d52","object":"response","created_at":1793760775,"status":"in_progress","model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","output":[],"previous_response_id":null,"usage":null,"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":2048,"max_tool_calls":null,"parallel_tool_calls":false,"reasoning":{"effort":"none"},"store":false,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":{"type":"function","name":"add"},"tools":[{"type":"function","name":"add","description":"Add + two integers.","parameters":{"type":"object","properties":{"a":{"type":"integer"},"b":{"type":"integer"}},"required":["a","b"],"additionalProperties":false}}],"top_p":1.0,"top_logprobs":null,"truncation":"disabled","user":null,"background":null,"metadata":{}}} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.added","sequence_number":2,"output_index":0,"item":{"type":"function_call","id":"fc_885d0b3c71cf42a5a856d31915d77ece","status":"in_progress","call_id":"chatcmpl-tool-bf4314efe4595302","name":"add","arguments":""}} + + ' + - ' + + ' + - 'data: {"type":"response.function_call_arguments.delta","sequence_number":3,"item_id":"fc_885d0b3c71cf42a5a856d31915d77ece","output_index":0,"delta":"{\"a\": + "} + + ' + - ' + + ' + - 'data: {"type":"response.function_call_arguments.delta","sequence_number":4,"item_id":"fc_885d0b3c71cf42a5a856d31915d77ece","output_index":0,"delta":"2, + \"b\": "} + + ' + - ' + + ' + - 'data: {"type":"response.function_call_arguments.delta","sequence_number":5,"item_id":"fc_885d0b3c71cf42a5a856d31915d77ece","output_index":0,"delta":"3}"} + + ' + - ' + + ' + - 'data: {"type":"response.function_call_arguments.done","sequence_number":6,"item_id":"fc_885d0b3c71cf42a5a856d31915d77ece","output_index":0,"arguments":"{\"a\": + 2, \"b\": 3}"} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.done","sequence_number":7,"output_index":0,"item":{"type":"function_call","id":"fc_885d0b3c71cf42a5a856d31915d77ece","status":"completed","call_id":"chatcmpl-tool-bf4314efe4595302","name":"add","arguments":"{\"a\": + 2, \"b\": 3}"}} + + ' + - ' + + ' + - 'data: {"type":"response.completed","sequence_number":8,"response":{"id":"resp_fca348903bbc49ce8056b1d07c5b7d52","object":"response","created_at":1793760776,"status":"completed","model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","output":[{"id":"fc_885d0b3c71cf42a5a856d31915d77ece","type":"function_call","call_id":"chatcmpl-tool-bf4314efe4595302","name":"add","arguments":"{\"a\": + 2, \"b\": 3}","status":"completed"}],"previous_response_id":null,"usage":{"input_tokens":325,"output_tokens":31,"total_tokens":356,"input_tokens_details":{"cached_tokens":324},"output_tokens_details":{"reasoning_tokens":0}},"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":2048,"max_tool_calls":null,"parallel_tool_calls":false,"reasoning":{"effort":"none"},"store":false,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":{"type":"function","name":"add"},"tools":[{"type":"function","name":"add","description":"Add + two integers.","parameters":{"type":"object","properties":{"a":{"type":"integer"},"b":{"type":"integer"}},"required":["a","b"],"additionalProperties":false}}],"top_p":0.95,"top_logprobs":null,"truncation":"disabled","user":null,"background":null,"metadata":{}}} + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: null +timestamp: '2026-11-04T02:52:55.494432+00:00' +upstream_url: https://api.fireworks.ai/inference/v1/responses diff --git a/tests/cassettes/upstream_ir/tool_use/fireworks-responses-stream-01.yaml b/tests/cassettes/upstream_ir/tool_use/fireworks-responses-stream-01.yaml new file mode 100644 index 0000000..3217be3 --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/fireworks-responses-stream-01.yaml @@ -0,0 +1,128 @@ +filename: 2026-11-04-01a1a479-53a6-7053-adfb-bf546bf0e004 +request: + body: + input: + - content: Use add to add 2 and 3. After the result, use add to add that result + and 4. Then give the final answer. + role: user + - arguments: '{"a": 2, "b": 3}' + call_id: chatcmpl-tool-bf4314efe4595302 + id: fc_885d0b3c71cf42a5a856d31915d77ece + name: add + status: completed + type: function_call + - call_id: chatcmpl-tool-bf4314efe4595302 + output: '5' + type: function_call_output + max_output_tokens: 2048 + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + parallel_tool_calls: false + reasoning: + effort: none + store: false + stream: true + tool_choice: + name: add + type: function + tools: + - description: Add two integers. + name: add + parameters: + additionalProperties: false + properties: + a: + type: integer + b: + type: integer + required: + - a + - b + type: object + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '855' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /inference/v1/responses + query_params: {} +request_id: 01a1a479-53a6-7053-adfb-bf546bf0e004 +response: + error_event: false + headers: + cache-control: no-cache + connection: keep-alive + content-type: text/event-stream; charset=utf-8 + x-request-id: 3eb0684a-367a-4fe7-9cb8-58922d190d70 + sse: + - 'data: {"type":"response.created","sequence_number":0,"response":{"id":"resp_51408536dfa84b55a32efa380cac3a7a","object":"response","created_at":1793760777,"status":"in_progress","model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","output":[],"previous_response_id":null,"usage":null,"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":2048,"max_tool_calls":null,"parallel_tool_calls":false,"reasoning":{"effort":"none"},"store":false,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":{"type":"function","name":"add"},"tools":[{"type":"function","name":"add","description":"Add + two integers.","parameters":{"type":"object","properties":{"a":{"type":"integer"},"b":{"type":"integer"}},"required":["a","b"],"additionalProperties":false}}],"top_p":1.0,"top_logprobs":null,"truncation":"disabled","user":null,"background":null,"metadata":{}}} + + ' + - ' + + ' + - 'data: {"type":"response.in_progress","sequence_number":1,"response":{"id":"resp_51408536dfa84b55a32efa380cac3a7a","object":"response","created_at":1793760777,"status":"in_progress","model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","output":[],"previous_response_id":null,"usage":null,"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":2048,"max_tool_calls":null,"parallel_tool_calls":false,"reasoning":{"effort":"none"},"store":false,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":{"type":"function","name":"add"},"tools":[{"type":"function","name":"add","description":"Add + two integers.","parameters":{"type":"object","properties":{"a":{"type":"integer"},"b":{"type":"integer"}},"required":["a","b"],"additionalProperties":false}}],"top_p":1.0,"top_logprobs":null,"truncation":"disabled","user":null,"background":null,"metadata":{}}} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.added","sequence_number":2,"output_index":0,"item":{"type":"function_call","id":"fc_b965613629284107a80239de17b03e8d","status":"in_progress","call_id":"chatcmpl-tool-bde540262d899c7f","name":"add","arguments":""}} + + ' + - ' + + ' + - 'data: {"type":"response.function_call_arguments.delta","sequence_number":3,"item_id":"fc_b965613629284107a80239de17b03e8d","output_index":0,"delta":"{\"a\": + "} + + ' + - ' + + ' + - 'data: {"type":"response.function_call_arguments.delta","sequence_number":4,"item_id":"fc_b965613629284107a80239de17b03e8d","output_index":0,"delta":"5, + \"b\": "} + + ' + - ' + + ' + - 'data: {"type":"response.function_call_arguments.delta","sequence_number":5,"item_id":"fc_b965613629284107a80239de17b03e8d","output_index":0,"delta":"4}"} + + ' + - ' + + ' + - 'data: {"type":"response.function_call_arguments.done","sequence_number":6,"item_id":"fc_b965613629284107a80239de17b03e8d","output_index":0,"arguments":"{\"a\": + 5, \"b\": 4}"} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.done","sequence_number":7,"output_index":0,"item":{"type":"function_call","id":"fc_b965613629284107a80239de17b03e8d","status":"completed","call_id":"chatcmpl-tool-bde540262d899c7f","name":"add","arguments":"{\"a\": + 5, \"b\": 4}"}} + + ' + - ' + + ' + - 'data: {"type":"response.completed","sequence_number":8,"response":{"id":"resp_51408536dfa84b55a32efa380cac3a7a","object":"response","created_at":1793760777,"status":"completed","model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","output":[{"id":"fc_b965613629284107a80239de17b03e8d","type":"function_call","call_id":"chatcmpl-tool-bde540262d899c7f","name":"add","arguments":"{\"a\": + 5, \"b\": 4}","status":"completed"}],"previous_response_id":null,"usage":{"input_tokens":375,"output_tokens":31,"total_tokens":406,"input_tokens_details":{"cached_tokens":374},"output_tokens_details":{"reasoning_tokens":0}},"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":2048,"max_tool_calls":null,"parallel_tool_calls":false,"reasoning":{"effort":"none"},"store":false,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":{"type":"function","name":"add"},"tools":[{"type":"function","name":"add","description":"Add + two integers.","parameters":{"type":"object","properties":{"a":{"type":"integer"},"b":{"type":"integer"}},"required":["a","b"],"additionalProperties":false}}],"top_p":0.95,"top_logprobs":null,"truncation":"disabled","user":null,"background":null,"metadata":{}}} + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: null +timestamp: '2026-11-04T02:52:57.126660+00:00' +upstream_url: https://api.fireworks.ai/inference/v1/responses diff --git a/tests/cassettes/upstream_ir/tool_use/fireworks-responses-stream-02.yaml b/tests/cassettes/upstream_ir/tool_use/fireworks-responses-stream-02.yaml new file mode 100644 index 0000000..ef2f6bc --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/fireworks-responses-stream-02.yaml @@ -0,0 +1,192 @@ +filename: 2026-11-04-01a1a479-5646-7cf0-8750-549f9e33ed1e +request: + body: + input: + - content: Use add to add 2 and 3. After the result, use add to add that result + and 4. Then give the final answer. + role: user + - arguments: '{"a": 2, "b": 3}' + call_id: chatcmpl-tool-bf4314efe4595302 + id: fc_885d0b3c71cf42a5a856d31915d77ece + name: add + status: completed + type: function_call + - call_id: chatcmpl-tool-bf4314efe4595302 + output: '5' + type: function_call_output + - arguments: '{"a": 5, "b": 4}' + call_id: chatcmpl-tool-bde540262d899c7f + id: fc_b965613629284107a80239de17b03e8d + name: add + status: completed + type: function_call + - call_id: chatcmpl-tool-bde540262d899c7f + output: '9' + type: function_call_output + max_output_tokens: 2048 + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + parallel_tool_calls: false + reasoning: + effort: none + store: false + stream: true + tool_choice: none + tools: + - description: Add two integers. + name: add + parameters: + additionalProperties: false + properties: + a: + type: integer + b: + type: integer + required: + - a + - b + type: object + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '1097' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /inference/v1/responses + query_params: {} +request_id: 01a1a479-5646-7cf0-8750-549f9e33ed1e +response: + error_event: false + headers: + cache-control: no-cache + connection: keep-alive + content-type: text/event-stream; charset=utf-8 + x-request-id: 559cdcfe-8fb9-4b9a-8410-12048f7d13f7 + sse: + - 'data: {"type":"response.created","sequence_number":0,"response":{"id":"resp_0c90cf2322234b22ad5183d9b59861a2","object":"response","created_at":1793760777,"status":"in_progress","model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","output":[],"previous_response_id":null,"usage":null,"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":2048,"max_tool_calls":null,"parallel_tool_calls":false,"reasoning":{"effort":"none"},"store":false,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":"none","tools":[{"type":"function","name":"add","description":"Add + two integers.","parameters":{"type":"object","properties":{"a":{"type":"integer"},"b":{"type":"integer"}},"required":["a","b"],"additionalProperties":false}}],"top_p":1.0,"top_logprobs":null,"truncation":"disabled","user":null,"background":null,"metadata":{}}} + + ' + - ' + + ' + - 'data: {"type":"response.in_progress","sequence_number":1,"response":{"id":"resp_0c90cf2322234b22ad5183d9b59861a2","object":"response","created_at":1793760777,"status":"in_progress","model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","output":[],"previous_response_id":null,"usage":null,"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":2048,"max_tool_calls":null,"parallel_tool_calls":false,"reasoning":{"effort":"none"},"store":false,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":"none","tools":[{"type":"function","name":"add","description":"Add + two integers.","parameters":{"type":"object","properties":{"a":{"type":"integer"},"b":{"type":"integer"}},"required":["a","b"],"additionalProperties":false}}],"top_p":1.0,"top_logprobs":null,"truncation":"disabled","user":null,"background":null,"metadata":{}}} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.added","sequence_number":2,"output_index":0,"item":{"type":"message","id":"msg_eeedea70eadd486083e1cf10ab828020","status":"in_progress","role":"assistant","content":[]}} + + ' + - ' + + ' + - 'data: {"type":"response.content_part.added","sequence_number":3,"item_id":"msg_eeedea70eadd486083e1cf10ab828020","output_index":0,"content_index":0,"part":{"type":"output_text","text":"","annotations":[]}} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":4,"item_id":"msg_eeedea70eadd486083e1cf10ab828020","output_index":0,"content_index":0,"delta":"The","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":5,"item_id":"msg_eeedea70eadd486083e1cf10ab828020","output_index":0,"content_index":0,"delta":" + final","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":6,"item_id":"msg_eeedea70eadd486083e1cf10ab828020","output_index":0,"content_index":0,"delta":" + answer","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":7,"item_id":"msg_eeedea70eadd486083e1cf10ab828020","output_index":0,"content_index":0,"delta":" + is","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":8,"item_id":"msg_eeedea70eadd486083e1cf10ab828020","output_index":0,"content_index":0,"delta":" + ","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":9,"item_id":"msg_eeedea70eadd486083e1cf10ab828020","output_index":0,"content_index":0,"delta":"9","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":10,"item_id":"msg_eeedea70eadd486083e1cf10ab828020","output_index":0,"content_index":0,"delta":".","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":11,"item_id":"msg_eeedea70eadd486083e1cf10ab828020","output_index":0,"content_index":0,"delta":" ","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":12,"item_id":"msg_eeedea70eadd486083e1cf10ab828020","output_index":0,"content_index":0,"delta":"\n","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":13,"item_id":"msg_eeedea70eadd486083e1cf10ab828020","output_index":0,"content_index":0,"delta":"6","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.done","sequence_number":14,"item_id":"msg_eeedea70eadd486083e1cf10ab828020","output_index":0,"content_index":0,"text":"The + final answer is 9. \n6","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.content_part.done","sequence_number":15,"item_id":"msg_eeedea70eadd486083e1cf10ab828020","output_index":0,"content_index":0,"part":{"type":"output_text","text":"The + final answer is 9. \n6","annotations":[]}} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.done","sequence_number":16,"output_index":0,"item":{"type":"message","id":"msg_eeedea70eadd486083e1cf10ab828020","status":"completed","role":"assistant","content":[{"type":"output_text","text":"The + final answer is 9. \n6","annotations":[]}]}} + + ' + - ' + + ' + - 'data: {"type":"response.completed","sequence_number":17,"response":{"id":"resp_0c90cf2322234b22ad5183d9b59861a2","object":"response","created_at":1793760778,"status":"completed","model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","output":[{"id":"msg_eeedea70eadd486083e1cf10ab828020","type":"message","role":"assistant","content":[{"type":"output_text","text":"The + final answer is 9. \n6","annotations":[]}],"status":"completed"}],"previous_response_id":null,"usage":{"input_tokens":146,"output_tokens":11,"total_tokens":157,"input_tokens_details":{"cached_tokens":145},"output_tokens_details":{"reasoning_tokens":0}},"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":2048,"max_tool_calls":null,"parallel_tool_calls":false,"reasoning":{"effort":"none"},"store":false,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":"none","tools":[{"type":"function","name":"add","description":"Add + two integers.","parameters":{"type":"object","properties":{"a":{"type":"integer"},"b":{"type":"integer"}},"required":["a","b"],"additionalProperties":false}}],"top_p":0.95,"top_logprobs":null,"truncation":"disabled","user":null,"background":null,"metadata":{}}} + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: null +timestamp: '2026-11-04T02:52:57.798928+00:00' +upstream_url: https://api.fireworks.ai/inference/v1/responses diff --git a/tests/cassettes/upstream_ir/tool_use/gemini-chat_completions-non_stream-00.yaml b/tests/cassettes/upstream_ir/tool_use/gemini-chat_completions-non_stream-00.yaml new file mode 100644 index 0000000..96c98b5 --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/gemini-chat_completions-non_stream-00.yaml @@ -0,0 +1,82 @@ +filename: 2026-11-06-01a1af0d-4638-7d01-befb-3c9686d2e070 +request: + body: + max_completion_tokens: 1024 + messages: + - content: + - text: Read index.txt using read_file. It contains the path of another file. + Read that file too, then summarize its contents in one sentence. + type: text + role: user + model: gemini-3.1-flash-lite + parallel_tool_calls: false + reasoning_effort: minimal + stream: false + tool_choice: auto + tools: + - function: + description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '594' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /v1beta/openai/chat/completions + query_params: {} +request_id: 01a1af0d-4638-7d01-befb-3c9686d2e070 +response: + body: + choices: + - finish_reason: tool_calls + index: 0 + message: + role: assistant + tool_calls: + - extra_content: + google: + thought_signature: EnMKcQFpFH0T6SCCimkhPCQSO5eGtVGq6G0HBFdCkpxca5AjDbs/sFSD7U3o8+a/X8pqjYGmKKt8xyDbUSYDuM0kK8NjfiRpNCSJaDQwOBtCNM/nZ9A+dKGlA0QGyK9PGXKu2LyJQ0PVis6NAYn1eiiq6dt0 + function: + arguments: '{"path":"index.txt"}' + name: read_file + id: call_14462867661861740233 + type: function + created: 1793938245 + id: RVPtasDMFNWEytMPucGewAI + model: gemini-3.1-flash-lite + object: chat.completion + usage: + completion_tokens: 18 + prompt_tokens: 75 + total_tokens: 93 + body_bytes: !!binary | + eyJjaG9pY2VzIjpbeyJmaW5pc2hfcmVhc29uIjoidG9vbF9jYWxscyIsImluZGV4IjowLCJtZXNz + YWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJ0b29sX2NhbGxzIjpbeyJleHRyYV9jb250ZW50Ijp7 + Imdvb2dsZSI6eyJ0aG91Z2h0X3NpZ25hdHVyZSI6IkVuTUtjUUZwRkgwVDZTQ0NpbWtoUENRU081 + ZUd0VkdxNkcwSEJGZENrcHhjYTVBakRicy9zRlNEN1UzbzgrYS9YOHBxallHbUtLdDh4eURiVVNZ + RHVNMGtLOE5qZmlScE5DU0phRFF3T0J0Q05NL25aOUErZEtHbEEwUUd5SzlQR1hLdTJMeUpRMFBW + aXM2TkFZbjFlaWlxNmR0MCJ9fSwiZnVuY3Rpb24iOnsiYXJndW1lbnRzIjoie1wicGF0aFwiOlwi + aW5kZXgudHh0XCJ9IiwibmFtZSI6InJlYWRfZmlsZSJ9LCJpZCI6ImNhbGxfMTQ0NjI4Njc2NjE4 + NjE3NDAyMzMiLCJ0eXBlIjoiZnVuY3Rpb24ifV19fV0sImNyZWF0ZWQiOjE3OTM5MzgyNDUsImlk + IjoiUlZQdGFzRE1GTldFeXRNUHVjR2V3QUkiLCJtb2RlbCI6ImdlbWluaS0zLjEtZmxhc2gtbGl0 + ZSIsIm9iamVjdCI6ImNoYXQuY29tcGxldGlvbiIsInVzYWdlIjp7ImNvbXBsZXRpb25fdG9rZW5z + IjoxOCwicHJvbXB0X3Rva2VucyI6NzUsInRvdGFsX3Rva2VucyI6OTN9fQ== + headers: + content-type: application/json + status_code: 200 +timestamp: '2026-11-06T04:10:45.176067+00:00' +upstream_url: https://generativelanguage.googleapis.com/v1beta/openai/chat/completions diff --git a/tests/cassettes/upstream_ir/tool_use/gemini-chat_completions-non_stream-01.yaml b/tests/cassettes/upstream_ir/tool_use/gemini-chat_completions-non_stream-01.yaml new file mode 100644 index 0000000..8e6f97a --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/gemini-chat_completions-non_stream-01.yaml @@ -0,0 +1,95 @@ +filename: 2026-11-06-01a1af0d-4876-7922-81cb-450444ee4f5c +request: + body: + max_completion_tokens: 1024 + messages: + - content: + - text: Read index.txt using read_file. It contains the path of another file. + Read that file too, then summarize its contents in one sentence. + type: text + role: user + - role: assistant + tool_calls: + - extra_content: + google: + thought_signature: EnMKcQFpFH0T6SCCimkhPCQSO5eGtVGq6G0HBFdCkpxca5AjDbs/sFSD7U3o8+a/X8pqjYGmKKt8xyDbUSYDuM0kK8NjfiRpNCSJaDQwOBtCNM/nZ9A+dKGlA0QGyK9PGXKu2LyJQ0PVis6NAYn1eiiq6dt0 + function: + arguments: '{"path":"index.txt"}' + name: read_file + id: call_14462867661861740233 + type: function + - content: garden.txt + role: tool + tool_call_id: call_14462867661861740233 + model: gemini-3.1-flash-lite + parallel_tool_calls: false + reasoning_effort: minimal + stream: false + tool_choice: auto + tools: + - function: + description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '1044' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /v1beta/openai/chat/completions + query_params: {} +request_id: 01a1af0d-4876-7922-81cb-450444ee4f5c +response: + body: + choices: + - finish_reason: tool_calls + index: 0 + message: + role: assistant + tool_calls: + - extra_content: + google: + thought_signature: EnMKcQFpFH0TBTxFH37SuNO5TucmgeOU0UnuKRqRa1izfZY5KYP+PRvZMLE/tW3Nl6gmiIS0rWAUuYqCOIYgzFsXmnSIlAqZtCt/xn2dYriFlMhGSn5XirTmVOEnFBhJwqVVWeTVJ6nruuAGJfyMurHG8fht + function: + arguments: '{"path":"garden.txt"}' + name: read_file + id: call_10396871796320240256 + type: function + created: 1793938246 + id: RVPtaqyJN5bfytMPrcuRuAI + model: gemini-3.1-flash-lite + object: chat.completion + usage: + completion_tokens: 18 + prompt_tokens: 109 + total_tokens: 127 + body_bytes: !!binary | + eyJjaG9pY2VzIjpbeyJmaW5pc2hfcmVhc29uIjoidG9vbF9jYWxscyIsImluZGV4IjowLCJtZXNz + YWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJ0b29sX2NhbGxzIjpbeyJleHRyYV9jb250ZW50Ijp7 + Imdvb2dsZSI6eyJ0aG91Z2h0X3NpZ25hdHVyZSI6IkVuTUtjUUZwRkgwVEJUeEZIMzdTdU5PNVR1 + Y21nZU9VMFVudUtScVJhMWl6ZlpZNUtZUCtQUnZaTUxFL3RXM05sNmdtaUlTMHJXQVV1WXFDT0lZ + Z3pGc1htblNJbEFxWnRDdC94bjJkWXJpRmxNaEdTbjVYaXJUbVZPRW5GQmhKd3FWVldlVFZKNm5y + dXVBR0pmeU11ckhHOGZodCJ9fSwiZnVuY3Rpb24iOnsiYXJndW1lbnRzIjoie1wicGF0aFwiOlwi + Z2FyZGVuLnR4dFwifSIsIm5hbWUiOiJyZWFkX2ZpbGUifSwiaWQiOiJjYWxsXzEwMzk2ODcxNzk2 + MzIwMjQwMjU2IiwidHlwZSI6ImZ1bmN0aW9uIn1dfX1dLCJjcmVhdGVkIjoxNzkzOTM4MjQ2LCJp + ZCI6IlJWUHRhcXlKTjViZnl0TVByY3VSdUFJIiwibW9kZWwiOiJnZW1pbmktMy4xLWZsYXNoLWxp + dGUiLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24iLCJ1c2FnZSI6eyJjb21wbGV0aW9uX3Rva2Vu + cyI6MTgsInByb21wdF90b2tlbnMiOjEwOSwidG90YWxfdG9rZW5zIjoxMjd9fQ== + headers: + content-type: application/json + status_code: 200 +timestamp: '2026-11-06T04:10:45.750785+00:00' +upstream_url: https://generativelanguage.googleapis.com/v1beta/openai/chat/completions diff --git a/tests/cassettes/upstream_ir/tool_use/gemini-chat_completions-non_stream-02.yaml b/tests/cassettes/upstream_ir/tool_use/gemini-chat_completions-non_stream-02.yaml new file mode 100644 index 0000000..77a55a5 --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/gemini-chat_completions-non_stream-02.yaml @@ -0,0 +1,104 @@ +filename: 2026-11-06-01a1af0d-4b37-7f81-a427-c507e25db9f7 +request: + body: + max_completion_tokens: 1024 + messages: + - content: + - text: Read index.txt using read_file. It contains the path of another file. + Read that file too, then summarize its contents in one sentence. + type: text + role: user + - role: assistant + tool_calls: + - extra_content: + google: + thought_signature: EnMKcQFpFH0T6SCCimkhPCQSO5eGtVGq6G0HBFdCkpxca5AjDbs/sFSD7U3o8+a/X8pqjYGmKKt8xyDbUSYDuM0kK8NjfiRpNCSJaDQwOBtCNM/nZ9A+dKGlA0QGyK9PGXKu2LyJQ0PVis6NAYn1eiiq6dt0 + function: + arguments: '{"path":"index.txt"}' + name: read_file + id: call_14462867661861740233 + type: function + - content: garden.txt + role: tool + tool_call_id: call_14462867661861740233 + - role: assistant + tool_calls: + - extra_content: + google: + thought_signature: EnMKcQFpFH0TBTxFH37SuNO5TucmgeOU0UnuKRqRa1izfZY5KYP+PRvZMLE/tW3Nl6gmiIS0rWAUuYqCOIYgzFsXmnSIlAqZtCt/xn2dYriFlMhGSn5XirTmVOEnFBhJwqVVWeTVJ6nruuAGJfyMurHG8fht + function: + arguments: '{"path":"garden.txt"}' + name: read_file + id: call_10396871796320240256 + type: function + - content: Water the tomatoes every morning and harvest ripe fruit. + role: tool + tool_call_id: call_10396871796320240256 + model: gemini-3.1-flash-lite + parallel_tool_calls: false + reasoning_effort: minimal + stream: false + tool_choice: auto + tools: + - function: + description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '1541' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /v1beta/openai/chat/completions + query_params: {} +request_id: 01a1af0d-4b37-7f81-a427-c507e25db9f7 +response: + body: + choices: + - finish_reason: stop + index: 0 + message: + content: The document provides instructions to water tomato plants every morning + and harvest the fruit once ripe. + extra_content: + google: + thought_signature: EnMKcQFpFH0T76NfxMGqIgbHIghfsbt7w9NQ3tIJ7cb05DnQY5DyayumFeZzlo60tV4okEXZOhI9Bj3kPraJ34hIyQnw2ZC2ddSGS+n/2FJUt1EeffyVEULJAc4yBs6vG/mcECoNjnNdefcji99kEfBqfSve + role: assistant + created: 1793938247 + id: RlPtapWuJeThytMPteOWwAE + model: gemini-3.1-flash-lite + object: chat.completion + usage: + completion_tokens: 17 + prompt_tokens: 150 + total_tokens: 167 + body_bytes: !!binary | + eyJjaG9pY2VzIjpbeyJmaW5pc2hfcmVhc29uIjoic3RvcCIsImluZGV4IjowLCJtZXNzYWdlIjp7 + ImNvbnRlbnQiOiJUaGUgZG9jdW1lbnQgcHJvdmlkZXMgaW5zdHJ1Y3Rpb25zIHRvIHdhdGVyIHRv + bWF0byBwbGFudHMgZXZlcnkgbW9ybmluZyBhbmQgaGFydmVzdCB0aGUgZnJ1aXQgb25jZSByaXBl + LiIsImV4dHJhX2NvbnRlbnQiOnsiZ29vZ2xlIjp7InRob3VnaHRfc2lnbmF0dXJlIjoiRW5NS2NR + RnBGSDBUNzZOZnhNR3FJZ2JISWdoZnNidDd3OU5RM3RJSjdjYjA1RG5RWTVEeWF5dW1GZVp6bG82 + MHRWNG9rRVhaT2hJOUJqM2tQcmFKMzRoSXlRbncyWkMyZGRTR1Mrbi8yRkpVdDFFZWZmeVZFVUxK + QWM0eUJzNnZHL21jRUNvTmpuTmRlZmNqaTk5a0VmQnFmU3ZlIn19LCJyb2xlIjoiYXNzaXN0YW50 + In19XSwiY3JlYXRlZCI6MTc5MzkzODI0NywiaWQiOiJSbFB0YXBXdUplVGh5dE1QdGVPV3dBRSIs + Im1vZGVsIjoiZ2VtaW5pLTMuMS1mbGFzaC1saXRlIiwib2JqZWN0IjoiY2hhdC5jb21wbGV0aW9u + IiwidXNhZ2UiOnsiY29tcGxldGlvbl90b2tlbnMiOjE3LCJwcm9tcHRfdG9rZW5zIjoxNTAsInRv + dGFsX3Rva2VucyI6MTY3fX0= + headers: + content-type: application/json + status_code: 200 +timestamp: '2026-11-06T04:10:46.455825+00:00' +upstream_url: https://generativelanguage.googleapis.com/v1beta/openai/chat/completions diff --git a/tests/cassettes/upstream_ir/tool_use/gemini-chat_completions-stream-00.yaml b/tests/cassettes/upstream_ir/tool_use/gemini-chat_completions-stream-00.yaml new file mode 100644 index 0000000..0862ffb --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/gemini-chat_completions-stream-00.yaml @@ -0,0 +1,71 @@ +filename: 2026-11-06-01a1af0d-3d24-76b3-977f-82ee94478583 +request: + body: + max_completion_tokens: 1024 + messages: + - content: + - text: Read index.txt using read_file. It contains the path of another file. + Read that file too, then summarize its contents in one sentence. + type: text + role: user + model: gemini-3.1-flash-lite + parallel_tool_calls: false + reasoning_effort: minimal + stream: true + stream_options: + include_usage: true + tool_choice: auto + tools: + - function: + description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '633' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /v1beta/openai/chat/completions + query_params: {} +request_id: 01a1af0d-3d24-76b3-977f-82ee94478583 +response: + error_event: false + headers: + content-type: text/event-stream + sse: + - 'data: {"choices":[{"delta":{"role":"assistant","tool_calls":[{"extra_content":{"google":{"thought_signature":"EnMKcQFpFH0TBCf3MhrW5EPapkFsL4ST3JJ/OPCqi+MtWEkiDq6ffxc2TtAGZA20egiuVTqmyyVEVJRJjpRSBolUxs+eN0OyqdD72aLBfG1HI8aZE/pvrFgRsgl7AMl5WR7u3T3qTpGOcMcU7QX7pVP7dD9l"}},"function":{"arguments":"{\"path\":\"index.txt\"}","name":"read_file"},"id":"call_17906014837408201138","type":"function"}]},"index":0}],"created":1793938243,"id":"Q1Ptapm3A9-xuMYPz9-jsAI","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":18,"prompt_tokens":75,"total_tokens":93}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"role":"assistant"},"finish_reason":"stop","index":0}],"created":1793938243,"id":"Q1Ptapm3A9-xuMYPz9-jsAI","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":18,"prompt_tokens":75,"total_tokens":93}} + + ' + - ' + + ' + - 'data: [DONE] + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: '[DONE]' +timestamp: '2026-11-06T04:10:42.852359+00:00' +upstream_url: https://generativelanguage.googleapis.com/v1beta/openai/chat/completions diff --git a/tests/cassettes/upstream_ir/tool_use/gemini-chat_completions-stream-01.yaml b/tests/cassettes/upstream_ir/tool_use/gemini-chat_completions-stream-01.yaml new file mode 100644 index 0000000..2bc6df2 --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/gemini-chat_completions-stream-01.yaml @@ -0,0 +1,84 @@ +filename: 2026-11-06-01a1af0d-3fea-76d3-8e0e-7af288a71cb2 +request: + body: + max_completion_tokens: 1024 + messages: + - content: + - text: Read index.txt using read_file. It contains the path of another file. + Read that file too, then summarize its contents in one sentence. + type: text + role: user + - role: assistant + tool_calls: + - extra_content: + google: + thought_signature: EnMKcQFpFH0TBCf3MhrW5EPapkFsL4ST3JJ/OPCqi+MtWEkiDq6ffxc2TtAGZA20egiuVTqmyyVEVJRJjpRSBolUxs+eN0OyqdD72aLBfG1HI8aZE/pvrFgRsgl7AMl5WR7u3T3qTpGOcMcU7QX7pVP7dD9l + function: + arguments: '{"path":"index.txt"}' + name: read_file + id: call_17906014837408201138 + type: function + - content: garden.txt + role: tool + tool_call_id: call_17906014837408201138 + model: gemini-3.1-flash-lite + parallel_tool_calls: false + reasoning_effort: minimal + stream: true + stream_options: + include_usage: true + tool_choice: auto + tools: + - function: + description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '1083' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /v1beta/openai/chat/completions + query_params: {} +request_id: 01a1af0d-3fea-76d3-8e0e-7af288a71cb2 +response: + error_event: false + headers: + content-type: text/event-stream + sse: + - 'data: {"choices":[{"delta":{"role":"assistant","tool_calls":[{"extra_content":{"google":{"thought_signature":"EnMKcQFpFH0TnD9yNQ7UjAisfTTr7kiJhpVqui8fz4/yLFokDYnxW3jfYVKD/XeH7Djx3BLwPQ9EY8vakquXM97L+WZG4ekwD+iYMv4ZkEkbuKHEQODlsHv9NAWP2msJXzu7GuJtH0kDMRiT1JA6pA0hqQk1"}},"function":{"arguments":"{\"path\":\"garden.txt\"}","name":"read_file"},"id":"call_2523317766613766412","type":"function"}]},"index":0}],"created":1793938244,"id":"Q1PtaqmTLuWtuMYPz5aQqAI","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":18,"prompt_tokens":109,"total_tokens":127}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"role":"assistant"},"finish_reason":"stop","index":0}],"created":1793938244,"id":"Q1PtaqmTLuWtuMYPz5aQqAI","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":18,"prompt_tokens":109,"total_tokens":127}} + + ' + - ' + + ' + - 'data: [DONE] + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: '[DONE]' +timestamp: '2026-11-06T04:10:43.562780+00:00' +upstream_url: https://generativelanguage.googleapis.com/v1beta/openai/chat/completions diff --git a/tests/cassettes/upstream_ir/tool_use/gemini-chat_completions-stream-02.yaml b/tests/cassettes/upstream_ir/tool_use/gemini-chat_completions-stream-02.yaml new file mode 100644 index 0000000..c106a0a --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/gemini-chat_completions-stream-02.yaml @@ -0,0 +1,111 @@ +filename: 2026-11-06-01a1af0d-4312-7af2-b5f9-2269a64e88ef +request: + body: + max_completion_tokens: 1024 + messages: + - content: + - text: Read index.txt using read_file. It contains the path of another file. + Read that file too, then summarize its contents in one sentence. + type: text + role: user + - role: assistant + tool_calls: + - extra_content: + google: + thought_signature: EnMKcQFpFH0TBCf3MhrW5EPapkFsL4ST3JJ/OPCqi+MtWEkiDq6ffxc2TtAGZA20egiuVTqmyyVEVJRJjpRSBolUxs+eN0OyqdD72aLBfG1HI8aZE/pvrFgRsgl7AMl5WR7u3T3qTpGOcMcU7QX7pVP7dD9l + function: + arguments: '{"path":"index.txt"}' + name: read_file + id: call_17906014837408201138 + type: function + - content: garden.txt + role: tool + tool_call_id: call_17906014837408201138 + - role: assistant + tool_calls: + - extra_content: + google: + thought_signature: EnMKcQFpFH0TnD9yNQ7UjAisfTTr7kiJhpVqui8fz4/yLFokDYnxW3jfYVKD/XeH7Djx3BLwPQ9EY8vakquXM97L+WZG4ekwD+iYMv4ZkEkbuKHEQODlsHv9NAWP2msJXzu7GuJtH0kDMRiT1JA6pA0hqQk1 + function: + arguments: '{"path":"garden.txt"}' + name: read_file + id: call_2523317766613766412 + type: function + - content: Water the tomatoes every morning and harvest ripe fruit. + role: tool + tool_call_id: call_2523317766613766412 + model: gemini-3.1-flash-lite + parallel_tool_calls: false + reasoning_effort: minimal + stream: true + stream_options: + include_usage: true + tool_choice: auto + tools: + - function: + description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '1578' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /v1beta/openai/chat/completions + query_params: {} +request_id: 01a1af0d-4312-7af2-b5f9-2269a64e88ef +response: + error_event: false + headers: + content-type: text/event-stream + sse: + - 'data: {"choices":[{"delta":{"content":"This","role":"assistant"},"index":0}],"created":1793938245,"id":"RFPtauT8IaKO1sgPpeLp8QE","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":1,"prompt_tokens":150,"total_tokens":151}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" text provides instructions for maintaining + a tomato plant, specifically advising that it be watered every","role":"assistant"},"index":0}],"created":1793938245,"id":"RFPtauT8IaKO1sgPpeLp8QE","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":17,"prompt_tokens":150,"total_tokens":167}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"content":" morning and that ripe fruit should be + harvested.","role":"assistant"},"index":0}],"created":1793938245,"id":"RFPtauT8IaKO1sgPpeLp8QE","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":26,"prompt_tokens":150,"total_tokens":176}} + + ' + - ' + + ' + - 'data: {"choices":[{"delta":{"extra_content":{"google":{"thought_signature":"EnMKcQFpFH0TzkHQdm5/P0OvnM2takhCxvdKxVGMg2EnUZzX+zjE8qZVLmvPpexJ6pD8yYQqzCtZWzOostdaikJpDmes5aVujqYEGwB2c0QJLXM35bIAuh66dmfulTdll1eL1D2f80HsyIgiU/Q+FnZp1UCV"}},"role":"assistant"},"finish_reason":"stop","index":0}],"created":1793938245,"id":"RFPtauT8IaKO1sgPpeLp8QE","model":"gemini-3.1-flash-lite","object":"chat.completion.chunk","usage":{"completion_tokens":26,"prompt_tokens":150,"total_tokens":176}} + + ' + - ' + + ' + - 'data: [DONE] + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: '[DONE]' +timestamp: '2026-11-06T04:10:44.370114+00:00' +upstream_url: https://generativelanguage.googleapis.com/v1beta/openai/chat/completions diff --git a/tests/cassettes/upstream_ir/tool_use/openrouter-responses-non_stream-00.yaml b/tests/cassettes/upstream_ir/tool_use/openrouter-responses-non_stream-00.yaml new file mode 100644 index 0000000..97ec4ae --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/openrouter-responses-non_stream-00.yaml @@ -0,0 +1,157 @@ +filename: 2026-11-04-01a1a489-c140-7c31-aaf2-46a14bcfd428 +request: + body: + input: + - content: Use add to add 2 and 3. After the result, use add to add that result + and 4. Then give the final answer. + role: user + max_output_tokens: 1024 + model: nvidia/nemotron-3.5-lightning:free + parallel_tool_calls: false + provider: + allow_fallbacks: false + max_price: + completion: 0 + prompt: 0 + request: 0 + reasoning: + effort: none + store: false + stream: false + tool_choice: + name: add + type: function + tools: + - description: Add two integers. + name: add + parameters: + additionalProperties: false + properties: + a: + type: integer + b: + type: integer + required: + - a + - b + type: object + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '655' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /api/v1/responses + query_params: {} +request_id: 01a1a489-c140-7c31-aaf2-46a14bcfd428 +response: + body: + access_programs: null + background: false + completed_at: 1793761854 + created_at: 1793761853 + error: null + frequency_penalty: 0 + id: gen-1793761853-OkSXGYRZKQ9cjET5sYIr + incomplete_details: null + instructions: null + max_output_tokens: 1024 + max_tool_calls: null + metadata: {} + model: nvidia/nemotron-3.5-lightning:free + object: response + output: + - arguments: "{\n \"a\": 2,\n \"b\": 3\n}" + call_id: call-8c844a23-0c02-41a4-977b-449244714607 + id: fc_tmp_gkvflek9nk4 + name: add + status: completed + type: function_call + parallel_tool_calls: false + presence_penalty: 0 + previous_response_id: null + prompt_cache_key: null + prompt_cache_options: null + reasoning: + effort: none + safety_identifier: null + service_tier: auto + status: completed + store: false + temperature: 1 + text: + format: + type: text + tool_choice: + name: add + type: function + tools: + - description: Add two integers. + name: add + parameters: + additionalProperties: false + properties: + a: + type: integer + b: + type: integer + required: + - a + - b + type: object + strict: null + type: function + top_logprobs: 0 + top_p: 1 + truncation: disabled + usage: + cost: 0 + cost_details: + upstream_inference_cost: 0 + upstream_inference_input_cost: 0 + upstream_inference_output_cost: 0 + input_tokens: 324 + input_tokens_details: + cached_tokens: 0 + is_byok: false + output_tokens: 17 + output_tokens_details: + reasoning_tokens: 0 + total_tokens: 341 + body_bytes: !!binary | + CiAgICAgICAgIAp7ImlkIjoiZ2VuLTE3OTM3NjE4NTMtT2tTWEdZUlpLUTljakVUNXNZSXIiLCJv + YmplY3QiOiJyZXNwb25zZSIsImNyZWF0ZWRfYXQiOjE3OTM3NjE4NTMsIm1vZGVsIjoibnZpZGlh + L25lbW90cm9uLTMuNS1saWdodG5pbmc6ZnJlZSIsInN0YXR1cyI6ImNvbXBsZXRlZCIsImNvbXBs + ZXRlZF9hdCI6MTc5Mzc2MTg1NCwib3V0cHV0IjpbeyJpZCI6ImZjX3RtcF9na3ZmbGVrOW5rNCIs + InR5cGUiOiJmdW5jdGlvbl9jYWxsIiwic3RhdHVzIjoiY29tcGxldGVkIiwiY2FsbF9pZCI6ImNh + bGwtOGM4NDRhMjMtMGMwMi00MWE0LTk3N2ItNDQ5MjQ0NzE0NjA3IiwibmFtZSI6ImFkZCIsImFy + Z3VtZW50cyI6IntcbiAgXCJhXCI6IDIsXG4gIFwiYlwiOiAzXG59In1dLCJlcnJvciI6bnVsbCwi + aW5jb21wbGV0ZV9kZXRhaWxzIjpudWxsLCJhY2Nlc3NfcHJvZ3JhbXMiOm51bGwsInRvb2xzIjpb + eyJ0eXBlIjoiZnVuY3Rpb24iLCJuYW1lIjoiYWRkIiwiZGVzY3JpcHRpb24iOiJBZGQgdHdvIGlu + dGVnZXJzLiIsInBhcmFtZXRlcnMiOnsidHlwZSI6Im9iamVjdCIsInByb3BlcnRpZXMiOnsiYSI6 + eyJ0eXBlIjoiaW50ZWdlciJ9LCJiIjp7InR5cGUiOiJpbnRlZ2VyIn19LCJyZXF1aXJlZCI6WyJh + IiwiYiJdLCJhZGRpdGlvbmFsUHJvcGVydGllcyI6ZmFsc2V9LCJzdHJpY3QiOm51bGx9XSwidG9v + bF9jaG9pY2UiOnsidHlwZSI6ImZ1bmN0aW9uIiwibmFtZSI6ImFkZCJ9LCJwYXJhbGxlbF90b29s + X2NhbGxzIjpmYWxzZSwibWF4X291dHB1dF90b2tlbnMiOjEwMjQsInRlbXBlcmF0dXJlIjoxLCJ0 + b3BfcCI6MSwicHJlc2VuY2VfcGVuYWx0eSI6MCwiZnJlcXVlbmN5X3BlbmFsdHkiOjAsInRvcF9s + b2dwcm9icyI6MCwibWF4X3Rvb2xfY2FsbHMiOm51bGwsIm1ldGFkYXRhIjp7fSwiYmFja2dyb3Vu + ZCI6ZmFsc2UsInByZXZpb3VzX3Jlc3BvbnNlX2lkIjpudWxsLCJzZXJ2aWNlX3RpZXIiOiJhdXRv + IiwidHJ1bmNhdGlvbiI6ImRpc2FibGVkIiwic3RvcmUiOmZhbHNlLCJpbnN0cnVjdGlvbnMiOm51 + bGwsInRleHQiOnsiZm9ybWF0Ijp7InR5cGUiOiJ0ZXh0In19LCJyZWFzb25pbmciOnsiZWZmb3J0 + Ijoibm9uZSJ9LCJzYWZldHlfaWRlbnRpZmllciI6bnVsbCwicHJvbXB0X2NhY2hlX2tleSI6bnVs + bCwicHJvbXB0X2NhY2hlX29wdGlvbnMiOm51bGwsInVzYWdlIjp7ImlucHV0X3Rva2VucyI6MzI0 + LCJpbnB1dF90b2tlbnNfZGV0YWlscyI6eyJjYWNoZWRfdG9rZW5zIjowfSwib3V0cHV0X3Rva2Vu + cyI6MTcsIm91dHB1dF90b2tlbnNfZGV0YWlscyI6eyJyZWFzb25pbmdfdG9rZW5zIjowfSwidG90 + YWxfdG9rZW5zIjozNDEsImNvc3QiOjAsImlzX2J5b2siOmZhbHNlLCJjb3N0X2RldGFpbHMiOnsi + dXBzdHJlYW1faW5mZXJlbmNlX2Nvc3QiOjAsInVwc3RyZWFtX2luZmVyZW5jZV9pbnB1dF9jb3N0 + IjowLCJ1cHN0cmVhbV9pbmZlcmVuY2Vfb3V0cHV0X2Nvc3QiOjB9fX0= + headers: + connection: keep-alive + content-type: application/json + status_code: 200 +timestamp: '2026-11-04T03:10:53.761005+00:00' +upstream_url: https://openrouter.ai/api/v1/responses diff --git a/tests/cassettes/upstream_ir/tool_use/openrouter-responses-non_stream-01.yaml b/tests/cassettes/upstream_ir/tool_use/openrouter-responses-non_stream-01.yaml new file mode 100644 index 0000000..afe4ae2 --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/openrouter-responses-non_stream-01.yaml @@ -0,0 +1,166 @@ +filename: 2026-11-04-01a1a489-c48d-7883-9d54-8123763449aa +request: + body: + input: + - content: Use add to add 2 and 3. After the result, use add to add that result + and 4. Then give the final answer. + role: user + - arguments: "{\n \"a\": 2,\n \"b\": 3\n}" + call_id: call-8c844a23-0c02-41a4-977b-449244714607 + id: fc_tmp_gkvflek9nk4 + name: add + status: completed + type: function_call + - call_id: call-8c844a23-0c02-41a4-977b-449244714607 + output: '5' + type: function_call_output + max_output_tokens: 1024 + model: nvidia/nemotron-3.5-lightning:free + parallel_tool_calls: false + provider: + allow_fallbacks: false + max_price: + completion: 0 + prompt: 0 + request: 0 + reasoning: + effort: none + store: false + stream: false + tool_choice: + name: add + type: function + tools: + - description: Add two integers. + name: add + parameters: + additionalProperties: false + properties: + a: + type: integer + b: + type: integer + required: + - a + - b + type: object + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '937' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /api/v1/responses + query_params: {} +request_id: 01a1a489-c48d-7883-9d54-8123763449aa +response: + body: + access_programs: null + background: false + completed_at: 1793761855 + created_at: 1793761854 + error: null + frequency_penalty: 0 + id: gen-1793761854-6ITQQDAOFYotfXztJ2hy + incomplete_details: null + instructions: null + max_output_tokens: 1024 + max_tool_calls: null + metadata: {} + model: nvidia/nemotron-3.5-lightning:free + object: response + output: + - arguments: '{ "a": 5, "b": 4 }' + call_id: call-4cf2492f-dc77-4855-a424-e9a5c45fb859 + id: fc_tmp_wcw53tswhdb + name: add + status: completed + type: function_call + parallel_tool_calls: false + presence_penalty: 0 + previous_response_id: null + prompt_cache_key: null + prompt_cache_options: null + reasoning: + effort: none + safety_identifier: null + service_tier: auto + status: completed + store: false + temperature: 1 + text: + format: + type: text + tool_choice: + name: add + type: function + tools: + - description: Add two integers. + name: add + parameters: + additionalProperties: false + properties: + a: + type: integer + b: + type: integer + required: + - a + - b + type: object + strict: null + type: function + top_logprobs: 0 + top_p: 1 + truncation: disabled + usage: + cost: 0 + cost_details: + upstream_inference_cost: 0 + upstream_inference_input_cost: 0 + upstream_inference_output_cost: 0 + input_tokens: 374 + input_tokens_details: + cached_tokens: 0 + is_byok: false + output_tokens: 14 + output_tokens_details: + reasoning_tokens: 0 + total_tokens: 388 + body_bytes: !!binary | + CiAgICAgICAgIAp7ImlkIjoiZ2VuLTE3OTM3NjE4NTQtNklUUVFEQU9GWW90Zlh6dEoyaHkiLCJv + YmplY3QiOiJyZXNwb25zZSIsImNyZWF0ZWRfYXQiOjE3OTM3NjE4NTQsIm1vZGVsIjoibnZpZGlh + L25lbW90cm9uLTMuNS1saWdodG5pbmc6ZnJlZSIsInN0YXR1cyI6ImNvbXBsZXRlZCIsImNvbXBs + ZXRlZF9hdCI6MTc5Mzc2MTg1NSwib3V0cHV0IjpbeyJpZCI6ImZjX3RtcF93Y3c1M3Rzd2hkYiIs + InR5cGUiOiJmdW5jdGlvbl9jYWxsIiwic3RhdHVzIjoiY29tcGxldGVkIiwiY2FsbF9pZCI6ImNh + bGwtNGNmMjQ5MmYtZGM3Ny00ODU1LWE0MjQtZTlhNWM0NWZiODU5IiwibmFtZSI6ImFkZCIsImFy + Z3VtZW50cyI6InsgXCJhXCI6IDUsIFwiYlwiOiA0IH0ifV0sImVycm9yIjpudWxsLCJpbmNvbXBs + ZXRlX2RldGFpbHMiOm51bGwsImFjY2Vzc19wcm9ncmFtcyI6bnVsbCwidG9vbHMiOlt7InR5cGUi + OiJmdW5jdGlvbiIsIm5hbWUiOiJhZGQiLCJkZXNjcmlwdGlvbiI6IkFkZCB0d28gaW50ZWdlcnMu + IiwicGFyYW1ldGVycyI6eyJ0eXBlIjoib2JqZWN0IiwicHJvcGVydGllcyI6eyJhIjp7InR5cGUi + OiJpbnRlZ2VyIn0sImIiOnsidHlwZSI6ImludGVnZXIifX0sInJlcXVpcmVkIjpbImEiLCJiIl0s + ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjpmYWxzZX0sInN0cmljdCI6bnVsbH1dLCJ0b29sX2Nob2lj + ZSI6eyJ0eXBlIjoiZnVuY3Rpb24iLCJuYW1lIjoiYWRkIn0sInBhcmFsbGVsX3Rvb2xfY2FsbHMi + OmZhbHNlLCJtYXhfb3V0cHV0X3Rva2VucyI6MTAyNCwidGVtcGVyYXR1cmUiOjEsInRvcF9wIjox + LCJwcmVzZW5jZV9wZW5hbHR5IjowLCJmcmVxdWVuY3lfcGVuYWx0eSI6MCwidG9wX2xvZ3Byb2Jz + IjowLCJtYXhfdG9vbF9jYWxscyI6bnVsbCwibWV0YWRhdGEiOnt9LCJiYWNrZ3JvdW5kIjpmYWxz + ZSwicHJldmlvdXNfcmVzcG9uc2VfaWQiOm51bGwsInNlcnZpY2VfdGllciI6ImF1dG8iLCJ0cnVu + Y2F0aW9uIjoiZGlzYWJsZWQiLCJzdG9yZSI6ZmFsc2UsImluc3RydWN0aW9ucyI6bnVsbCwidGV4 + dCI6eyJmb3JtYXQiOnsidHlwZSI6InRleHQifX0sInJlYXNvbmluZyI6eyJlZmZvcnQiOiJub25l + In0sInNhZmV0eV9pZGVudGlmaWVyIjpudWxsLCJwcm9tcHRfY2FjaGVfa2V5IjpudWxsLCJwcm9t + cHRfY2FjaGVfb3B0aW9ucyI6bnVsbCwidXNhZ2UiOnsiaW5wdXRfdG9rZW5zIjozNzQsImlucHV0 + X3Rva2Vuc19kZXRhaWxzIjp7ImNhY2hlZF90b2tlbnMiOjB9LCJvdXRwdXRfdG9rZW5zIjoxNCwi + b3V0cHV0X3Rva2Vuc19kZXRhaWxzIjp7InJlYXNvbmluZ190b2tlbnMiOjB9LCJ0b3RhbF90b2tl + bnMiOjM4OCwiY29zdCI6MCwiaXNfYnlvayI6ZmFsc2UsImNvc3RfZGV0YWlscyI6eyJ1cHN0cmVh + bV9pbmZlcmVuY2VfY29zdCI6MCwidXBzdHJlYW1faW5mZXJlbmNlX2lucHV0X2Nvc3QiOjAsInVw + c3RyZWFtX2luZmVyZW5jZV9vdXRwdXRfY29zdCI6MH19fQ== + headers: + connection: keep-alive + content-type: application/json + status_code: 200 +timestamp: '2026-11-04T03:10:54.605734+00:00' +upstream_url: https://openrouter.ai/api/v1/responses diff --git a/tests/cassettes/upstream_ir/tool_use/openrouter-responses-non_stream-02.yaml b/tests/cassettes/upstream_ir/tool_use/openrouter-responses-non_stream-02.yaml new file mode 100644 index 0000000..625c0d1 --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/openrouter-responses-non_stream-02.yaml @@ -0,0 +1,174 @@ +filename: 2026-11-04-01a1a489-c7b3-7de1-8fdf-32558b93a45f +request: + body: + input: + - content: Use add to add 2 and 3. After the result, use add to add that result + and 4. Then give the final answer. + role: user + - arguments: "{\n \"a\": 2,\n \"b\": 3\n}" + call_id: call-8c844a23-0c02-41a4-977b-449244714607 + id: fc_tmp_gkvflek9nk4 + name: add + status: completed + type: function_call + - call_id: call-8c844a23-0c02-41a4-977b-449244714607 + output: '5' + type: function_call_output + - arguments: '{ "a": 5, "b": 4 }' + call_id: call-4cf2492f-dc77-4855-a424-e9a5c45fb859 + id: fc_tmp_wcw53tswhdb + name: add + status: completed + type: function_call + - call_id: call-4cf2492f-dc77-4855-a424-e9a5c45fb859 + output: '9' + type: function_call_output + max_output_tokens: 1024 + model: nvidia/nemotron-3.5-lightning:free + parallel_tool_calls: false + provider: + allow_fallbacks: false + max_price: + completion: 0 + prompt: 0 + request: 0 + reasoning: + effort: none + store: false + stream: false + tool_choice: none + tools: + - description: Add two integers. + name: add + parameters: + additionalProperties: false + properties: + a: + type: integer + b: + type: integer + required: + - a + - b + type: object + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '1186' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /api/v1/responses + query_params: {} +request_id: 01a1a489-c7b3-7de1-8fdf-32558b93a45f +response: + body: + access_programs: null + background: false + completed_at: 1793761855 + created_at: 1793761855 + error: null + frequency_penalty: 0 + id: gen-1793761855-Lzd1WrGruzJRPaaph72s + incomplete_details: null + instructions: null + max_output_tokens: 1024 + max_tool_calls: null + metadata: {} + model: nvidia/nemotron-3.5-lightning:free + object: response + output: + - content: + - annotations: [] + logprobs: [] + text: The final answer is 9. + type: output_text + id: msg_tmp_jpnts83gb0l + role: assistant + status: completed + type: message + parallel_tool_calls: false + presence_penalty: 0 + previous_response_id: null + prompt_cache_key: null + prompt_cache_options: null + reasoning: + effort: none + safety_identifier: null + service_tier: auto + status: completed + store: false + temperature: 1 + text: + format: + type: text + tool_choice: none + tools: + - description: Add two integers. + name: add + parameters: + additionalProperties: false + properties: + a: + type: integer + b: + type: integer + required: + - a + - b + type: object + strict: null + type: function + top_logprobs: 0 + top_p: 1 + truncation: disabled + usage: + cost: 0 + cost_details: + upstream_inference_cost: 0 + upstream_inference_input_cost: 0 + upstream_inference_output_cost: 0 + input_tokens: 146 + input_tokens_details: + cached_tokens: 0 + is_byok: false + output_tokens: 8 + output_tokens_details: + reasoning_tokens: 0 + total_tokens: 154 + body_bytes: !!binary | + CiAgICAgICAgIAp7ImlkIjoiZ2VuLTE3OTM3NjE4NTUtTHpkMVdyR3J1ekpSUGFhcGg3MnMiLCJv + YmplY3QiOiJyZXNwb25zZSIsImNyZWF0ZWRfYXQiOjE3OTM3NjE4NTUsIm1vZGVsIjoibnZpZGlh + L25lbW90cm9uLTMuNS1saWdodG5pbmc6ZnJlZSIsInN0YXR1cyI6ImNvbXBsZXRlZCIsImNvbXBs + ZXRlZF9hdCI6MTc5Mzc2MTg1NSwib3V0cHV0IjpbeyJpZCI6Im1zZ190bXBfanBudHM4M2diMGwi + LCJ0eXBlIjoibWVzc2FnZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJzdGF0dXMiOiJjb21wbGV0ZWQi + LCJjb250ZW50IjpbeyJ0eXBlIjoib3V0cHV0X3RleHQiLCJ0ZXh0IjoiVGhlIGZpbmFsIGFuc3dl + ciBpcyA5LiIsImFubm90YXRpb25zIjpbXSwibG9ncHJvYnMiOltdfV19XSwiZXJyb3IiOm51bGws + ImluY29tcGxldGVfZGV0YWlscyI6bnVsbCwiYWNjZXNzX3Byb2dyYW1zIjpudWxsLCJ0b29scyI6 + W3sidHlwZSI6ImZ1bmN0aW9uIiwibmFtZSI6ImFkZCIsImRlc2NyaXB0aW9uIjoiQWRkIHR3byBp + bnRlZ2Vycy4iLCJwYXJhbWV0ZXJzIjp7InR5cGUiOiJvYmplY3QiLCJwcm9wZXJ0aWVzIjp7ImEi + OnsidHlwZSI6ImludGVnZXIifSwiYiI6eyJ0eXBlIjoiaW50ZWdlciJ9fSwicmVxdWlyZWQiOlsi + YSIsImIiXSwiYWRkaXRpb25hbFByb3BlcnRpZXMiOmZhbHNlfSwic3RyaWN0IjpudWxsfV0sInRv + b2xfY2hvaWNlIjoibm9uZSIsInBhcmFsbGVsX3Rvb2xfY2FsbHMiOmZhbHNlLCJtYXhfb3V0cHV0 + X3Rva2VucyI6MTAyNCwidGVtcGVyYXR1cmUiOjEsInRvcF9wIjoxLCJwcmVzZW5jZV9wZW5hbHR5 + IjowLCJmcmVxdWVuY3lfcGVuYWx0eSI6MCwidG9wX2xvZ3Byb2JzIjowLCJtYXhfdG9vbF9jYWxs + cyI6bnVsbCwibWV0YWRhdGEiOnt9LCJiYWNrZ3JvdW5kIjpmYWxzZSwicHJldmlvdXNfcmVzcG9u + c2VfaWQiOm51bGwsInNlcnZpY2VfdGllciI6ImF1dG8iLCJ0cnVuY2F0aW9uIjoiZGlzYWJsZWQi + LCJzdG9yZSI6ZmFsc2UsImluc3RydWN0aW9ucyI6bnVsbCwidGV4dCI6eyJmb3JtYXQiOnsidHlw + ZSI6InRleHQifX0sInJlYXNvbmluZyI6eyJlZmZvcnQiOiJub25lIn0sInNhZmV0eV9pZGVudGlm + aWVyIjpudWxsLCJwcm9tcHRfY2FjaGVfa2V5IjpudWxsLCJwcm9tcHRfY2FjaGVfb3B0aW9ucyI6 + bnVsbCwidXNhZ2UiOnsiaW5wdXRfdG9rZW5zIjoxNDYsImlucHV0X3Rva2Vuc19kZXRhaWxzIjp7 + ImNhY2hlZF90b2tlbnMiOjB9LCJvdXRwdXRfdG9rZW5zIjo4LCJvdXRwdXRfdG9rZW5zX2RldGFp + bHMiOnsicmVhc29uaW5nX3Rva2VucyI6MH0sInRvdGFsX3Rva2VucyI6MTU0LCJjb3N0IjowLCJp + c19ieW9rIjpmYWxzZSwiY29zdF9kZXRhaWxzIjp7InVwc3RyZWFtX2luZmVyZW5jZV9jb3N0Ijow + LCJ1cHN0cmVhbV9pbmZlcmVuY2VfaW5wdXRfY29zdCI6MCwidXBzdHJlYW1faW5mZXJlbmNlX291 + dHB1dF9jb3N0IjowfX19 + headers: + connection: keep-alive + content-type: application/json + status_code: 200 +timestamp: '2026-11-04T03:10:55.411275+00:00' +upstream_url: https://openrouter.ai/api/v1/responses diff --git a/tests/cassettes/upstream_ir/tool_use/togetherai-chat_completions-non_stream-00.yaml b/tests/cassettes/upstream_ir/tool_use/togetherai-chat_completions-non_stream-00.yaml new file mode 100644 index 0000000..59625b3 --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/togetherai-chat_completions-non_stream-00.yaml @@ -0,0 +1,86 @@ +filename: 2026-11-05-01a1ac2f-f33a-7363-867d-6ab8b11a7a3a +request: + body: + max_completion_tokens: 1024 + messages: + - content: + - text: Read index.txt using read_file. It contains the path of another file. + Read that file too, then summarize its contents in one sentence. + type: text + role: user + model: Qwen/Qwen3.5-9B + parallel_tool_calls: false + reasoning: + enabled: false + stream: false + tool_choice: auto + tools: + - function: + description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '589' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /v1/chat/completions + query_params: {} +request_id: 01a1ac2f-f33a-7363-867d-6ab8b11a7a3a +response: + body: + choices: + - finish_reason: tool_calls + index: 0 + matched_stop: 248046 + message: + reasoning_content: null + role: assistant + tool_calls: + - function: + arguments: '{"path":"index.txt"}' + name: read_file + id: call_01a1ac2ff5767011ac9a00e7 + type: function + created: 1793890186 + id: 6eb500e9-aws_as1 + model: Qwen/Qwen3.5-9B + object: chat.completion + system_fingerprint: default + usage: + completion_tokens: 26 + prompt_tokens: 308 + prompt_tokens_details: + cached_tokens: 256 + total_tokens: 334 + body_bytes: !!binary | + eyJpZCI6IjZlYjUwMGU5LWF3c19hczEiLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24iLCJjcmVh + dGVkIjoxNzkzODkwMTg2LCJtb2RlbCI6IlF3ZW4vUXdlbjMuNS05QiIsImNob2ljZXMiOlt7Imlu + ZGV4IjowLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJ0b29sX2NhbGxzIjpbeyJpZCI6 + ImNhbGxfMDFhMWFjMmZmNTc2NzAxMWFjOWEwMGU3IiwidHlwZSI6ImZ1bmN0aW9uIiwiZnVuY3Rp + b24iOnsibmFtZSI6InJlYWRfZmlsZSIsImFyZ3VtZW50cyI6IntcInBhdGhcIjpcImluZGV4LnR4 + dFwifSJ9fV0sInJlYXNvbmluZ19jb250ZW50IjpudWxsfSwiZmluaXNoX3JlYXNvbiI6InRvb2xf + Y2FsbHMiLCJtYXRjaGVkX3N0b3AiOjI0ODA0Nn1dLCJ1c2FnZSI6eyJwcm9tcHRfdG9rZW5zIjoz + MDgsImNvbXBsZXRpb25fdG9rZW5zIjoyNiwidG90YWxfdG9rZW5zIjozMzQsInByb21wdF90b2tl + bnNfZGV0YWlscyI6eyJjYWNoZWRfdG9rZW5zIjoyNTZ9fSwic3lzdGVtX2ZpbmdlcnByaW50Ijoi + ZGVmYXVsdCJ9 + headers: + connection: keep-alive + content-type: application/json + x-request-id: 6eb500e9-aws_as1 + status_code: 200 +timestamp: '2026-11-05T14:49:46.042564+00:00' +upstream_url: https://api.together.ai/v1/chat/completions diff --git a/tests/cassettes/upstream_ir/tool_use/togetherai-chat_completions-non_stream-01.yaml b/tests/cassettes/upstream_ir/tool_use/togetherai-chat_completions-non_stream-01.yaml new file mode 100644 index 0000000..ec97497 --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/togetherai-chat_completions-non_stream-01.yaml @@ -0,0 +1,97 @@ +filename: 2026-11-05-01a1ac2f-f5de-7a50-91e5-91c3595d8a6b +request: + body: + max_completion_tokens: 1024 + messages: + - content: + - text: Read index.txt using read_file. It contains the path of another file. + Read that file too, then summarize its contents in one sentence. + type: text + role: user + - reasoning_content: null + role: assistant + tool_calls: + - function: + arguments: '{"path":"index.txt"}' + name: read_file + id: call_01a1ac2ff5767011ac9a00e7 + type: function + - content: garden.txt + role: tool + tool_call_id: call_01a1ac2ff5767011ac9a00e7 + model: Qwen/Qwen3.5-9B + parallel_tool_calls: false + reasoning: + enabled: false + stream: false + tool_choice: auto + tools: + - function: + description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '864' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /v1/chat/completions + query_params: {} +request_id: 01a1ac2f-f5de-7a50-91e5-91c3595d8a6b +response: + body: + choices: + - finish_reason: tool_calls + index: 0 + matched_stop: 248046 + message: + reasoning_content: null + role: assistant + tool_calls: + - function: + arguments: '{"path":"garden.txt"}' + name: read_file + id: call_01a1ac2ff7357f11a7334c0b + type: function + created: 1793890186 + id: 07ec4dd2-aws_as1 + model: Qwen/Qwen3.5-9B + object: chat.completion + system_fingerprint: default + usage: + completion_tokens: 27 + prompt_tokens: 354 + prompt_tokens_details: + cached_tokens: 0 + total_tokens: 381 + body_bytes: !!binary | + eyJpZCI6IjA3ZWM0ZGQyLWF3c19hczEiLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24iLCJjcmVh + dGVkIjoxNzkzODkwMTg2LCJtb2RlbCI6IlF3ZW4vUXdlbjMuNS05QiIsImNob2ljZXMiOlt7Imlu + ZGV4IjowLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJ0b29sX2NhbGxzIjpbeyJpZCI6 + ImNhbGxfMDFhMWFjMmZmNzM1N2YxMWE3MzM0YzBiIiwidHlwZSI6ImZ1bmN0aW9uIiwiZnVuY3Rp + b24iOnsibmFtZSI6InJlYWRfZmlsZSIsImFyZ3VtZW50cyI6IntcInBhdGhcIjpcImdhcmRlbi50 + eHRcIn0ifX1dLCJyZWFzb25pbmdfY29udGVudCI6bnVsbH0sImZpbmlzaF9yZWFzb24iOiJ0b29s + X2NhbGxzIiwibWF0Y2hlZF9zdG9wIjoyNDgwNDZ9XSwidXNhZ2UiOnsicHJvbXB0X3Rva2VucyI6 + MzU0LCJjb21wbGV0aW9uX3Rva2VucyI6MjcsInRvdGFsX3Rva2VucyI6MzgxLCJwcm9tcHRfdG9r + ZW5zX2RldGFpbHMiOnsiY2FjaGVkX3Rva2VucyI6MH19LCJzeXN0ZW1fZmluZ2VycHJpbnQiOiJk + ZWZhdWx0In0= + headers: + connection: keep-alive + content-type: application/json + x-request-id: 07ec4dd2-aws_as1 + status_code: 200 +timestamp: '2026-11-05T14:49:46.718723+00:00' +upstream_url: https://api.together.ai/v1/chat/completions diff --git a/tests/cassettes/upstream_ir/tool_use/togetherai-chat_completions-non_stream-02.yaml b/tests/cassettes/upstream_ir/tool_use/togetherai-chat_completions-non_stream-02.yaml new file mode 100644 index 0000000..c10d671 --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/togetherai-chat_completions-non_stream-02.yaml @@ -0,0 +1,103 @@ +filename: 2026-11-05-01a1ac2f-f7a1-79c0-b86f-e6b63706fd6e +request: + body: + max_completion_tokens: 1024 + messages: + - content: + - text: Read index.txt using read_file. It contains the path of another file. + Read that file too, then summarize its contents in one sentence. + type: text + role: user + - reasoning_content: null + role: assistant + tool_calls: + - function: + arguments: '{"path":"index.txt"}' + name: read_file + id: call_01a1ac2ff5767011ac9a00e7 + type: function + - content: garden.txt + role: tool + tool_call_id: call_01a1ac2ff5767011ac9a00e7 + - reasoning_content: null + role: assistant + tool_calls: + - function: + arguments: '{"path":"garden.txt"}' + name: read_file + id: call_01a1ac2ff7357f11a7334c0b + type: function + - content: Water the tomatoes every morning and harvest ripe fruit. + role: tool + tool_call_id: call_01a1ac2ff7357f11a7334c0b + model: Qwen/Qwen3.5-9B + parallel_tool_calls: false + reasoning: + enabled: false + stream: false + tool_choice: auto + tools: + - function: + description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '1186' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /v1/chat/completions + query_params: {} +request_id: 01a1ac2f-f7a1-79c0-b86f-e6b63706fd6e +response: + body: + choices: + - finish_reason: stop + index: 0 + matched_stop: 248046 + message: + content: The file describes a routine for watering tomatoes daily and harvesting + the ripe ones. + reasoning_content: null + role: assistant + created: 1793890187 + id: 0dcc2f5e-aws_as1 + model: Qwen/Qwen3.5-9B + object: chat.completion + system_fingerprint: default + usage: + completion_tokens: 16 + prompt_tokens: 408 + prompt_tokens_details: + cached_tokens: 320 + total_tokens: 424 + body_bytes: !!binary | + eyJpZCI6IjBkY2MyZjVlLWF3c19hczEiLCJvYmplY3QiOiJjaGF0LmNvbXBsZXRpb24iLCJjcmVh + dGVkIjoxNzkzODkwMTg3LCJtb2RlbCI6IlF3ZW4vUXdlbjMuNS05QiIsImNob2ljZXMiOlt7Imlu + ZGV4IjowLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjoiVGhlIGZpbGUg + ZGVzY3JpYmVzIGEgcm91dGluZSBmb3Igd2F0ZXJpbmcgdG9tYXRvZXMgZGFpbHkgYW5kIGhhcnZl + c3RpbmcgdGhlIHJpcGUgb25lcy4iLCJyZWFzb25pbmdfY29udGVudCI6bnVsbH0sImZpbmlzaF9y + ZWFzb24iOiJzdG9wIiwibWF0Y2hlZF9zdG9wIjoyNDgwNDZ9XSwidXNhZ2UiOnsicHJvbXB0X3Rv + a2VucyI6NDA4LCJjb21wbGV0aW9uX3Rva2VucyI6MTYsInRvdGFsX3Rva2VucyI6NDI0LCJwcm9t + cHRfdG9rZW5zX2RldGFpbHMiOnsiY2FjaGVkX3Rva2VucyI6MzIwfX0sInN5c3RlbV9maW5nZXJw + cmludCI6ImRlZmF1bHQifQ== + headers: + connection: keep-alive + content-type: application/json + x-request-id: 0dcc2f5e-aws_as1 + status_code: 200 +timestamp: '2026-11-05T14:49:47.169721+00:00' +upstream_url: https://api.together.ai/v1/chat/completions diff --git a/tests/cassettes/upstream_ir/tool_use/togetherai-chat_completions-stream-00.yaml b/tests/cassettes/upstream_ir/tool_use/togetherai-chat_completions-stream-00.yaml new file mode 100644 index 0000000..f8383c8 --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/togetherai-chat_completions-stream-00.yaml @@ -0,0 +1,100 @@ +filename: 2026-11-05-01a1ac2f-ed36-7de3-a615-28ba500698cb +request: + body: + max_completion_tokens: 1024 + messages: + - content: + - text: Read index.txt using read_file. It contains the path of another file. + Read that file too, then summarize its contents in one sentence. + type: text + role: user + model: Qwen/Qwen3.5-9B + parallel_tool_calls: false + reasoning: + enabled: false + stream: true + stream_options: + include_usage: true + tool_choice: auto + tools: + - function: + description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '628' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /v1/chat/completions + query_params: {} +request_id: 01a1ac2f-ed36-7de3-a615-28ba500698cb +response: + error_event: false + headers: + cache-control: no-cache + connection: keep-alive + content-type: text/event-stream + x-request-id: ef57d52e-aws_as1 + sse: + - 'data: {"id":"ef57d52e-aws_as1","object":"chat.completion.chunk","created":1793890184,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"ef57d52e-aws_as1","object":"chat.completion.chunk","created":1793890184,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"role":"assistant","tool_calls":[{"index":0,"id":"call_01a1ac2feea07fe2b00e3a32","type":"function","function":{"name":"read_file"}}],"reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"ef57d52e-aws_as1","object":"chat.completion.chunk","created":1793890184,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"path\": + \"index.txt\""}}],"reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"ef57d52e-aws_as1","object":"chat.completion.chunk","created":1793890184,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"}"}}],"reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"ef57d52e-aws_as1","object":"chat.completion.chunk","created":1793890184,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"reasoning_content":null},"logprobs":null,"finish_reason":"tool_calls","matched_stop":248046}]} + + ' + - ' + + ' + - 'data: {"id":"ef57d52e-aws_as1","object":"chat.completion.chunk","created":1793890184,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[],"usage":{"prompt_tokens":308,"completion_tokens":26,"total_tokens":334,"prompt_tokens_details":{"cached_tokens":0}}} + + ' + - ' + + ' + - 'data: [DONE] + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: '[DONE]' +timestamp: '2026-11-05T14:49:44.502596+00:00' +upstream_url: https://api.together.ai/v1/chat/completions diff --git a/tests/cassettes/upstream_ir/tool_use/togetherai-chat_completions-stream-01.yaml b/tests/cassettes/upstream_ir/tool_use/togetherai-chat_completions-stream-01.yaml new file mode 100644 index 0000000..a1691f4 --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/togetherai-chat_completions-stream-01.yaml @@ -0,0 +1,116 @@ +filename: 2026-11-05-01a1ac2f-ef7d-74d3-a8a3-79e66e3c21e6 +request: + body: + max_completion_tokens: 1024 + messages: + - content: + - text: Read index.txt using read_file. It contains the path of another file. + Read that file too, then summarize its contents in one sentence. + type: text + role: user + - annotations: null + audio: null + content: null + function_call: null + reasoning_content: null + refusal: null + role: assistant + tool_calls: + - function: + arguments: '{"path": "index.txt"}' + name: read_file + id: call_01a1ac2feea07fe2b00e3a32 + type: function + - content: garden.txt + role: tool + tool_call_id: call_01a1ac2feea07fe2b00e3a32 + model: Qwen/Qwen3.5-9B + parallel_tool_calls: false + reasoning: + enabled: false + stream: true + stream_options: + include_usage: true + tool_choice: auto + tools: + - function: + description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '987' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /v1/chat/completions + query_params: {} +request_id: 01a1ac2f-ef7d-74d3-a8a3-79e66e3c21e6 +response: + error_event: false + headers: + cache-control: no-cache + connection: keep-alive + content-type: text/event-stream + x-request-id: a42f4dd2-aws_as1 + sse: + - 'data: {"id":"a42f4dd2-aws_as1","object":"chat.completion.chunk","created":1793890185,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"a42f4dd2-aws_as1","object":"chat.completion.chunk","created":1793890185,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"role":"assistant","tool_calls":[{"index":0,"id":"call_01a1ac2ff05a7671aecc4e96","type":"function","function":{"name":"read_file"}}],"reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"a42f4dd2-aws_as1","object":"chat.completion.chunk","created":1793890185,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"path\": + \"garden.txt\""}}],"reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"a42f4dd2-aws_as1","object":"chat.completion.chunk","created":1793890185,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"}"}}],"reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"a42f4dd2-aws_as1","object":"chat.completion.chunk","created":1793890185,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"reasoning_content":null},"logprobs":null,"finish_reason":"tool_calls","matched_stop":248046}]} + + ' + - ' + + ' + - 'data: {"id":"a42f4dd2-aws_as1","object":"chat.completion.chunk","created":1793890185,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[],"usage":{"prompt_tokens":354,"completion_tokens":27,"total_tokens":381,"prompt_tokens_details":{"cached_tokens":256}}} + + ' + - ' + + ' + - 'data: [DONE] + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: '[DONE]' +timestamp: '2026-11-05T14:49:45.085233+00:00' +upstream_url: https://api.together.ai/v1/chat/completions diff --git a/tests/cassettes/upstream_ir/tool_use/togetherai-chat_completions-stream-02.yaml b/tests/cassettes/upstream_ir/tool_use/togetherai-chat_completions-stream-02.yaml new file mode 100644 index 0000000..8afd0de --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/togetherai-chat_completions-stream-02.yaml @@ -0,0 +1,236 @@ +filename: 2026-11-05-01a1ac2f-f143-7980-a76d-4396736d7336 +request: + body: + max_completion_tokens: 1024 + messages: + - content: + - text: Read index.txt using read_file. It contains the path of another file. + Read that file too, then summarize its contents in one sentence. + type: text + role: user + - annotations: null + audio: null + content: null + function_call: null + reasoning_content: null + refusal: null + role: assistant + tool_calls: + - function: + arguments: '{"path": "index.txt"}' + name: read_file + id: call_01a1ac2feea07fe2b00e3a32 + type: function + - content: garden.txt + role: tool + tool_call_id: call_01a1ac2feea07fe2b00e3a32 + - annotations: null + audio: null + content: null + function_call: null + reasoning_content: null + refusal: null + role: assistant + tool_calls: + - function: + arguments: '{"path": "garden.txt"}' + name: read_file + id: call_01a1ac2ff05a7671aecc4e96 + type: function + - content: Water the tomatoes every morning and harvest ripe fruit. + role: tool + tool_call_id: call_01a1ac2ff05a7671aecc4e96 + model: Qwen/Qwen3.5-9B + parallel_tool_calls: false + reasoning: + enabled: false + stream: true + stream_options: + include_usage: true + tool_choice: auto + tools: + - function: + description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate + authorization: Bearer *** + connection: keep-alive + content-length: '1393' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /v1/chat/completions + query_params: {} +request_id: 01a1ac2f-f143-7980-a76d-4396736d7336 +response: + error_event: false + headers: + cache-control: no-cache + connection: keep-alive + content-type: text/event-stream + x-request-id: 3a954993-aws_as1 + sse: + - 'data: {"id":"3a954993-aws_as1","object":"chat.completion.chunk","created":1793890185,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"role":"assistant","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"3a954993-aws_as1","object":"chat.completion.chunk","created":1793890185,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"The","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"3a954993-aws_as1","object":"chat.completion.chunk","created":1793890185,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + instructions","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"3a954993-aws_as1","object":"chat.completion.chunk","created":1793890185,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + state","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"3a954993-aws_as1","object":"chat.completion.chunk","created":1793890185,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + that","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"3a954993-aws_as1","object":"chat.completion.chunk","created":1793890185,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + tomatoes","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"3a954993-aws_as1","object":"chat.completion.chunk","created":1793890185,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + should","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"3a954993-aws_as1","object":"chat.completion.chunk","created":1793890185,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + be","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"3a954993-aws_as1","object":"chat.completion.chunk","created":1793890185,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + water","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"3a954993-aws_as1","object":"chat.completion.chunk","created":1793890185,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":"ed","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"3a954993-aws_as1","object":"chat.completion.chunk","created":1793890185,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + every","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"3a954993-aws_as1","object":"chat.completion.chunk","created":1793890185,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + morning","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"3a954993-aws_as1","object":"chat.completion.chunk","created":1793890185,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + and","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"3a954993-aws_as1","object":"chat.completion.chunk","created":1793890185,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + ripe","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"3a954993-aws_as1","object":"chat.completion.chunk","created":1793890185,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + fruit","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"3a954993-aws_as1","object":"chat.completion.chunk","created":1793890185,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + should","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"3a954993-aws_as1","object":"chat.completion.chunk","created":1793890185,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + be","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"3a954993-aws_as1","object":"chat.completion.chunk","created":1793890185,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":" + harvested","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"3a954993-aws_as1","object":"chat.completion.chunk","created":1793890185,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"content":".","reasoning_content":null},"logprobs":null,"finish_reason":null}]} + + ' + - ' + + ' + - 'data: {"id":"3a954993-aws_as1","object":"chat.completion.chunk","created":1793890185,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[{"index":0,"delta":{"reasoning_content":null},"logprobs":null,"finish_reason":"stop","matched_stop":248046}]} + + ' + - ' + + ' + - 'data: {"id":"3a954993-aws_as1","object":"chat.completion.chunk","created":1793890185,"model":"Qwen/Qwen3.5-9B","system_fingerprint":"default","choices":[],"usage":{"prompt_tokens":408,"completion_tokens":19,"total_tokens":427,"prompt_tokens_details":{"cached_tokens":256}}} + + ' + - ' + + ' + - 'data: [DONE] + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: '[DONE]' +timestamp: '2026-11-05T14:49:45.539766+00:00' +upstream_url: https://api.together.ai/v1/chat/completions diff --git a/tests/cassettes/upstream_ir/tool_use/togetherai-responses-non_stream-00.yaml b/tests/cassettes/upstream_ir/tool_use/togetherai-responses-non_stream-00.yaml new file mode 100644 index 0000000..45da18a --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/togetherai-responses-non_stream-00.yaml @@ -0,0 +1,140 @@ +filename: 2026-11-05-01a1a9cb-0bd2-7431-a1ba-d41e005db75a +request: + body: + input: + - content: + - text: Read index.txt using read_file. It contains the path of another file. + Read that file too, then summarize its contents in one sentence. + type: input_text + role: user + max_output_tokens: 1024 + model: zai-org/GLM-5.2 + parallel_tool_calls: false + reasoning: + effort: minimal + store: false + stream: false + tool_choice: auto + tools: + - description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '592' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /v1/responses + query_params: {} +request_id: 01a1a9cb-0bd2-7431-a1ba-d41e005db75a +response: + body: + background: false + completed_at: 1793850019 + created_at: 1793850019 + error: null + frequency_penalty: 0.0 + id: resp_01a1a9cb-0d88-7242-99a0-a8f41c235b85 + incomplete_details: null + instructions: null + max_output_tokens: 1024 + max_tool_calls: null + metadata: {} + model: zai-org/GLM-5.2 + object: response + output: + - arguments: '{"path":"index.txt"}' + call_id: call_01a1a9cb0df07a72b0092b2f + id: fc_call_01a1a9cb0df07a72b0092b2f + name: read_file + status: completed + type: function_call + parallel_tool_calls: false + presence_penalty: 0.0 + previous_response_id: null + prompt_cache_key: null + prompt_cache_retention: null + reasoning: + effort: minimal + summary: null + safety_identifier: null + service_tier: default + status: completed + store: false + temperature: 1.0 + text: + format: + type: text + verbosity: medium + tool_choice: auto + tools: + - description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + top_logprobs: 0 + top_p: 1.0 + truncation: disabled + usage: + input_tokens: 182 + input_tokens_details: + cache_write_tokens: 0 + cached_tokens: 128 + output_tokens: 12 + output_tokens_details: + reasoning_tokens: 0 + total_tokens: 194 + user: null + body_bytes: !!binary | + eyJpZCI6InJlc3BfMDFhMWE5Y2ItMGQ4OC03MjQyLTk5YTAtYThmNDFjMjM1Yjg1Iiwib2JqZWN0 + IjoicmVzcG9uc2UiLCJjcmVhdGVkX2F0IjoxNzkzODUwMDE5LCJjb21wbGV0ZWRfYXQiOjE3OTM4 + NTAwMTksImJhY2tncm91bmQiOmZhbHNlLCJzdGF0dXMiOiJjb21wbGV0ZWQiLCJlcnJvciI6bnVs + bCwiaW5jb21wbGV0ZV9kZXRhaWxzIjpudWxsLCJpbnN0cnVjdGlvbnMiOm51bGwsIm1heF9vdXRw + dXRfdG9rZW5zIjoxMDI0LCJtYXhfdG9vbF9jYWxscyI6bnVsbCwibW9kZWwiOiJ6YWktb3JnL0dM + TS01LjIiLCJvdXRwdXQiOlt7InR5cGUiOiJmdW5jdGlvbl9jYWxsIiwiaWQiOiJmY19jYWxsXzAx + YTFhOWNiMGRmMDdhNzJiMDA5MmIyZiIsImNhbGxfaWQiOiJjYWxsXzAxYTFhOWNiMGRmMDdhNzJi + MDA5MmIyZiIsIm5hbWUiOiJyZWFkX2ZpbGUiLCJhcmd1bWVudHMiOiJ7XCJwYXRoXCI6XCJpbmRl + eC50eHRcIn0iLCJzdGF0dXMiOiJjb21wbGV0ZWQifV0sInBhcmFsbGVsX3Rvb2xfY2FsbHMiOmZh + bHNlLCJwcmV2aW91c19yZXNwb25zZV9pZCI6bnVsbCwicHJvbXB0X2NhY2hlX2tleSI6bnVsbCwi + cHJvbXB0X2NhY2hlX3JldGVudGlvbiI6bnVsbCwicmVhc29uaW5nIjp7ImVmZm9ydCI6Im1pbmlt + YWwiLCJzdW1tYXJ5IjpudWxsfSwic2VydmljZV90aWVyIjoiZGVmYXVsdCIsInN0b3JlIjpmYWxz + ZSwidGVtcGVyYXR1cmUiOjEuMCwidGV4dCI6eyJmb3JtYXQiOnsidHlwZSI6InRleHQifSwidmVy + Ym9zaXR5IjoibWVkaXVtIn0sInRvb2xfY2hvaWNlIjoiYXV0byIsInRvb2xzIjpbeyJ0eXBlIjoi + ZnVuY3Rpb24iLCJuYW1lIjoicmVhZF9maWxlIiwiZGVzY3JpcHRpb24iOiJSZWFkIGEgZmlsZSBi + eSBpdHMgcGF0aC4iLCJwYXJhbWV0ZXJzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjpmYWxzZSwi + cHJvcGVydGllcyI6eyJwYXRoIjp7InR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbInBhdGgi + XSwidHlwZSI6Im9iamVjdCJ9LCJzdHJpY3QiOmZhbHNlfV0sInRvcF9sb2dwcm9icyI6MCwidG9w + X3AiOjEuMCwidHJ1bmNhdGlvbiI6ImRpc2FibGVkIiwidXNhZ2UiOnsiaW5wdXRfdG9rZW5zIjox + ODIsIm91dHB1dF90b2tlbnMiOjEyLCJ0b3RhbF90b2tlbnMiOjE5NCwiaW5wdXRfdG9rZW5zX2Rl + dGFpbHMiOnsiY2FjaGVkX3Rva2VucyI6MTI4LCJjYWNoZV93cml0ZV90b2tlbnMiOjB9LCJvdXRw + dXRfdG9rZW5zX2RldGFpbHMiOnsicmVhc29uaW5nX3Rva2VucyI6MH19LCJ1c2VyIjpudWxsLCJz + YWZldHlfaWRlbnRpZmllciI6bnVsbCwiZnJlcXVlbmN5X3BlbmFsdHkiOjAuMCwicHJlc2VuY2Vf + cGVuYWx0eSI6MC4wLCJtZXRhZGF0YSI6e319 + headers: + connection: keep-alive + content-type: application/json + x-request-id: e0d08ad2-aws_as1 + status_code: 200 +timestamp: '2026-11-05T03:40:18.770770+00:00' +upstream_url: https://api.together.ai/v1/responses diff --git a/tests/cassettes/upstream_ir/tool_use/togetherai-responses-non_stream-01.yaml b/tests/cassettes/upstream_ir/tool_use/togetherai-responses-non_stream-01.yaml new file mode 100644 index 0000000..dadcd90 --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/togetherai-responses-non_stream-01.yaml @@ -0,0 +1,165 @@ +filename: 2026-11-05-01a1a9cb-4d12-7ff3-bf9a-b7a28d308e3d +request: + body: + input: + - content: + - text: Read index.txt using read_file. It contains the path of another file. + Read that file too, then summarize its contents in one sentence. + type: input_text + role: user + - arguments: '{"path":"index.txt"}' + call_id: call_01a1a9cb0df07a72b0092b2f + id: fc_call_01a1a9cb0df07a72b0092b2f + name: read_file + status: completed + type: function_call + - call_id: call_01a1a9cb0df07a72b0092b2f + output: + - text: garden.txt + type: input_text + type: function_call_output + max_output_tokens: 1024 + model: zai-org/GLM-5.2 + parallel_tool_calls: false + reasoning: + effort: minimal + store: false + stream: false + tool_choice: auto + tools: + - description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '905' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /v1/responses + query_params: {} +request_id: 01a1a9cb-4d12-7ff3-bf9a-b7a28d308e3d +response: + body: + background: false + completed_at: 1793850037 + created_at: 1793850037 + error: null + frequency_penalty: 0.0 + id: resp_01a1a9cb-5571-7541-962e-9147370622cb + incomplete_details: null + instructions: null + max_output_tokens: 1024 + max_tool_calls: null + metadata: {} + model: zai-org/GLM-5.2 + object: response + output: + - content: + - annotations: [] + text: The file `index.txt` contains the path `garden.txt`. Let me read that + file now. + type: output_text + id: msg_0f26025d-aws_as1-01a1a9cb-5572-7e32-8fd7-61aeed733e54 + role: assistant + status: completed + type: message + - arguments: '{"path":"garden.txt"}' + call_id: call_01a1a9cb561876b2be7c103a + id: fc_call_01a1a9cb561876b2be7c103a + name: read_file + status: completed + type: function_call + parallel_tool_calls: false + presence_penalty: 0.0 + previous_response_id: null + prompt_cache_key: null + prompt_cache_retention: null + reasoning: + effort: minimal + summary: null + safety_identifier: null + service_tier: default + status: completed + store: false + temperature: 1.0 + text: + format: + type: text + verbosity: medium + tool_choice: auto + tools: + - description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + top_logprobs: 0 + top_p: 1.0 + truncation: disabled + usage: + input_tokens: 203 + input_tokens_details: + cache_write_tokens: 0 + cached_tokens: 192 + output_tokens: 34 + output_tokens_details: + reasoning_tokens: 0 + total_tokens: 237 + user: null + body_bytes: !!binary | + eyJpZCI6InJlc3BfMDFhMWE5Y2ItNTU3MS03NTQxLTk2MmUtOTE0NzM3MDYyMmNiIiwib2JqZWN0 + IjoicmVzcG9uc2UiLCJjcmVhdGVkX2F0IjoxNzkzODUwMDM3LCJjb21wbGV0ZWRfYXQiOjE3OTM4 + NTAwMzcsImJhY2tncm91bmQiOmZhbHNlLCJzdGF0dXMiOiJjb21wbGV0ZWQiLCJlcnJvciI6bnVs + bCwiaW5jb21wbGV0ZV9kZXRhaWxzIjpudWxsLCJpbnN0cnVjdGlvbnMiOm51bGwsIm1heF9vdXRw + dXRfdG9rZW5zIjoxMDI0LCJtYXhfdG9vbF9jYWxscyI6bnVsbCwibW9kZWwiOiJ6YWktb3JnL0dM + TS01LjIiLCJvdXRwdXQiOlt7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiJtc2dfMGYyNjAyNWQtYXdz + X2FzMS0wMWExYTljYi01NTcyLTdlMzItOGZkNy02MWFlZWQ3MzNlNTQiLCJyb2xlIjoiYXNzaXN0 + YW50IiwiY29udGVudCI6W3sidHlwZSI6Im91dHB1dF90ZXh0IiwidGV4dCI6IlRoZSBmaWxlIGBp + bmRleC50eHRgIGNvbnRhaW5zIHRoZSBwYXRoIGBnYXJkZW4udHh0YC4gTGV0IG1lIHJlYWQgdGhh + dCBmaWxlIG5vdy4iLCJhbm5vdGF0aW9ucyI6W119XSwic3RhdHVzIjoiY29tcGxldGVkIn0seyJ0 + eXBlIjoiZnVuY3Rpb25fY2FsbCIsImlkIjoiZmNfY2FsbF8wMWExYTljYjU2MTg3NmIyYmU3YzEw + M2EiLCJjYWxsX2lkIjoiY2FsbF8wMWExYTljYjU2MTg3NmIyYmU3YzEwM2EiLCJuYW1lIjoicmVh + ZF9maWxlIiwiYXJndW1lbnRzIjoie1wicGF0aFwiOlwiZ2FyZGVuLnR4dFwifSIsInN0YXR1cyI6 + ImNvbXBsZXRlZCJ9XSwicGFyYWxsZWxfdG9vbF9jYWxscyI6ZmFsc2UsInByZXZpb3VzX3Jlc3Bv + bnNlX2lkIjpudWxsLCJwcm9tcHRfY2FjaGVfa2V5IjpudWxsLCJwcm9tcHRfY2FjaGVfcmV0ZW50 + aW9uIjpudWxsLCJyZWFzb25pbmciOnsiZWZmb3J0IjoibWluaW1hbCIsInN1bW1hcnkiOm51bGx9 + LCJzZXJ2aWNlX3RpZXIiOiJkZWZhdWx0Iiwic3RvcmUiOmZhbHNlLCJ0ZW1wZXJhdHVyZSI6MS4w + LCJ0ZXh0Ijp7ImZvcm1hdCI6eyJ0eXBlIjoidGV4dCJ9LCJ2ZXJib3NpdHkiOiJtZWRpdW0ifSwi + dG9vbF9jaG9pY2UiOiJhdXRvIiwidG9vbHMiOlt7InR5cGUiOiJmdW5jdGlvbiIsIm5hbWUiOiJy + ZWFkX2ZpbGUiLCJkZXNjcmlwdGlvbiI6IlJlYWQgYSBmaWxlIGJ5IGl0cyBwYXRoLiIsInBhcmFt + ZXRlcnMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOmZhbHNlLCJwcm9wZXJ0aWVzIjp7InBhdGgi + OnsidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsicGF0aCJdLCJ0eXBlIjoib2JqZWN0In0s + InN0cmljdCI6ZmFsc2V9XSwidG9wX2xvZ3Byb2JzIjowLCJ0b3BfcCI6MS4wLCJ0cnVuY2F0aW9u + IjoiZGlzYWJsZWQiLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjIwMywib3V0cHV0X3Rva2VucyI6 + MzQsInRvdGFsX3Rva2VucyI6MjM3LCJpbnB1dF90b2tlbnNfZGV0YWlscyI6eyJjYWNoZWRfdG9r + ZW5zIjoxOTIsImNhY2hlX3dyaXRlX3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnNfZGV0YWlscyI6 + eyJyZWFzb25pbmdfdG9rZW5zIjowfX0sInVzZXIiOm51bGwsInNhZmV0eV9pZGVudGlmaWVyIjpu + dWxsLCJmcmVxdWVuY3lfcGVuYWx0eSI6MC4wLCJwcmVzZW5jZV9wZW5hbHR5IjowLjAsIm1ldGFk + YXRhIjp7fX0= + headers: + connection: keep-alive + content-type: application/json + x-request-id: 0f26025d-aws_as1 + status_code: 200 +timestamp: '2026-11-05T03:40:35.474314+00:00' +upstream_url: https://api.together.ai/v1/responses diff --git a/tests/cassettes/upstream_ir/tool_use/togetherai-responses-non_stream-02.yaml b/tests/cassettes/upstream_ir/tool_use/togetherai-responses-non_stream-02.yaml new file mode 100644 index 0000000..5d5747c --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/togetherai-responses-non_stream-02.yaml @@ -0,0 +1,176 @@ +filename: 2026-11-05-01a1a9cc-b0bd-7eb3-b7b4-be8d805f1873 +request: + body: + input: + - content: + - text: Read index.txt using read_file. It contains the path of another file. + Read that file too, then summarize its contents in one sentence. + type: input_text + role: user + - arguments: '{"path":"index.txt"}' + call_id: call_01a1a9cb0df07a72b0092b2f + id: fc_call_01a1a9cb0df07a72b0092b2f + name: read_file + status: completed + type: function_call + - call_id: call_01a1a9cb0df07a72b0092b2f + output: + - text: garden.txt + type: input_text + type: function_call_output + - content: + - annotations: [] + text: The file `index.txt` contains the path `garden.txt`. Let me read that + file now. + type: output_text + id: msg_0f26025d-aws_as1-01a1a9cb-5572-7e32-8fd7-61aeed733e54 + role: assistant + status: completed + type: message + - arguments: '{"path":"garden.txt"}' + call_id: call_01a1a9cb561876b2be7c103a + id: fc_call_01a1a9cb561876b2be7c103a + name: read_file + status: completed + type: function_call + - call_id: call_01a1a9cb561876b2be7c103a + output: + - text: Water the tomatoes every morning and harvest ripe fruit. + type: input_text + type: function_call_output + max_output_tokens: 1024 + model: zai-org/GLM-5.2 + parallel_tool_calls: false + reasoning: + effort: minimal + store: false + stream: false + tool_choice: auto + tools: + - description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '1530' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /v1/responses + query_params: {} +request_id: 01a1a9cc-b0bd-7eb3-b7b4-be8d805f1873 +response: + body: + background: false + completed_at: 1793850127 + created_at: 1793850126 + error: null + frequency_penalty: 0.0 + id: resp_01a1a9cc-b20b-71f1-88e0-7f8d870bc148 + incomplete_details: null + instructions: null + max_output_tokens: 1024 + max_tool_calls: null + metadata: {} + model: zai-org/GLM-5.2 + object: response + output: + - content: + - annotations: [] + text: '**Summary:** The file provides simple gardening instructions to water + the tomatoes every morning and harvest the ripe fruit.' + type: output_text + id: msg_92cbcebe-aws_as1-01a1a9cc-b20c-7a90-8156-cfa51f6f6c1c + role: assistant + status: completed + type: message + parallel_tool_calls: false + presence_penalty: 0.0 + previous_response_id: null + prompt_cache_key: null + prompt_cache_retention: null + reasoning: + effort: minimal + summary: null + safety_identifier: null + service_tier: default + status: completed + store: false + temperature: 1.0 + text: + format: + type: text + verbosity: medium + tool_choice: auto + tools: + - description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + top_logprobs: 0 + top_p: 1.0 + truncation: disabled + usage: + input_tokens: 252 + input_tokens_details: + cache_write_tokens: 0 + cached_tokens: 192 + output_tokens: 22 + output_tokens_details: + reasoning_tokens: 0 + total_tokens: 274 + user: null + body_bytes: !!binary | + eyJpZCI6InJlc3BfMDFhMWE5Y2MtYjIwYi03MWYxLTg4ZTAtN2Y4ZDg3MGJjMTQ4Iiwib2JqZWN0 + IjoicmVzcG9uc2UiLCJjcmVhdGVkX2F0IjoxNzkzODUwMTI2LCJjb21wbGV0ZWRfYXQiOjE3OTM4 + NTAxMjcsImJhY2tncm91bmQiOmZhbHNlLCJzdGF0dXMiOiJjb21wbGV0ZWQiLCJlcnJvciI6bnVs + bCwiaW5jb21wbGV0ZV9kZXRhaWxzIjpudWxsLCJpbnN0cnVjdGlvbnMiOm51bGwsIm1heF9vdXRw + dXRfdG9rZW5zIjoxMDI0LCJtYXhfdG9vbF9jYWxscyI6bnVsbCwibW9kZWwiOiJ6YWktb3JnL0dM + TS01LjIiLCJvdXRwdXQiOlt7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiJtc2dfOTJjYmNlYmUtYXdz + X2FzMS0wMWExYTljYy1iMjBjLTdhOTAtODE1Ni1jZmE1MWY2ZjZjMWMiLCJyb2xlIjoiYXNzaXN0 + YW50IiwiY29udGVudCI6W3sidHlwZSI6Im91dHB1dF90ZXh0IiwidGV4dCI6IioqU3VtbWFyeToq + KiBUaGUgZmlsZSBwcm92aWRlcyBzaW1wbGUgZ2FyZGVuaW5nIGluc3RydWN0aW9ucyB0byB3YXRl + ciB0aGUgdG9tYXRvZXMgZXZlcnkgbW9ybmluZyBhbmQgaGFydmVzdCB0aGUgcmlwZSBmcnVpdC4i + LCJhbm5vdGF0aW9ucyI6W119XSwic3RhdHVzIjoiY29tcGxldGVkIn1dLCJwYXJhbGxlbF90b29s + X2NhbGxzIjpmYWxzZSwicHJldmlvdXNfcmVzcG9uc2VfaWQiOm51bGwsInByb21wdF9jYWNoZV9r + ZXkiOm51bGwsInByb21wdF9jYWNoZV9yZXRlbnRpb24iOm51bGwsInJlYXNvbmluZyI6eyJlZmZv + cnQiOiJtaW5pbWFsIiwic3VtbWFyeSI6bnVsbH0sInNlcnZpY2VfdGllciI6ImRlZmF1bHQiLCJz + dG9yZSI6ZmFsc2UsInRlbXBlcmF0dXJlIjoxLjAsInRleHQiOnsiZm9ybWF0Ijp7InR5cGUiOiJ0 + ZXh0In0sInZlcmJvc2l0eSI6Im1lZGl1bSJ9LCJ0b29sX2Nob2ljZSI6ImF1dG8iLCJ0b29scyI6 + W3sidHlwZSI6ImZ1bmN0aW9uIiwibmFtZSI6InJlYWRfZmlsZSIsImRlc2NyaXB0aW9uIjoiUmVh + ZCBhIGZpbGUgYnkgaXRzIHBhdGguIiwicGFyYW1ldGVycyI6eyJhZGRpdGlvbmFsUHJvcGVydGll + cyI6ZmFsc2UsInByb3BlcnRpZXMiOnsicGF0aCI6eyJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJl + ZCI6WyJwYXRoIl0sInR5cGUiOiJvYmplY3QifSwic3RyaWN0IjpmYWxzZX1dLCJ0b3BfbG9ncHJv + YnMiOjAsInRvcF9wIjoxLjAsInRydW5jYXRpb24iOiJkaXNhYmxlZCIsInVzYWdlIjp7ImlucHV0 + X3Rva2VucyI6MjUyLCJvdXRwdXRfdG9rZW5zIjoyMiwidG90YWxfdG9rZW5zIjoyNzQsImlucHV0 + X3Rva2Vuc19kZXRhaWxzIjp7ImNhY2hlZF90b2tlbnMiOjE5MiwiY2FjaGVfd3JpdGVfdG9rZW5z + IjowfSwib3V0cHV0X3Rva2Vuc19kZXRhaWxzIjp7InJlYXNvbmluZ190b2tlbnMiOjB9fSwidXNl + ciI6bnVsbCwic2FmZXR5X2lkZW50aWZpZXIiOm51bGwsImZyZXF1ZW5jeV9wZW5hbHR5IjowLjAs + InByZXNlbmNlX3BlbmFsdHkiOjAuMCwibWV0YWRhdGEiOnt9fQ== + headers: + connection: keep-alive + content-type: application/json + x-request-id: 92cbcebe-aws_as1 + status_code: 200 +timestamp: '2026-11-05T03:42:06.525572+00:00' +upstream_url: https://api.together.ai/v1/responses diff --git a/tests/cassettes/upstream_ir/tool_use/togetherai-responses-stream-00.yaml b/tests/cassettes/upstream_ir/tool_use/togetherai-responses-stream-00.yaml new file mode 100644 index 0000000..44220eb --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/togetherai-responses-stream-00.yaml @@ -0,0 +1,130 @@ +filename: 2026-11-05-01a1a9ca-8f09-7a30-a977-77693e8c3274 +request: + body: + input: + - content: + - text: Read index.txt using read_file. It contains the path of another file. + Read that file too, then summarize its contents in one sentence. + type: input_text + role: user + max_output_tokens: 1024 + model: zai-org/GLM-5.2 + parallel_tool_calls: false + reasoning: + effort: minimal + store: false + stream: true + tool_choice: auto + tools: + - description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '591' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /v1/responses + query_params: {} +request_id: 01a1a9ca-8f09-7a30-a977-77693e8c3274 +response: + error_event: false + headers: + cache-control: no-cache + connection: keep-alive + content-type: text/event-stream + x-request-id: efb6bf28-aws_as1 + sse: + - 'event: response.created + + ' + - 'data: {"type":"response.created","sequence_number":0,"response":{"id":"resp_01a1a9ca-90d7-7421-8836-3be1c2fd1314","object":"response","created_at":1793849987,"completed_at":null,"background":false,"status":"in_progress","error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":1024,"max_tool_calls":null,"model":"zai-org/GLM-5.2","output":[],"parallel_tool_calls":false,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":null,"reasoning":{"effort":"minimal","summary":null},"service_tier":"default","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[{"type":"function","name":"read_file","description":"Read + a file by its path.","parameters":{"additionalProperties":false,"properties":{"path":{"type":"string"}},"required":["path"],"type":"object"},"strict":false}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"safety_identifier":null,"frequency_penalty":0.0,"presence_penalty":0.0,"metadata":{}}} + + ' + - ' + + ' + - 'event: response.in_progress + + ' + - 'data: {"type":"response.in_progress","sequence_number":1,"response":{"id":"resp_01a1a9ca-90d7-7421-8836-3be1c2fd1314","object":"response","created_at":1793849987,"completed_at":null,"background":false,"status":"in_progress","error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":1024,"max_tool_calls":null,"model":"zai-org/GLM-5.2","output":[],"parallel_tool_calls":false,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":null,"reasoning":{"effort":"minimal","summary":null},"service_tier":"default","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[{"type":"function","name":"read_file","description":"Read + a file by its path.","parameters":{"additionalProperties":false,"properties":{"path":{"type":"string"}},"required":["path"],"type":"object"},"strict":false}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"safety_identifier":null,"frequency_penalty":0.0,"presence_penalty":0.0,"metadata":{}}} + + ' + - ' + + ' + - 'event: response.output_item.added + + ' + - 'data: {"type":"response.output_item.added","sequence_number":2,"output_index":0,"item":{"id":"fc_01a1a9ca90e4743198b7c811b5cdc615","type":"function_call","call_id":"call_01a1a9ca90e4743198b7c803","name":"read_file","arguments":"","status":"in_progress"}} + + ' + - ' + + ' + - 'event: response.function_call_arguments.delta + + ' + - 'data: {"type":"response.function_call_arguments.delta","sequence_number":3,"output_index":0,"item_id":"fc_01a1a9ca90e4743198b7c811b5cdc615","delta":"{"} + + ' + - ' + + ' + - 'event: response.function_call_arguments.delta + + ' + - 'data: {"type":"response.function_call_arguments.delta","sequence_number":4,"output_index":0,"item_id":"fc_01a1a9ca90e4743198b7c811b5cdc615","delta":"\"path\":\"index.txt\"}"} + + ' + - ' + + ' + - 'event: response.function_call_arguments.done + + ' + - 'data: {"type":"response.function_call_arguments.done","sequence_number":5,"output_index":0,"item_id":"fc_01a1a9ca90e4743198b7c811b5cdc615","arguments":"{\"path\":\"index.txt\"}"} + + ' + - ' + + ' + - 'event: response.output_item.done + + ' + - 'data: {"type":"response.output_item.done","sequence_number":6,"output_index":0,"item":{"id":"fc_01a1a9ca90e4743198b7c811b5cdc615","type":"function_call","call_id":"call_01a1a9ca90e4743198b7c803","name":"read_file","arguments":"{\"path\":\"index.txt\"}","status":"completed"}} + + ' + - ' + + ' + - 'event: response.completed + + ' + - 'data: {"type":"response.completed","sequence_number":7,"response":{"id":"resp_01a1a9ca-90d7-7421-8836-3be1c2fd1314","object":"response","created_at":1793849987,"completed_at":1793849987,"background":false,"status":"completed","error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":1024,"max_tool_calls":null,"model":"zai-org/GLM-5.2","output":[{"id":"fc_01a1a9ca90e4743198b7c811b5cdc615","type":"function_call","call_id":"call_01a1a9ca90e4743198b7c803","name":"read_file","arguments":"{\"path\":\"index.txt\"}","status":"completed"}],"parallel_tool_calls":false,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":null,"reasoning":{"effort":"minimal","summary":null},"service_tier":"default","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[{"type":"function","name":"read_file","description":"Read + a file by its path.","parameters":{"additionalProperties":false,"properties":{"path":{"type":"string"}},"required":["path"],"type":"object"},"strict":false}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":{"input_tokens":182,"output_tokens":12,"total_tokens":194,"input_tokens_details":{"cached_tokens":0,"cache_write_tokens":0},"output_tokens_details":{"reasoning_tokens":0}},"user":null,"safety_identifier":null,"frequency_penalty":0.0,"presence_penalty":0.0,"metadata":{}}} + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: response.completed +timestamp: '2026-11-05T03:39:46.825069+00:00' +upstream_url: https://api.together.ai/v1/responses diff --git a/tests/cassettes/upstream_ir/tool_use/togetherai-responses-stream-01.yaml b/tests/cassettes/upstream_ir/tool_use/togetherai-responses-stream-01.yaml new file mode 100644 index 0000000..180eb24 --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/togetherai-responses-stream-01.yaml @@ -0,0 +1,141 @@ +filename: 2026-11-05-01a1a9ca-aaec-79e1-a783-95edfae820f4 +request: + body: + input: + - content: + - text: Read index.txt using read_file. It contains the path of another file. + Read that file too, then summarize its contents in one sentence. + type: input_text + role: user + - arguments: '{"path":"index.txt"}' + call_id: call_01a1a9ca90e4743198b7c803 + id: fc_01a1a9ca90e4743198b7c811b5cdc615 + name: read_file + status: completed + type: function_call + - call_id: call_01a1a9ca90e4743198b7c803 + output: + - text: garden.txt + type: input_text + type: function_call_output + max_output_tokens: 1024 + model: zai-org/GLM-5.2 + parallel_tool_calls: false + reasoning: + effort: minimal + store: false + stream: true + tool_choice: auto + tools: + - description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '907' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /v1/responses + query_params: {} +request_id: 01a1a9ca-aaec-79e1-a783-95edfae820f4 +response: + error_event: false + headers: + cache-control: no-cache + connection: keep-alive + content-type: text/event-stream + x-request-id: 00cc9cde-aws_as1 + sse: + - 'event: response.created + + ' + - 'data: {"type":"response.created","sequence_number":0,"response":{"id":"resp_01a1a9ca-abda-75e1-bff4-c047cdffa5f3","object":"response","created_at":1793849994,"completed_at":null,"background":false,"status":"in_progress","error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":1024,"max_tool_calls":null,"model":"zai-org/GLM-5.2","output":[],"parallel_tool_calls":false,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":null,"reasoning":{"effort":"minimal","summary":null},"service_tier":"default","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[{"type":"function","name":"read_file","description":"Read + a file by its path.","parameters":{"additionalProperties":false,"properties":{"path":{"type":"string"}},"required":["path"],"type":"object"},"strict":false}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"safety_identifier":null,"frequency_penalty":0.0,"presence_penalty":0.0,"metadata":{}}} + + ' + - ' + + ' + - 'event: response.in_progress + + ' + - 'data: {"type":"response.in_progress","sequence_number":1,"response":{"id":"resp_01a1a9ca-abda-75e1-bff4-c047cdffa5f3","object":"response","created_at":1793849994,"completed_at":null,"background":false,"status":"in_progress","error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":1024,"max_tool_calls":null,"model":"zai-org/GLM-5.2","output":[],"parallel_tool_calls":false,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":null,"reasoning":{"effort":"minimal","summary":null},"service_tier":"default","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[{"type":"function","name":"read_file","description":"Read + a file by its path.","parameters":{"additionalProperties":false,"properties":{"path":{"type":"string"}},"required":["path"],"type":"object"},"strict":false}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"safety_identifier":null,"frequency_penalty":0.0,"presence_penalty":0.0,"metadata":{}}} + + ' + - ' + + ' + - 'event: response.output_item.added + + ' + - 'data: {"type":"response.output_item.added","sequence_number":2,"output_index":0,"item":{"id":"fc_01a1a9caabe878038524494e70b5f268","type":"function_call","call_id":"call_01a1a9caabe8780385244934","name":"read_file","arguments":"","status":"in_progress"}} + + ' + - ' + + ' + - 'event: response.function_call_arguments.delta + + ' + - 'data: {"type":"response.function_call_arguments.delta","sequence_number":3,"output_index":0,"item_id":"fc_01a1a9caabe878038524494e70b5f268","delta":"{"} + + ' + - ' + + ' + - 'event: response.function_call_arguments.delta + + ' + - 'data: {"type":"response.function_call_arguments.delta","sequence_number":4,"output_index":0,"item_id":"fc_01a1a9caabe878038524494e70b5f268","delta":"\"path\":\"garden.txt\"}"} + + ' + - ' + + ' + - 'event: response.function_call_arguments.done + + ' + - 'data: {"type":"response.function_call_arguments.done","sequence_number":5,"output_index":0,"item_id":"fc_01a1a9caabe878038524494e70b5f268","arguments":"{\"path\":\"garden.txt\"}"} + + ' + - ' + + ' + - 'event: response.output_item.done + + ' + - 'data: {"type":"response.output_item.done","sequence_number":6,"output_index":0,"item":{"id":"fc_01a1a9caabe878038524494e70b5f268","type":"function_call","call_id":"call_01a1a9caabe8780385244934","name":"read_file","arguments":"{\"path\":\"garden.txt\"}","status":"completed"}} + + ' + - ' + + ' + - 'event: response.completed + + ' + - 'data: {"type":"response.completed","sequence_number":7,"response":{"id":"resp_01a1a9ca-abda-75e1-bff4-c047cdffa5f3","object":"response","created_at":1793849994,"completed_at":1793849994,"background":false,"status":"completed","error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":1024,"max_tool_calls":null,"model":"zai-org/GLM-5.2","output":[{"id":"fc_01a1a9caabe878038524494e70b5f268","type":"function_call","call_id":"call_01a1a9caabe8780385244934","name":"read_file","arguments":"{\"path\":\"garden.txt\"}","status":"completed"}],"parallel_tool_calls":false,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":null,"reasoning":{"effort":"minimal","summary":null},"service_tier":"default","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[{"type":"function","name":"read_file","description":"Read + a file by its path.","parameters":{"additionalProperties":false,"properties":{"path":{"type":"string"}},"required":["path"],"type":"object"},"strict":false}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":{"input_tokens":203,"output_tokens":13,"total_tokens":216,"input_tokens_details":{"cached_tokens":128,"cache_write_tokens":0},"output_tokens_details":{"reasoning_tokens":0}},"user":null,"safety_identifier":null,"frequency_penalty":0.0,"presence_penalty":0.0,"metadata":{}}} + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: response.completed +timestamp: '2026-11-05T03:39:53.964962+00:00' +upstream_url: https://api.together.ai/v1/responses diff --git a/tests/cassettes/upstream_ir/tool_use/togetherai-responses-stream-02.yaml b/tests/cassettes/upstream_ir/tool_use/togetherai-responses-stream-02.yaml new file mode 100644 index 0000000..b887c76 --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use/togetherai-responses-stream-02.yaml @@ -0,0 +1,205 @@ +filename: 2026-11-05-01a1a9ca-db7a-7520-8f28-c4142a26861f +request: + body: + input: + - content: + - text: Read index.txt using read_file. It contains the path of another file. + Read that file too, then summarize its contents in one sentence. + type: input_text + role: user + - arguments: '{"path":"index.txt"}' + call_id: call_01a1a9ca90e4743198b7c803 + id: fc_01a1a9ca90e4743198b7c811b5cdc615 + name: read_file + status: completed + type: function_call + - call_id: call_01a1a9ca90e4743198b7c803 + output: + - text: garden.txt + type: input_text + type: function_call_output + - arguments: '{"path":"garden.txt"}' + call_id: call_01a1a9caabe8780385244934 + id: fc_01a1a9caabe878038524494e70b5f268 + name: read_file + status: completed + type: function_call + - call_id: call_01a1a9caabe8780385244934 + output: + - text: Water the tomatoes every morning and harvest ripe fruit. + type: input_text + type: function_call_output + max_output_tokens: 1024 + model: zai-org/GLM-5.2 + parallel_tool_calls: false + reasoning: + effort: minimal + store: false + stream: true + tool_choice: auto + tools: + - description: Read a file by its path. + name: read_file + parameters: + additionalProperties: false + properties: + path: + type: string + required: + - path + type: object + strict: false + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '1270' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /v1/responses + query_params: {} +request_id: 01a1a9ca-db7a-7520-8f28-c4142a26861f +response: + error_event: false + headers: + cache-control: no-cache + connection: keep-alive + content-type: text/event-stream + x-request-id: c543e33a-aws_as1 + sse: + - 'event: response.created + + ' + - 'data: {"type":"response.created","sequence_number":0,"response":{"id":"resp_01a1a9ca-dcd8-7c12-bfc3-273bfc7add97","object":"response","created_at":1793850006,"completed_at":null,"background":false,"status":"in_progress","error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":1024,"max_tool_calls":null,"model":"zai-org/GLM-5.2","output":[],"parallel_tool_calls":false,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":null,"reasoning":{"effort":"minimal","summary":null},"service_tier":"default","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[{"type":"function","name":"read_file","description":"Read + a file by its path.","parameters":{"additionalProperties":false,"properties":{"path":{"type":"string"}},"required":["path"],"type":"object"},"strict":false}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"safety_identifier":null,"frequency_penalty":0.0,"presence_penalty":0.0,"metadata":{}}} + + ' + - ' + + ' + - 'event: response.in_progress + + ' + - 'data: {"type":"response.in_progress","sequence_number":1,"response":{"id":"resp_01a1a9ca-dcd8-7c12-bfc3-273bfc7add97","object":"response","created_at":1793850006,"completed_at":null,"background":false,"status":"in_progress","error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":1024,"max_tool_calls":null,"model":"zai-org/GLM-5.2","output":[],"parallel_tool_calls":false,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":null,"reasoning":{"effort":"minimal","summary":null},"service_tier":"default","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[{"type":"function","name":"read_file","description":"Read + a file by its path.","parameters":{"additionalProperties":false,"properties":{"path":{"type":"string"}},"required":["path"],"type":"object"},"strict":false}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":null,"user":null,"safety_identifier":null,"frequency_penalty":0.0,"presence_penalty":0.0,"metadata":{}}} + + ' + - ' + + ' + - 'event: response.output_item.added + + ' + - 'data: {"type":"response.output_item.added","sequence_number":2,"output_index":0,"item":{"id":"msg_01a1a9cadcd87c12bfc327544be648e5","type":"message","role":"assistant","status":"in_progress","content":[]}} + + ' + - ' + + ' + - 'event: response.content_part.added + + ' + - 'data: {"type":"response.content_part.added","sequence_number":3,"output_index":0,"item_id":"msg_01a1a9cadcd87c12bfc327544be648e5","content_index":0,"part":{"type":"output_text","text":"","annotations":[]}} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":4,"output_index":0,"item_id":"msg_01a1a9cadcd87c12bfc327544be648e5","content_index":0,"delta":"The","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":5,"output_index":0,"item_id":"msg_01a1a9cadcd87c12bfc327544be648e5","content_index":0,"delta":" + file instruct","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":6,"output_index":0,"item_id":"msg_01a1a9cadcd87c12bfc327544be648e5","content_index":0,"delta":"s + to water the tomatoes every","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":7,"output_index":0,"item_id":"msg_01a1a9cadcd87c12bfc327544be648e5","content_index":0,"delta":" + morning and harvest the","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.delta + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":8,"output_index":0,"item_id":"msg_01a1a9cadcd87c12bfc327544be648e5","content_index":0,"delta":" + ripe fruit.","logprobs":[]} + + ' + - ' + + ' + - 'event: response.output_text.done + + ' + - 'data: {"type":"response.output_text.done","sequence_number":9,"output_index":0,"item_id":"msg_01a1a9cadcd87c12bfc327544be648e5","content_index":0,"text":"The + file instructs to water the tomatoes every morning and harvest the ripe fruit.","logprobs":[]} + + ' + - ' + + ' + - 'event: response.content_part.done + + ' + - 'data: {"type":"response.content_part.done","sequence_number":10,"output_index":0,"item_id":"msg_01a1a9cadcd87c12bfc327544be648e5","content_index":0,"part":{"type":"output_text","text":"The + file instructs to water the tomatoes every morning and harvest the ripe fruit.","annotations":[]}} + + ' + - ' + + ' + - 'event: response.output_item.done + + ' + - 'data: {"type":"response.output_item.done","sequence_number":11,"output_index":0,"item":{"id":"msg_01a1a9cadcd87c12bfc327544be648e5","type":"message","role":"assistant","content":[{"type":"output_text","text":"The + file instructs to water the tomatoes every morning and harvest the ripe fruit.","annotations":[]}],"status":"completed"}} + + ' + - ' + + ' + - 'event: response.completed + + ' + - 'data: {"type":"response.completed","sequence_number":12,"response":{"id":"resp_01a1a9ca-dcd8-7c12-bfc3-273bfc7add97","object":"response","created_at":1793850006,"completed_at":1793850006,"background":false,"status":"completed","error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":1024,"max_tool_calls":null,"model":"zai-org/GLM-5.2","output":[{"id":"msg_01a1a9cadcd87c12bfc327544be648e5","type":"message","role":"assistant","content":[{"type":"output_text","text":"The + file instructs to water the tomatoes every morning and harvest the ripe fruit.","annotations":[]}],"status":"completed"}],"parallel_tool_calls":false,"previous_response_id":null,"prompt_cache_key":null,"prompt_cache_retention":null,"reasoning":{"effort":"minimal","summary":null},"service_tier":"default","store":false,"temperature":1.0,"text":{"format":{"type":"text"},"verbosity":"medium"},"tool_choice":"auto","tools":[{"type":"function","name":"read_file","description":"Read + a file by its path.","parameters":{"additionalProperties":false,"properties":{"path":{"type":"string"}},"required":["path"],"type":"object"},"strict":false}],"top_logprobs":0,"top_p":1.0,"truncation":"disabled","usage":{"input_tokens":232,"output_tokens":17,"total_tokens":249,"input_tokens_details":{"cached_tokens":192,"cache_write_tokens":0},"output_tokens_details":{"reasoning_tokens":0}},"user":null,"safety_identifier":null,"frequency_penalty":0.0,"presence_penalty":0.0,"metadata":{}}} + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: response.completed +timestamp: '2026-11-05T03:40:06.394430+00:00' +upstream_url: https://api.together.ai/v1/responses diff --git a/tests/cassettes/upstream_ir/tool_use_parallel/fireworks-responses-non_stream-00.yaml b/tests/cassettes/upstream_ir/tool_use_parallel/fireworks-responses-non_stream-00.yaml new file mode 100644 index 0000000..d6bbfab --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use_parallel/fireworks-responses-non_stream-00.yaml @@ -0,0 +1,138 @@ +filename: 2026-11-04-01a1a479-66a6-7e01-bebc-bc8af91a976e +request: + body: + input: + - content: 'Call add twice in parallel: first 2 and 3, then 7 and 4. Then give + both results.' + role: user + max_output_tokens: 2048 + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + parallel_tool_calls: true + reasoning: + effort: none + store: false + stream: false + tool_choice: required + tools: + - description: Add two integers. + name: add + parameters: + additionalProperties: false + properties: + a: + type: integer + b: + type: integer + required: + - a + - b + type: object + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '542' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /inference/v1/responses + query_params: {} +request_id: 01a1a479-66a6-7e01-bebc-bc8af91a976e +response: + body: + background: null + created_at: 1793760783 + error: null + id: resp_24d416566c804ae0a8edbfd5892c36ce + incomplete_details: null + instructions: null + max_output_tokens: 2048 + max_tool_calls: null + metadata: {} + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + object: response + output: + - arguments: '{"a": 2, "b": 3}' + call_id: chatcmpl-tool-bb79d0bb1ef0d867 + id: fc_9951c655d7874688924376a022f80351 + name: add + status: completed + type: function_call + - arguments: '{"a": 7, "b": 4}' + call_id: chatcmpl-tool-af0f5743e61b4170 + id: fc_1e4743b1fd2948f9b30a72ffac19a4b5 + name: add + status: completed + type: function_call + parallel_tool_calls: true + previous_response_id: null + reasoning: + effort: none + status: completed + store: false + temperature: 1.0 + text: + format: + type: text + tool_choice: required + tools: + - description: Add two integers. + name: add + parameters: + additionalProperties: false + properties: + a: + type: integer + b: + type: integer + required: + - a + - b + type: object + type: function + top_logprobs: null + top_p: 0.95 + truncation: disabled + usage: + input_tokens: 320 + input_tokens_details: + cached_tokens: 0 + output_tokens: 61 + output_tokens_details: + reasoning_tokens: 0 + total_tokens: 381 + user: null + body_bytes: !!binary | + eyJpZCI6InJlc3BfMjRkNDE2NTY2YzgwNGFlMGE4ZWRiZmQ1ODkyYzM2Y2UiLCJvYmplY3QiOiJy + ZXNwb25zZSIsImNyZWF0ZWRfYXQiOjE3OTM3NjA3ODMsInN0YXR1cyI6ImNvbXBsZXRlZCIsIm1v + ZGVsIjoiYWNjb3VudHMvZmlyZXdvcmtzL21vZGVscy9uZW1vdHJvbi1saWdodG5pbmctM3A1LTMw + Yi1hM2IiLCJvdXRwdXQiOlt7ImlkIjoiZmNfOTk1MWM2NTVkNzg3NDY4ODkyNDM3NmEwMjJmODAz + NTEiLCJ0eXBlIjoiZnVuY3Rpb25fY2FsbCIsImNhbGxfaWQiOiJjaGF0Y21wbC10b29sLWJiNzlk + MGJiMWVmMGQ4NjciLCJuYW1lIjoiYWRkIiwiYXJndW1lbnRzIjoie1wiYVwiOiAyLCBcImJcIjog + M30iLCJzdGF0dXMiOiJjb21wbGV0ZWQifSx7ImlkIjoiZmNfMWU0NzQzYjFmZDI5NDhmOWIzMGE3 + MmZmYWMxOWE0YjUiLCJ0eXBlIjoiZnVuY3Rpb25fY2FsbCIsImNhbGxfaWQiOiJjaGF0Y21wbC10 + b29sLWFmMGY1NzQzZTYxYjQxNzAiLCJuYW1lIjoiYWRkIiwiYXJndW1lbnRzIjoie1wiYVwiOiA3 + LCBcImJcIjogNH0iLCJzdGF0dXMiOiJjb21wbGV0ZWQifV0sInByZXZpb3VzX3Jlc3BvbnNlX2lk + IjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjMyMCwib3V0cHV0X3Rva2VucyI6NjEsInRv + dGFsX3Rva2VucyI6MzgxLCJpbnB1dF90b2tlbnNfZGV0YWlscyI6eyJjYWNoZWRfdG9rZW5zIjow + fSwib3V0cHV0X3Rva2Vuc19kZXRhaWxzIjp7InJlYXNvbmluZ190b2tlbnMiOjB9fSwiZXJyb3Ii + Om51bGwsImluY29tcGxldGVfZGV0YWlscyI6bnVsbCwiaW5zdHJ1Y3Rpb25zIjpudWxsLCJtYXhf + b3V0cHV0X3Rva2VucyI6MjA0OCwibWF4X3Rvb2xfY2FsbHMiOm51bGwsInBhcmFsbGVsX3Rvb2xf + Y2FsbHMiOnRydWUsInJlYXNvbmluZyI6eyJlZmZvcnQiOiJub25lIn0sInN0b3JlIjpmYWxzZSwi + dGVtcGVyYXR1cmUiOjEuMCwidGV4dCI6eyJmb3JtYXQiOnsidHlwZSI6InRleHQifX0sInRvb2xf + Y2hvaWNlIjoicmVxdWlyZWQiLCJ0b29scyI6W3sidHlwZSI6ImZ1bmN0aW9uIiwibmFtZSI6ImFk + ZCIsImRlc2NyaXB0aW9uIjoiQWRkIHR3byBpbnRlZ2Vycy4iLCJwYXJhbWV0ZXJzIjp7InR5cGUi + OiJvYmplY3QiLCJwcm9wZXJ0aWVzIjp7ImEiOnsidHlwZSI6ImludGVnZXIifSwiYiI6eyJ0eXBl + IjoiaW50ZWdlciJ9fSwicmVxdWlyZWQiOlsiYSIsImIiXSwiYWRkaXRpb25hbFByb3BlcnRpZXMi + OmZhbHNlfX1dLCJ0b3BfcCI6MC45NSwidG9wX2xvZ3Byb2JzIjpudWxsLCJ0cnVuY2F0aW9uIjoi + ZGlzYWJsZWQiLCJ1c2VyIjpudWxsLCJiYWNrZ3JvdW5kIjpudWxsLCJtZXRhZGF0YSI6e319 + headers: + connection: keep-alive + content-length: '1308' + content-type: application/json + x-request-id: 4896f76d-35c8-468c-9b45-b00e930065bf + status_code: 200 +timestamp: '2026-11-04T02:53:01.990733+00:00' +upstream_url: https://api.fireworks.ai/inference/v1/responses diff --git a/tests/cassettes/upstream_ir/tool_use_parallel/fireworks-responses-non_stream-01.yaml b/tests/cassettes/upstream_ir/tool_use_parallel/fireworks-responses-non_stream-01.yaml new file mode 100644 index 0000000..acdc7ba --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use_parallel/fireworks-responses-non_stream-01.yaml @@ -0,0 +1,156 @@ +filename: 2026-11-04-01a1a479-6e72-7951-91b7-8eb3882713c0 +request: + body: + input: + - content: 'Call add twice in parallel: first 2 and 3, then 7 and 4. Then give + both results.' + role: user + - arguments: '{"a": 2, "b": 3}' + call_id: chatcmpl-tool-bb79d0bb1ef0d867 + id: fc_9951c655d7874688924376a022f80351 + name: add + status: completed + type: function_call + - arguments: '{"a": 7, "b": 4}' + call_id: chatcmpl-tool-af0f5743e61b4170 + id: fc_1e4743b1fd2948f9b30a72ffac19a4b5 + name: add + status: completed + type: function_call + - call_id: chatcmpl-tool-bb79d0bb1ef0d867 + output: '5' + type: function_call_output + - call_id: chatcmpl-tool-af0f5743e61b4170 + output: '11' + type: function_call_output + max_output_tokens: 2048 + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + parallel_tool_calls: true + reasoning: + effort: none + store: false + stream: false + tool_choice: none + tools: + - description: Add two integers. + name: add + parameters: + additionalProperties: false + properties: + a: + type: integer + b: + type: integer + required: + - a + - b + type: object + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '1075' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /inference/v1/responses + query_params: {} +request_id: 01a1a479-6e72-7951-91b7-8eb3882713c0 +response: + body: + background: null + created_at: 1793760785 + error: null + id: resp_cdd2d56240a3455cb6491b8cf5567c7b + incomplete_details: null + instructions: null + max_output_tokens: 2048 + max_tool_calls: null + metadata: {} + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + object: response + output: + - content: + - annotations: [] + text: 'Here are the results from the two additions in parallel: + + + * 2 + 3 = **5** + + * 7 + 4 = **11**' + type: output_text + id: msg_98a517ce9e5846dabb5dfbbfe6b585aa + role: assistant + status: completed + type: message + parallel_tool_calls: true + previous_response_id: null + reasoning: + effort: none + status: completed + store: false + temperature: 1.0 + text: + format: + type: text + tool_choice: none + tools: + - description: Add two integers. + name: add + parameters: + additionalProperties: false + properties: + a: + type: integer + b: + type: integer + required: + - a + - b + type: object + type: function + top_logprobs: null + top_p: 0.95 + truncation: disabled + usage: + input_tokens: 126 + input_tokens_details: + cached_tokens: 0 + output_tokens: 35 + output_tokens_details: + reasoning_tokens: 0 + total_tokens: 161 + user: null + body_bytes: !!binary | + eyJpZCI6InJlc3BfY2RkMmQ1NjI0MGEzNDU1Y2I2NDkxYjhjZjU1NjdjN2IiLCJvYmplY3QiOiJy + ZXNwb25zZSIsImNyZWF0ZWRfYXQiOjE3OTM3NjA3ODUsInN0YXR1cyI6ImNvbXBsZXRlZCIsIm1v + ZGVsIjoiYWNjb3VudHMvZmlyZXdvcmtzL21vZGVscy9uZW1vdHJvbi1saWdodG5pbmctM3A1LTMw + Yi1hM2IiLCJvdXRwdXQiOlt7ImlkIjoibXNnXzk4YTUxN2NlOWU1ODQ2ZGFiYjVkZmJiZmU2YjU4 + NWFhIiwidHlwZSI6Im1lc3NhZ2UiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlw + ZSI6Im91dHB1dF90ZXh0IiwidGV4dCI6IkhlcmUgYXJlIHRoZSByZXN1bHRzIGZyb20gdGhlIHR3 + byBhZGRpdGlvbnMgaW4gcGFyYWxsZWw6XG5cbiogICAyICsgMyA9ICoqNSoqXG4qICAgNyArIDQg + PSAqKjExKioiLCJhbm5vdGF0aW9ucyI6W119XSwic3RhdHVzIjoiY29tcGxldGVkIn1dLCJwcmV2 + aW91c19yZXNwb25zZV9pZCI6bnVsbCwidXNhZ2UiOnsiaW5wdXRfdG9rZW5zIjoxMjYsIm91dHB1 + dF90b2tlbnMiOjM1LCJ0b3RhbF90b2tlbnMiOjE2MSwiaW5wdXRfdG9rZW5zX2RldGFpbHMiOnsi + Y2FjaGVkX3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnNfZGV0YWlscyI6eyJyZWFzb25pbmdfdG9r + ZW5zIjowfX0sImVycm9yIjpudWxsLCJpbmNvbXBsZXRlX2RldGFpbHMiOm51bGwsImluc3RydWN0 + aW9ucyI6bnVsbCwibWF4X291dHB1dF90b2tlbnMiOjIwNDgsIm1heF90b29sX2NhbGxzIjpudWxs + LCJwYXJhbGxlbF90b29sX2NhbGxzIjp0cnVlLCJyZWFzb25pbmciOnsiZWZmb3J0Ijoibm9uZSJ9 + LCJzdG9yZSI6ZmFsc2UsInRlbXBlcmF0dXJlIjoxLjAsInRleHQiOnsiZm9ybWF0Ijp7InR5cGUi + OiJ0ZXh0In19LCJ0b29sX2Nob2ljZSI6Im5vbmUiLCJ0b29scyI6W3sidHlwZSI6ImZ1bmN0aW9u + IiwibmFtZSI6ImFkZCIsImRlc2NyaXB0aW9uIjoiQWRkIHR3byBpbnRlZ2Vycy4iLCJwYXJhbWV0 + ZXJzIjp7InR5cGUiOiJvYmplY3QiLCJwcm9wZXJ0aWVzIjp7ImEiOnsidHlwZSI6ImludGVnZXIi + fSwiYiI6eyJ0eXBlIjoiaW50ZWdlciJ9fSwicmVxdWlyZWQiOlsiYSIsImIiXSwiYWRkaXRpb25h + bFByb3BlcnRpZXMiOmZhbHNlfX1dLCJ0b3BfcCI6MC45NSwidG9wX2xvZ3Byb2JzIjpudWxsLCJ0 + cnVuY2F0aW9uIjoiZGlzYWJsZWQiLCJ1c2VyIjpudWxsLCJiYWNrZ3JvdW5kIjpudWxsLCJtZXRh + ZGF0YSI6e319 + headers: + connection: keep-alive + content-length: '1206' + content-type: application/json + x-request-id: 2b1fbc48-6145-461b-ae4e-3834288a3b15 + status_code: 200 +timestamp: '2026-11-04T02:53:03.986259+00:00' +upstream_url: https://api.fireworks.ai/inference/v1/responses diff --git a/tests/cassettes/upstream_ir/tool_use_parallel/fireworks-responses-stream-00.yaml b/tests/cassettes/upstream_ir/tool_use_parallel/fireworks-responses-stream-00.yaml new file mode 100644 index 0000000..e4418f4 --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use_parallel/fireworks-responses-stream-00.yaml @@ -0,0 +1,158 @@ +filename: 2026-11-04-01a1a479-7e00-7951-98ee-32573dd402c6 +request: + body: + input: + - content: 'Call add twice in parallel: first 2 and 3, then 7 and 4. Then give + both results.' + role: user + max_output_tokens: 2048 + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + parallel_tool_calls: true + reasoning: + effort: none + store: false + stream: true + tool_choice: required + tools: + - description: Add two integers. + name: add + parameters: + additionalProperties: false + properties: + a: + type: integer + b: + type: integer + required: + - a + - b + type: object + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '541' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /inference/v1/responses + query_params: {} +request_id: 01a1a479-7e00-7951-98ee-32573dd402c6 +response: + error_event: false + headers: + cache-control: no-cache + connection: keep-alive + content-type: text/event-stream; charset=utf-8 + x-request-id: 846998ef-4b53-41f9-9113-9e716da053f8 + sse: + - 'data: {"type":"response.created","sequence_number":0,"response":{"id":"resp_44b508d0927e47c3bb22f4c79972f083","object":"response","created_at":1793760788,"status":"in_progress","model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","output":[],"previous_response_id":null,"usage":null,"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":2048,"max_tool_calls":null,"parallel_tool_calls":true,"reasoning":{"effort":"none"},"store":false,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":"required","tools":[{"type":"function","name":"add","description":"Add + two integers.","parameters":{"type":"object","properties":{"a":{"type":"integer"},"b":{"type":"integer"}},"required":["a","b"],"additionalProperties":false}}],"top_p":1.0,"top_logprobs":null,"truncation":"disabled","user":null,"background":null,"metadata":{}}} + + ' + - ' + + ' + - 'data: {"type":"response.in_progress","sequence_number":1,"response":{"id":"resp_44b508d0927e47c3bb22f4c79972f083","object":"response","created_at":1793760788,"status":"in_progress","model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","output":[],"previous_response_id":null,"usage":null,"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":2048,"max_tool_calls":null,"parallel_tool_calls":true,"reasoning":{"effort":"none"},"store":false,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":"required","tools":[{"type":"function","name":"add","description":"Add + two integers.","parameters":{"type":"object","properties":{"a":{"type":"integer"},"b":{"type":"integer"}},"required":["a","b"],"additionalProperties":false}}],"top_p":1.0,"top_logprobs":null,"truncation":"disabled","user":null,"background":null,"metadata":{}}} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.added","sequence_number":2,"output_index":0,"item":{"type":"function_call","id":"fc_9fc68cf37d3c4b2bba4bc3ffcc5479a7","status":"in_progress","call_id":"chatcmpl-tool-a630711f382d718e","name":"add","arguments":""}} + + ' + - ' + + ' + - 'data: {"type":"response.function_call_arguments.delta","sequence_number":3,"item_id":"fc_9fc68cf37d3c4b2bba4bc3ffcc5479a7","output_index":0,"delta":"{\"a\": + "} + + ' + - ' + + ' + - 'data: {"type":"response.function_call_arguments.delta","sequence_number":4,"item_id":"fc_9fc68cf37d3c4b2bba4bc3ffcc5479a7","output_index":0,"delta":"2, + \"b\": "} + + ' + - ' + + ' + - 'data: {"type":"response.function_call_arguments.delta","sequence_number":5,"item_id":"fc_9fc68cf37d3c4b2bba4bc3ffcc5479a7","output_index":0,"delta":"3}"} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.added","sequence_number":6,"output_index":1,"item":{"type":"function_call","id":"fc_f393ec47f62942a29937cb8dfe7397b0","status":"in_progress","call_id":"chatcmpl-tool-b644be70919a8670","name":"add","arguments":""}} + + ' + - ' + + ' + - 'data: {"type":"response.function_call_arguments.delta","sequence_number":7,"item_id":"fc_f393ec47f62942a29937cb8dfe7397b0","output_index":1,"delta":"{\"a\": + "} + + ' + - ' + + ' + - 'data: {"type":"response.function_call_arguments.delta","sequence_number":8,"item_id":"fc_f393ec47f62942a29937cb8dfe7397b0","output_index":1,"delta":"7, + \"b\": "} + + ' + - ' + + ' + - 'data: {"type":"response.function_call_arguments.delta","sequence_number":9,"item_id":"fc_f393ec47f62942a29937cb8dfe7397b0","output_index":1,"delta":"4}"} + + ' + - ' + + ' + - 'data: {"type":"response.function_call_arguments.done","sequence_number":10,"item_id":"fc_9fc68cf37d3c4b2bba4bc3ffcc5479a7","output_index":0,"arguments":"{\"a\": + 2, \"b\": 3}"} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.done","sequence_number":11,"output_index":0,"item":{"type":"function_call","id":"fc_9fc68cf37d3c4b2bba4bc3ffcc5479a7","status":"completed","call_id":"chatcmpl-tool-a630711f382d718e","name":"add","arguments":"{\"a\": + 2, \"b\": 3}"}} + + ' + - ' + + ' + - 'data: {"type":"response.function_call_arguments.done","sequence_number":12,"item_id":"fc_f393ec47f62942a29937cb8dfe7397b0","output_index":1,"arguments":"{\"a\": + 7, \"b\": 4}"} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.done","sequence_number":13,"output_index":1,"item":{"type":"function_call","id":"fc_f393ec47f62942a29937cb8dfe7397b0","status":"completed","call_id":"chatcmpl-tool-b644be70919a8670","name":"add","arguments":"{\"a\": + 7, \"b\": 4}"}} + + ' + - ' + + ' + - 'data: {"type":"response.completed","sequence_number":14,"response":{"id":"resp_44b508d0927e47c3bb22f4c79972f083","object":"response","created_at":1793760788,"status":"completed","model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","output":[{"id":"fc_9fc68cf37d3c4b2bba4bc3ffcc5479a7","type":"function_call","call_id":"chatcmpl-tool-a630711f382d718e","name":"add","arguments":"{\"a\": + 2, \"b\": 3}","status":"completed"},{"id":"fc_f393ec47f62942a29937cb8dfe7397b0","type":"function_call","call_id":"chatcmpl-tool-b644be70919a8670","name":"add","arguments":"{\"a\": + 7, \"b\": 4}","status":"completed"}],"previous_response_id":null,"usage":{"input_tokens":320,"output_tokens":61,"total_tokens":381,"input_tokens_details":{"cached_tokens":319},"output_tokens_details":{"reasoning_tokens":0}},"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":2048,"max_tool_calls":null,"parallel_tool_calls":true,"reasoning":{"effort":"none"},"store":false,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":"required","tools":[{"type":"function","name":"add","description":"Add + two integers.","parameters":{"type":"object","properties":{"a":{"type":"integer"},"b":{"type":"integer"}},"required":["a","b"],"additionalProperties":false}}],"top_p":0.95,"top_logprobs":null,"truncation":"disabled","user":null,"background":null,"metadata":{}}} + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: null +timestamp: '2026-11-04T02:53:07.968453+00:00' +upstream_url: https://api.fireworks.ai/inference/v1/responses diff --git a/tests/cassettes/upstream_ir/tool_use_parallel/fireworks-responses-stream-01.yaml b/tests/cassettes/upstream_ir/tool_use_parallel/fireworks-responses-stream-01.yaml new file mode 100644 index 0000000..5e8b9e1 --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use_parallel/fireworks-responses-stream-01.yaml @@ -0,0 +1,698 @@ +filename: 2026-11-04-01a1a479-864a-7303-8f1f-f695dfba9a34 +request: + body: + input: + - content: 'Call add twice in parallel: first 2 and 3, then 7 and 4. Then give + both results.' + role: user + - arguments: '{"a": 2, "b": 3}' + call_id: chatcmpl-tool-a630711f382d718e + id: fc_9fc68cf37d3c4b2bba4bc3ffcc5479a7 + name: add + status: completed + type: function_call + - arguments: '{"a": 7, "b": 4}' + call_id: chatcmpl-tool-b644be70919a8670 + id: fc_f393ec47f62942a29937cb8dfe7397b0 + name: add + status: completed + type: function_call + - call_id: chatcmpl-tool-a630711f382d718e + output: '5' + type: function_call_output + - call_id: chatcmpl-tool-b644be70919a8670 + output: '11' + type: function_call_output + max_output_tokens: 2048 + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + parallel_tool_calls: true + reasoning: + effort: none + store: false + stream: true + tool_choice: none + tools: + - description: Add two integers. + name: add + parameters: + additionalProperties: false + properties: + a: + type: integer + b: + type: integer + required: + - a + - b + type: object + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '1074' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /inference/v1/responses + query_params: {} +request_id: 01a1a479-864a-7303-8f1f-f695dfba9a34 +response: + error_event: false + headers: + cache-control: no-cache + connection: keep-alive + content-type: text/event-stream; charset=utf-8 + x-request-id: 1ba0a3c4-8533-4f93-80c4-ccf6ab474ad5 + sse: + - 'data: {"type":"response.created","sequence_number":0,"response":{"id":"resp_1cb642ef7ff04070b00a4f3b0ea29f84","object":"response","created_at":1793760790,"status":"in_progress","model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","output":[],"previous_response_id":null,"usage":null,"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":2048,"max_tool_calls":null,"parallel_tool_calls":true,"reasoning":{"effort":"none"},"store":false,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":"none","tools":[{"type":"function","name":"add","description":"Add + two integers.","parameters":{"type":"object","properties":{"a":{"type":"integer"},"b":{"type":"integer"}},"required":["a","b"],"additionalProperties":false}}],"top_p":1.0,"top_logprobs":null,"truncation":"disabled","user":null,"background":null,"metadata":{}}} + + ' + - ' + + ' + - 'data: {"type":"response.in_progress","sequence_number":1,"response":{"id":"resp_1cb642ef7ff04070b00a4f3b0ea29f84","object":"response","created_at":1793760790,"status":"in_progress","model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","output":[],"previous_response_id":null,"usage":null,"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":2048,"max_tool_calls":null,"parallel_tool_calls":true,"reasoning":{"effort":"none"},"store":false,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":"none","tools":[{"type":"function","name":"add","description":"Add + two integers.","parameters":{"type":"object","properties":{"a":{"type":"integer"},"b":{"type":"integer"}},"required":["a","b"],"additionalProperties":false}}],"top_p":1.0,"top_logprobs":null,"truncation":"disabled","user":null,"background":null,"metadata":{}}} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.added","sequence_number":2,"output_index":0,"item":{"type":"message","id":"msg_643d2c873b1549ada11b06f43806940b","status":"in_progress","role":"assistant","content":[]}} + + ' + - ' + + ' + - 'data: {"type":"response.content_part.added","sequence_number":3,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"part":{"type":"output_text","text":"","annotations":[]}} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":4,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":"The","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":5,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + results","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":6,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + are","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":7,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":":","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":8,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + ","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":9,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":"2","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":10,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + +","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":11,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + ","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":12,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":"3","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":13,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + =","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":14,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + ","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":15,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":"5","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":16,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + and","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":17,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + ","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":18,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":"7","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":19,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + +","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":20,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + ","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":21,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":"4","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":22,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + =","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":23,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + ","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":24,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":"5","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":25,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + and","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":26,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + ","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":27,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":"7","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":28,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + +","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":29,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + ","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":30,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":"4","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":31,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + =","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":32,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + ","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":33,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":"1","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":34,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":"1","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":35,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":".","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":36,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":"The","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":37,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + results","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":38,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + of","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":39,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + the","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":40,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + parallel","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":41,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + additions","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":42,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":":","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":43,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + ","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":44,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":"2","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":45,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + +","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":46,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + ","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":47,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":"3","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":48,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + =","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":49,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + ","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":50,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":"5","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":51,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + and","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":52,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + ","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":53,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":"7","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":54,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + +","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":55,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + ","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":56,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":"4","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":57,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + are","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":58,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + ","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":59,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":"1","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":60,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":"1","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":61,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":".","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":62,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":"Here","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":63,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + are","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":64,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + the","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":65,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + results","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":66,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + of","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":67,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + the","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":68,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + parallel","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":69,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + additions","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":70,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":".","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":71,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + First","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":72,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":",","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":73,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + ","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":74,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":"2","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":75,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + +","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":76,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + ","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":77,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":"3","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":78,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + and","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":79,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + ","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":80,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":"4","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":81,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + +","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":82,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + ","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":83,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":"7","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":84,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + =","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":85,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":" + ","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":86,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":"1","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":87,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":"1","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":88,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"delta":".","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.done","sequence_number":89,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"text":"The + results are: 2 + 3 = 5 and 7 + 4 = 5 and 7 + 4 = 11.The results of the parallel + additions: 2 + 3 = 5 and 7 + 4 are 11.Here are the results of the parallel additions. + First, 2 + 3 and 4 + 7 = 11.","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.content_part.done","sequence_number":90,"item_id":"msg_643d2c873b1549ada11b06f43806940b","output_index":0,"content_index":0,"part":{"type":"output_text","text":"The + results are: 2 + 3 = 5 and 7 + 4 = 5 and 7 + 4 = 11.The results of the parallel + additions: 2 + 3 = 5 and 7 + 4 are 11.Here are the results of the parallel additions. + First, 2 + 3 and 4 + 7 = 11.","annotations":[]}} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.done","sequence_number":91,"output_index":0,"item":{"type":"message","id":"msg_643d2c873b1549ada11b06f43806940b","status":"completed","role":"assistant","content":[{"type":"output_text","text":"The + results are: 2 + 3 = 5 and 7 + 4 = 5 and 7 + 4 = 11.The results of the parallel + additions: 2 + 3 = 5 and 7 + 4 are 11.Here are the results of the parallel additions. + First, 2 + 3 and 4 + 7 = 11.","annotations":[]}]}} + + ' + - ' + + ' + - 'data: {"type":"response.completed","sequence_number":92,"response":{"id":"resp_1cb642ef7ff04070b00a4f3b0ea29f84","object":"response","created_at":1793760894,"status":"completed","model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","output":[{"id":"msg_643d2c873b1549ada11b06f43806940b","type":"message","role":"assistant","content":[{"type":"output_text","text":"The + results are: 2 + 3 = 5 and 7 + 4 = 5 and 7 + 4 = 11.The results of the parallel + additions: 2 + 3 = 5 and 7 + 4 are 11.Here are the results of the parallel additions. + First, 2 + 3 and 4 + 7 = 11.","annotations":[]}],"status":"completed"}],"previous_response_id":null,"usage":{"input_tokens":126,"output_tokens":88,"total_tokens":214,"input_tokens_details":{"cached_tokens":125},"output_tokens_details":{"reasoning_tokens":0}},"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":2048,"max_tool_calls":null,"parallel_tool_calls":true,"reasoning":{"effort":"none"},"store":false,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":"none","tools":[{"type":"function","name":"add","description":"Add + two integers.","parameters":{"type":"object","properties":{"a":{"type":"integer"},"b":{"type":"integer"}},"required":["a","b"],"additionalProperties":false}}],"top_p":0.95,"top_logprobs":null,"truncation":"disabled","user":null,"background":null,"metadata":{}}} + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: null +timestamp: '2026-11-04T02:53:10.090725+00:00' +upstream_url: https://api.fireworks.ai/inference/v1/responses diff --git a/tests/cassettes/upstream_ir/tool_use_reasoning/fireworks-responses-stream-00.yaml b/tests/cassettes/upstream_ir/tool_use_reasoning/fireworks-responses-stream-00.yaml new file mode 100644 index 0000000..0df98a3 --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use_reasoning/fireworks-responses-stream-00.yaml @@ -0,0 +1,941 @@ +filename: 2026-11-04-01a1a47b-780c-7f62-8647-e0bd1492ca07 +request: + body: + input: + - content: Use add to add 2 and 3. After the result, use add to add that result + and 4. Then give the final answer. + role: user + max_output_tokens: 2048 + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + parallel_tool_calls: false + reasoning: + effort: low + store: false + stream: true + tool_choice: + name: add + type: function + tools: + - description: Add two integers. + name: add + parameters: + additionalProperties: false + properties: + a: + type: integer + b: + type: integer + required: + - a + - b + type: object + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '586' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /inference/v1/responses + query_params: {} +request_id: 01a1a47b-780c-7f62-8647-e0bd1492ca07 +response: + error_event: false + headers: + cache-control: no-cache + connection: keep-alive + content-type: text/event-stream; charset=utf-8 + x-request-id: f57cad2f-a84e-403b-a53b-723a054e0669 + sse: + - 'data: {"type":"response.created","sequence_number":0,"response":{"id":"resp_42b88977f0884e78b28dd169207af04a","object":"response","created_at":1793760917,"status":"in_progress","model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","output":[],"previous_response_id":null,"usage":null,"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":2048,"max_tool_calls":null,"parallel_tool_calls":false,"reasoning":{"effort":"low"},"store":false,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":{"type":"function","name":"add"},"tools":[{"type":"function","name":"add","description":"Add + two integers.","parameters":{"type":"object","properties":{"a":{"type":"integer"},"b":{"type":"integer"}},"required":["a","b"],"additionalProperties":false}}],"top_p":1.0,"top_logprobs":null,"truncation":"disabled","user":null,"background":null,"metadata":{}}} + + ' + - ' + + ' + - 'data: {"type":"response.in_progress","sequence_number":1,"response":{"id":"resp_42b88977f0884e78b28dd169207af04a","object":"response","created_at":1793760917,"status":"in_progress","model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","output":[],"previous_response_id":null,"usage":null,"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":2048,"max_tool_calls":null,"parallel_tool_calls":false,"reasoning":{"effort":"low"},"store":false,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":{"type":"function","name":"add"},"tools":[{"type":"function","name":"add","description":"Add + two integers.","parameters":{"type":"object","properties":{"a":{"type":"integer"},"b":{"type":"integer"}},"required":["a","b"],"additionalProperties":false}}],"top_p":1.0,"top_logprobs":null,"truncation":"disabled","user":null,"background":null,"metadata":{}}} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.added","sequence_number":2,"output_index":0,"item":{"type":"reasoning","id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","status":"in_progress","summary":[]}} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_part.added","sequence_number":3,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"part":{"type":"summary_text","text":""}} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":4,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":"We"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":5,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + need"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":6,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + to"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":7,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + add"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":8,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + 2"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":9,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + and"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":10,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + 3"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":11,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + =>"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":12,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + 5"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":13,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":"."} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":14,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + Then"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":15,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + add"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":16,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + result"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":17,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + ("} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":18,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":"5"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":19,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":")"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":20,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + and"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":21,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + 4"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":22,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + =>"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":23,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + 9"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":24,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":"."} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":25,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + Use"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":26,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + the"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":27,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + add"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":28,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + tool"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":29,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + twice"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":30,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":"."} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":31,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + The"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":32,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + instruction"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":33,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + says"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":34,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":":"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":35,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + \""} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":36,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":"Use"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":37,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + add"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":38,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + to"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":39,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + add"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":40,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + 2"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":41,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + and"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":42,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + 3"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":43,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":"."} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":44,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + After"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":45,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + the"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":46,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + result"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":47,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":","} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":48,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + use"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":49,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + add"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":50,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + to"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":51,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + add"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":52,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + that"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":53,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + result"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":54,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + and"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":55,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + 4"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":56,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":"."} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":57,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + Then"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":58,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + give"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":59,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + the"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":60,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + final"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":61,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + answer"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":62,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":".\""} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":63,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":"\n\nWe"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":64,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + need"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":65,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + to"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":66,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + call"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":67,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + add"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":68,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + function"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":69,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + twice"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":70,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":"."} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":71,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + First"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":72,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + call"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":73,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":":"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":74,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + a"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":75,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":"="} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":76,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":"2"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":77,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":",b"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":78,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":"="} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":79,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":"3"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":80,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":"."} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":81,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + Then"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":82,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + get"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":83,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + result"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":84,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + 5"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":85,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":"."} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":86,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + Then"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":87,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + second"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":88,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + call"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":89,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":":"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":90,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + a"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":91,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":"="} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":92,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":"5"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":93,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":",b"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":94,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":"="} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":95,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":"4"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":96,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":"."} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":97,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + Then"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":98,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + final"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":99,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + answer"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":100,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + 9"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":101,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":"."} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":102,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":"\n\nWe"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":103,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + must"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":104,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + output"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":105,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + calls"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":106,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + to"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":107,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + function"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":108,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + namespace"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":109,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":"."} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":110,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + Use"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":111,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + the"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":112,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + functions"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":113,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":".add"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":114,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":" + tool"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":115,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":"."} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":116,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":"\n\nPro"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":117,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":"ceed"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":118,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"delta":"."} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.added","sequence_number":119,"output_index":1,"item":{"type":"function_call","id":"fc_7e9c320c47f8441e96bd857c74c588e2","status":"in_progress","call_id":"chatcmpl-tool-815ddc71f6a8125e","name":"add","arguments":""}} + + ' + - ' + + ' + - 'data: {"type":"response.function_call_arguments.delta","sequence_number":120,"item_id":"fc_7e9c320c47f8441e96bd857c74c588e2","output_index":1,"delta":"{\"a\": + "} + + ' + - ' + + ' + - 'data: {"type":"response.function_call_arguments.delta","sequence_number":121,"item_id":"fc_7e9c320c47f8441e96bd857c74c588e2","output_index":1,"delta":"2, + \"b\": "} + + ' + - ' + + ' + - 'data: {"type":"response.function_call_arguments.delta","sequence_number":122,"item_id":"fc_7e9c320c47f8441e96bd857c74c588e2","output_index":1,"delta":"3}"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.done","sequence_number":123,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"text":"We + need to add 2 and 3 => 5. Then add result (5) and 4 => 9. Use the add tool twice. + The instruction says: \"Use add to add 2 and 3. After the result, use add to add + that result and 4. Then give the final answer.\"\n\nWe need to call add function + twice. First call: a=2,b=3. Then get result 5. Then second call: a=5,b=4. Then + final answer 9.\n\nWe must output calls to function namespace. Use the functions.add + tool.\n\nProceed."} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_part.done","sequence_number":124,"item_id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","output_index":0,"summary_index":0,"part":{"type":"summary_text","text":"We + need to add 2 and 3 => 5. Then add result (5) and 4 => 9. Use the add tool twice. + The instruction says: \"Use add to add 2 and 3. After the result, use add to add + that result and 4. Then give the final answer.\"\n\nWe need to call add function + twice. First call: a=2,b=3. Then get result 5. Then second call: a=5,b=4. Then + final answer 9.\n\nWe must output calls to function namespace. Use the functions.add + tool.\n\nProceed."}} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.done","sequence_number":125,"output_index":0,"item":{"type":"reasoning","id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","status":"completed","summary":[{"type":"summary_text","text":"We + need to add 2 and 3 => 5. Then add result (5) and 4 => 9. Use the add tool twice. + The instruction says: \"Use add to add 2 and 3. After the result, use add to add + that result and 4. Then give the final answer.\"\n\nWe need to call add function + twice. First call: a=2,b=3. Then get result 5. Then second call: a=5,b=4. Then + final answer 9.\n\nWe must output calls to function namespace. Use the functions.add + tool.\n\nProceed."}]}} + + ' + - ' + + ' + - 'data: {"type":"response.function_call_arguments.done","sequence_number":126,"item_id":"fc_7e9c320c47f8441e96bd857c74c588e2","output_index":1,"arguments":"{\"a\": + 2, \"b\": 3}"} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.done","sequence_number":127,"output_index":1,"item":{"type":"function_call","id":"fc_7e9c320c47f8441e96bd857c74c588e2","status":"completed","call_id":"chatcmpl-tool-815ddc71f6a8125e","name":"add","arguments":"{\"a\": + 2, \"b\": 3}"}} + + ' + - ' + + ' + - 'data: {"type":"response.completed","sequence_number":128,"response":{"id":"resp_42b88977f0884e78b28dd169207af04a","object":"response","created_at":1793760918,"status":"completed","model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","output":[{"id":"rs_81dd79c26a1148e48ab6f2ba1f320b29","type":"reasoning","summary":[{"type":"summary_text","text":"We + need to add 2 and 3 => 5. Then add result (5) and 4 => 9. Use the add tool twice. + The instruction says: \"Use add to add 2 and 3. After the result, use add to add + that result and 4. Then give the final answer.\"\n\nWe need to call add function + twice. First call: a=2,b=3. Then get result 5. Then second call: a=5,b=4. Then + final answer 9.\n\nWe must output calls to function namespace. Use the functions.add + tool.\n\nProceed."}]},{"id":"fc_7e9c320c47f8441e96bd857c74c588e2","type":"function_call","call_id":"chatcmpl-tool-815ddc71f6a8125e","name":"add","arguments":"{\"a\": + 2, \"b\": 3}","status":"completed"}],"previous_response_id":null,"usage":{"input_tokens":325,"output_tokens":157,"total_tokens":482,"input_tokens_details":{"cached_tokens":324},"output_tokens_details":{"reasoning_tokens":125}},"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":2048,"max_tool_calls":null,"parallel_tool_calls":false,"reasoning":{"effort":"low"},"store":false,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":{"type":"function","name":"add"},"tools":[{"type":"function","name":"add","description":"Add + two integers.","parameters":{"type":"object","properties":{"a":{"type":"integer"},"b":{"type":"integer"}},"required":["a","b"],"additionalProperties":false}}],"top_p":0.95,"top_logprobs":null,"truncation":"disabled","user":null,"background":null,"metadata":{}}} + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: null +timestamp: '2026-11-04T02:55:17.516044+00:00' +upstream_url: https://api.fireworks.ai/inference/v1/responses diff --git a/tests/cassettes/upstream_ir/tool_use_reasoning/fireworks-responses-stream-01.yaml b/tests/cassettes/upstream_ir/tool_use_reasoning/fireworks-responses-stream-01.yaml new file mode 100644 index 0000000..e774708 --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use_reasoning/fireworks-responses-stream-01.yaml @@ -0,0 +1,233 @@ +filename: 2026-11-04-01a1a47b-8072-7743-8410-673ee5c6e5a1 +request: + body: + input: + - content: Use add to add 2 and 3. After the result, use add to add that result + and 4. Then give the final answer. + role: user + - id: rs_81dd79c26a1148e48ab6f2ba1f320b29 + summary: + - text: 'We need to add 2 and 3 => 5. Then add result (5) and 4 => 9. Use the + add tool twice. The instruction says: "Use add to add 2 and 3. After the + result, use add to add that result and 4. Then give the final answer." + + + We need to call add function twice. First call: a=2,b=3. Then get result + 5. Then second call: a=5,b=4. Then final answer 9. + + + We must output calls to function namespace. Use the functions.add tool. + + + Proceed.' + type: summary_text + type: reasoning + - arguments: '{"a": 2, "b": 3}' + call_id: chatcmpl-tool-815ddc71f6a8125e + id: fc_7e9c320c47f8441e96bd857c74c588e2 + name: add + status: completed + type: function_call + - call_id: chatcmpl-tool-815ddc71f6a8125e + output: '5' + type: function_call_output + max_output_tokens: 2048 + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + parallel_tool_calls: false + reasoning: + effort: low + store: false + stream: true + tool_choice: + name: add + type: function + tools: + - description: Add two integers. + name: add + parameters: + additionalProperties: false + properties: + a: + type: integer + b: + type: integer + required: + - a + - b + type: object + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '1392' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /inference/v1/responses + query_params: {} +request_id: 01a1a47b-8072-7743-8410-673ee5c6e5a1 +response: + error_event: false + headers: + cache-control: no-cache + connection: keep-alive + content-type: text/event-stream; charset=utf-8 + x-request-id: c5b4cda8-b1e4-40f6-962f-cd7644c42730 + sse: + - 'data: {"type":"response.created","sequence_number":0,"response":{"id":"resp_f8eb2feb71a945f996ff2e09cfe3d327","object":"response","created_at":1793760919,"status":"in_progress","model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","output":[],"previous_response_id":null,"usage":null,"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":2048,"max_tool_calls":null,"parallel_tool_calls":false,"reasoning":{"effort":"low"},"store":false,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":{"type":"function","name":"add"},"tools":[{"type":"function","name":"add","description":"Add + two integers.","parameters":{"type":"object","properties":{"a":{"type":"integer"},"b":{"type":"integer"}},"required":["a","b"],"additionalProperties":false}}],"top_p":1.0,"top_logprobs":null,"truncation":"disabled","user":null,"background":null,"metadata":{}}} + + ' + - ' + + ' + - 'data: {"type":"response.in_progress","sequence_number":1,"response":{"id":"resp_f8eb2feb71a945f996ff2e09cfe3d327","object":"response","created_at":1793760919,"status":"in_progress","model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","output":[],"previous_response_id":null,"usage":null,"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":2048,"max_tool_calls":null,"parallel_tool_calls":false,"reasoning":{"effort":"low"},"store":false,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":{"type":"function","name":"add"},"tools":[{"type":"function","name":"add","description":"Add + two integers.","parameters":{"type":"object","properties":{"a":{"type":"integer"},"b":{"type":"integer"}},"required":["a","b"],"additionalProperties":false}}],"top_p":1.0,"top_logprobs":null,"truncation":"disabled","user":null,"background":null,"metadata":{}}} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.added","sequence_number":2,"output_index":0,"item":{"type":"reasoning","id":"rs_94c9d1d5f230459c8678dc7ec82280b6","status":"in_progress","summary":[]}} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_part.added","sequence_number":3,"item_id":"rs_94c9d1d5f230459c8678dc7ec82280b6","output_index":0,"summary_index":0,"part":{"type":"summary_text","text":""}} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":4,"item_id":"rs_94c9d1d5f230459c8678dc7ec82280b6","output_index":0,"summary_index":0,"delta":"Now"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":5,"item_id":"rs_94c9d1d5f230459c8678dc7ec82280b6","output_index":0,"summary_index":0,"delta":" + second"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":6,"item_id":"rs_94c9d1d5f230459c8678dc7ec82280b6","output_index":0,"summary_index":0,"delta":" + add"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":7,"item_id":"rs_94c9d1d5f230459c8678dc7ec82280b6","output_index":0,"summary_index":0,"delta":" + with"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":8,"item_id":"rs_94c9d1d5f230459c8678dc7ec82280b6","output_index":0,"summary_index":0,"delta":" + 5"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":9,"item_id":"rs_94c9d1d5f230459c8678dc7ec82280b6","output_index":0,"summary_index":0,"delta":" + and"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":10,"item_id":"rs_94c9d1d5f230459c8678dc7ec82280b6","output_index":0,"summary_index":0,"delta":" + 4"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":11,"item_id":"rs_94c9d1d5f230459c8678dc7ec82280b6","output_index":0,"summary_index":0,"delta":"."} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.added","sequence_number":12,"output_index":1,"item":{"type":"function_call","id":"fc_a1d436a8ace6446591d3f0116f074001","status":"in_progress","call_id":"chatcmpl-tool-8a59de4f19e9a6a9","name":"add","arguments":""}} + + ' + - ' + + ' + - 'data: {"type":"response.function_call_arguments.delta","sequence_number":13,"item_id":"fc_a1d436a8ace6446591d3f0116f074001","output_index":1,"delta":"{\"a\": + "} + + ' + - ' + + ' + - 'data: {"type":"response.function_call_arguments.delta","sequence_number":14,"item_id":"fc_a1d436a8ace6446591d3f0116f074001","output_index":1,"delta":"5, + \"b\": "} + + ' + - ' + + ' + - 'data: {"type":"response.function_call_arguments.delta","sequence_number":15,"item_id":"fc_a1d436a8ace6446591d3f0116f074001","output_index":1,"delta":"4}"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.done","sequence_number":16,"item_id":"rs_94c9d1d5f230459c8678dc7ec82280b6","output_index":0,"summary_index":0,"text":"Now + second add with 5 and 4."} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_part.done","sequence_number":17,"item_id":"rs_94c9d1d5f230459c8678dc7ec82280b6","output_index":0,"summary_index":0,"part":{"type":"summary_text","text":"Now + second add with 5 and 4."}} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.done","sequence_number":18,"output_index":0,"item":{"type":"reasoning","id":"rs_94c9d1d5f230459c8678dc7ec82280b6","status":"completed","summary":[{"type":"summary_text","text":"Now + second add with 5 and 4."}]}} + + ' + - ' + + ' + - 'data: {"type":"response.function_call_arguments.done","sequence_number":19,"item_id":"fc_a1d436a8ace6446591d3f0116f074001","output_index":1,"arguments":"{\"a\": + 5, \"b\": 4}"} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.done","sequence_number":20,"output_index":1,"item":{"type":"function_call","id":"fc_a1d436a8ace6446591d3f0116f074001","status":"completed","call_id":"chatcmpl-tool-8a59de4f19e9a6a9","name":"add","arguments":"{\"a\": + 5, \"b\": 4}"}} + + ' + - ' + + ' + - 'data: {"type":"response.completed","sequence_number":21,"response":{"id":"resp_f8eb2feb71a945f996ff2e09cfe3d327","object":"response","created_at":1793760920,"status":"completed","model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","output":[{"id":"rs_94c9d1d5f230459c8678dc7ec82280b6","type":"reasoning","summary":[{"type":"summary_text","text":"Now + second add with 5 and 4."}]},{"id":"fc_a1d436a8ace6446591d3f0116f074001","type":"function_call","call_id":"chatcmpl-tool-8a59de4f19e9a6a9","name":"add","arguments":"{\"a\": + 5, \"b\": 4}","status":"completed"}],"previous_response_id":null,"usage":{"input_tokens":501,"output_tokens":42,"total_tokens":543,"input_tokens_details":{"cached_tokens":324},"output_tokens_details":{"reasoning_tokens":10}},"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":2048,"max_tool_calls":null,"parallel_tool_calls":false,"reasoning":{"effort":"low"},"store":false,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":{"type":"function","name":"add"},"tools":[{"type":"function","name":"add","description":"Add + two integers.","parameters":{"type":"object","properties":{"a":{"type":"integer"},"b":{"type":"integer"}},"required":["a","b"],"additionalProperties":false}}],"top_p":0.95,"top_logprobs":null,"truncation":"disabled","user":null,"background":null,"metadata":{}}} + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: null +timestamp: '2026-11-04T02:55:19.666736+00:00' +upstream_url: https://api.fireworks.ai/inference/v1/responses diff --git a/tests/cassettes/upstream_ir/tool_use_reasoning/fireworks-responses-stream-02.yaml b/tests/cassettes/upstream_ir/tool_use_reasoning/fireworks-responses-stream-02.yaml new file mode 100644 index 0000000..399252e --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use_reasoning/fireworks-responses-stream-02.yaml @@ -0,0 +1,297 @@ +filename: 2026-11-04-01a1a47b-8380-79d3-875c-94f46a493788 +request: + body: + input: + - content: Use add to add 2 and 3. After the result, use add to add that result + and 4. Then give the final answer. + role: user + - id: rs_81dd79c26a1148e48ab6f2ba1f320b29 + summary: + - text: 'We need to add 2 and 3 => 5. Then add result (5) and 4 => 9. Use the + add tool twice. The instruction says: "Use add to add 2 and 3. After the + result, use add to add that result and 4. Then give the final answer." + + + We need to call add function twice. First call: a=2,b=3. Then get result + 5. Then second call: a=5,b=4. Then final answer 9. + + + We must output calls to function namespace. Use the functions.add tool. + + + Proceed.' + type: summary_text + type: reasoning + - arguments: '{"a": 2, "b": 3}' + call_id: chatcmpl-tool-815ddc71f6a8125e + id: fc_7e9c320c47f8441e96bd857c74c588e2 + name: add + status: completed + type: function_call + - call_id: chatcmpl-tool-815ddc71f6a8125e + output: '5' + type: function_call_output + - id: rs_94c9d1d5f230459c8678dc7ec82280b6 + summary: + - text: Now second add with 5 and 4. + type: summary_text + type: reasoning + - arguments: '{"a": 5, "b": 4}' + call_id: chatcmpl-tool-8a59de4f19e9a6a9 + id: fc_a1d436a8ace6446591d3f0116f074001 + name: add + status: completed + type: function_call + - call_id: chatcmpl-tool-8a59de4f19e9a6a9 + output: '9' + type: function_call_output + max_output_tokens: 2048 + model: accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b + parallel_tool_calls: false + reasoning: + effort: low + store: false + stream: true + tool_choice: none + tools: + - description: Add two integers. + name: add + parameters: + additionalProperties: false + properties: + a: + type: integer + b: + type: integer + required: + - a + - b + type: object + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '1772' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /inference/v1/responses + query_params: {} +request_id: 01a1a47b-8380-79d3-875c-94f46a493788 +response: + error_event: false + headers: + cache-control: no-cache + connection: keep-alive + content-type: text/event-stream; charset=utf-8 + x-request-id: 75d0bf5a-e2dc-44e6-bde4-a14e02a56582 + sse: + - 'data: {"type":"response.created","sequence_number":0,"response":{"id":"resp_1d6b3afa66bc42ec8a0f0d3ec4f7dcfb","object":"response","created_at":1793760920,"status":"in_progress","model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","output":[],"previous_response_id":null,"usage":null,"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":2048,"max_tool_calls":null,"parallel_tool_calls":false,"reasoning":{"effort":"low"},"store":false,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":"none","tools":[{"type":"function","name":"add","description":"Add + two integers.","parameters":{"type":"object","properties":{"a":{"type":"integer"},"b":{"type":"integer"}},"required":["a","b"],"additionalProperties":false}}],"top_p":1.0,"top_logprobs":null,"truncation":"disabled","user":null,"background":null,"metadata":{}}} + + ' + - ' + + ' + - 'data: {"type":"response.in_progress","sequence_number":1,"response":{"id":"resp_1d6b3afa66bc42ec8a0f0d3ec4f7dcfb","object":"response","created_at":1793760920,"status":"in_progress","model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","output":[],"previous_response_id":null,"usage":null,"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":2048,"max_tool_calls":null,"parallel_tool_calls":false,"reasoning":{"effort":"low"},"store":false,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":"none","tools":[{"type":"function","name":"add","description":"Add + two integers.","parameters":{"type":"object","properties":{"a":{"type":"integer"},"b":{"type":"integer"}},"required":["a","b"],"additionalProperties":false}}],"top_p":1.0,"top_logprobs":null,"truncation":"disabled","user":null,"background":null,"metadata":{}}} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.added","sequence_number":2,"output_index":0,"item":{"type":"reasoning","id":"rs_e5180fa79f8e4c6ebd3c6e323abc0318","status":"in_progress","summary":[]}} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_part.added","sequence_number":3,"item_id":"rs_e5180fa79f8e4c6ebd3c6e323abc0318","output_index":0,"summary_index":0,"part":{"type":"summary_text","text":""}} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":4,"item_id":"rs_e5180fa79f8e4c6ebd3c6e323abc0318","output_index":0,"summary_index":0,"delta":"We"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":5,"item_id":"rs_e5180fa79f8e4c6ebd3c6e323abc0318","output_index":0,"summary_index":0,"delta":" + have"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":6,"item_id":"rs_e5180fa79f8e4c6ebd3c6e323abc0318","output_index":0,"summary_index":0,"delta":" + final"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":7,"item_id":"rs_e5180fa79f8e4c6ebd3c6e323abc0318","output_index":0,"summary_index":0,"delta":" + answer"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":8,"item_id":"rs_e5180fa79f8e4c6ebd3c6e323abc0318","output_index":0,"summary_index":0,"delta":" + 9"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":9,"item_id":"rs_e5180fa79f8e4c6ebd3c6e323abc0318","output_index":0,"summary_index":0,"delta":"."} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":10,"item_id":"rs_e5180fa79f8e4c6ebd3c6e323abc0318","output_index":0,"summary_index":0,"delta":" + Provide"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":11,"item_id":"rs_e5180fa79f8e4c6ebd3c6e323abc0318","output_index":0,"summary_index":0,"delta":" + final"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":12,"item_id":"rs_e5180fa79f8e4c6ebd3c6e323abc0318","output_index":0,"summary_index":0,"delta":" + answer"} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.delta","sequence_number":13,"item_id":"rs_e5180fa79f8e4c6ebd3c6e323abc0318","output_index":0,"summary_index":0,"delta":"."} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.added","sequence_number":14,"output_index":1,"item":{"type":"message","id":"msg_1b88a034fa254802b693024c041b8f9c","status":"in_progress","role":"assistant","content":[]}} + + ' + - ' + + ' + - 'data: {"type":"response.content_part.added","sequence_number":15,"item_id":"msg_1b88a034fa254802b693024c041b8f9c","output_index":1,"content_index":0,"part":{"type":"output_text","text":"","annotations":[]}} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":16,"item_id":"msg_1b88a034fa254802b693024c041b8f9c","output_index":1,"content_index":0,"delta":"The","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":17,"item_id":"msg_1b88a034fa254802b693024c041b8f9c","output_index":1,"content_index":0,"delta":" + final","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":18,"item_id":"msg_1b88a034fa254802b693024c041b8f9c","output_index":1,"content_index":0,"delta":" + answer","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":19,"item_id":"msg_1b88a034fa254802b693024c041b8f9c","output_index":1,"content_index":0,"delta":" + is","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":20,"item_id":"msg_1b88a034fa254802b693024c041b8f9c","output_index":1,"content_index":0,"delta":" + **","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":21,"item_id":"msg_1b88a034fa254802b693024c041b8f9c","output_index":1,"content_index":0,"delta":"9","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","sequence_number":22,"item_id":"msg_1b88a034fa254802b693024c041b8f9c","output_index":1,"content_index":0,"delta":"**.","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_text.done","sequence_number":23,"item_id":"rs_e5180fa79f8e4c6ebd3c6e323abc0318","output_index":0,"summary_index":0,"text":"We + have final answer 9. Provide final answer."} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_summary_part.done","sequence_number":24,"item_id":"rs_e5180fa79f8e4c6ebd3c6e323abc0318","output_index":0,"summary_index":0,"part":{"type":"summary_text","text":"We + have final answer 9. Provide final answer."}} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.done","sequence_number":25,"output_index":0,"item":{"type":"reasoning","id":"rs_e5180fa79f8e4c6ebd3c6e323abc0318","status":"completed","summary":[{"type":"summary_text","text":"We + have final answer 9. Provide final answer."}]}} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.done","sequence_number":26,"item_id":"msg_1b88a034fa254802b693024c041b8f9c","output_index":1,"content_index":0,"text":"The + final answer is **9**.","logprobs":[]} + + ' + - ' + + ' + - 'data: {"type":"response.content_part.done","sequence_number":27,"item_id":"msg_1b88a034fa254802b693024c041b8f9c","output_index":1,"content_index":0,"part":{"type":"output_text","text":"The + final answer is **9**.","annotations":[]}} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.done","sequence_number":28,"output_index":1,"item":{"type":"message","id":"msg_1b88a034fa254802b693024c041b8f9c","status":"completed","role":"assistant","content":[{"type":"output_text","text":"The + final answer is **9**.","annotations":[]}]}} + + ' + - ' + + ' + - 'data: {"type":"response.completed","sequence_number":29,"response":{"id":"resp_1d6b3afa66bc42ec8a0f0d3ec4f7dcfb","object":"response","created_at":1793760921,"status":"completed","model":"accounts/fireworks/models/nemotron-lightning-3p5-30b-a3b","output":[{"id":"rs_e5180fa79f8e4c6ebd3c6e323abc0318","type":"reasoning","summary":[{"type":"summary_text","text":"We + have final answer 9. Provide final answer."}]},{"id":"msg_1b88a034fa254802b693024c041b8f9c","type":"message","role":"assistant","content":[{"type":"output_text","text":"The + final answer is **9**.","annotations":[]}],"status":"completed"}],"previous_response_id":null,"usage":{"input_tokens":283,"output_tokens":20,"total_tokens":303,"input_tokens_details":{"cached_tokens":0},"output_tokens_details":{"reasoning_tokens":11}},"error":null,"incomplete_details":null,"instructions":null,"max_output_tokens":2048,"max_tool_calls":null,"parallel_tool_calls":false,"reasoning":{"effort":"low"},"store":false,"temperature":1.0,"text":{"format":{"type":"text"}},"tool_choice":"none","tools":[{"type":"function","name":"add","description":"Add + two integers.","parameters":{"type":"object","properties":{"a":{"type":"integer"},"b":{"type":"integer"}},"required":["a","b"],"additionalProperties":false}}],"top_p":0.95,"top_logprobs":null,"truncation":"disabled","user":null,"background":null,"metadata":{}}} + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: null +timestamp: '2026-11-04T02:55:20.448944+00:00' +upstream_url: https://api.fireworks.ai/inference/v1/responses diff --git a/tests/cassettes/upstream_ir/tool_use_reasoning/openrouter-responses-stream-00.yaml b/tests/cassettes/upstream_ir/tool_use_reasoning/openrouter-responses-stream-00.yaml new file mode 100644 index 0000000..7793f48 --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use_reasoning/openrouter-responses-stream-00.yaml @@ -0,0 +1,821 @@ +filename: 2026-11-04-01a1a48b-917a-7e93-9cdf-6c74f01838ab +request: + body: + input: + - content: Use add to add 2 and 3. After the result, use add to add that result + and 4. Then give the final answer. + role: user + max_output_tokens: 2048 + model: nvidia/nemotron-3.5-lightning:free + parallel_tool_calls: false + provider: + allow_fallbacks: false + max_price: + completion: 0 + prompt: 0 + request: 0 + reasoning: + effort: low + store: false + stream: true + tool_choice: + name: add + type: function + tools: + - description: Add two integers. + name: add + parameters: + additionalProperties: false + properties: + a: + type: integer + b: + type: integer + required: + - a + - b + type: object + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '653' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /api/v1/responses + query_params: {} +request_id: 01a1a48b-917a-7e93-9cdf-6c74f01838ab +response: + error_event: false + headers: + cache-control: no-cache + connection: keep-alive + content-type: text/event-stream + sse: + - 'data: {"type":"response.created","response":{"id":"gen-1793761972-ceDTcK3tNCa44UBQ7mYh","object":"response","created_at":1793761972,"model":"nvidia/nemotron-3.5-lightning:free","status":"in_progress","completed_at":null,"output":[],"error":null,"incomplete_details":null,"access_programs":null,"tools":[{"type":"function","name":"add","description":"Add + two integers.","parameters":{"type":"object","properties":{"a":{"type":"integer"},"b":{"type":"integer"}},"required":["a","b"],"additionalProperties":false},"strict":null}],"tool_choice":{"type":"function","name":"add"},"parallel_tool_calls":false,"max_output_tokens":2048,"temperature":1,"top_p":1,"presence_penalty":0,"frequency_penalty":0,"top_logprobs":0,"max_tool_calls":null,"metadata":{},"background":false,"previous_response_id":null,"service_tier":"auto","truncation":"disabled","store":false,"instructions":null,"text":{"format":{"type":"text"}},"reasoning":{"effort":"low"},"safety_identifier":null,"prompt_cache_key":null,"prompt_cache_options":null,"usage":null},"sequence_number":0} + + ' + - ' + + ' + - 'data: {"type":"response.in_progress","response":{"id":"gen-1793761972-ceDTcK3tNCa44UBQ7mYh","object":"response","created_at":1793761972,"model":"nvidia/nemotron-3.5-lightning:free","status":"in_progress","completed_at":null,"output":[],"error":null,"incomplete_details":null,"access_programs":null,"tools":[{"type":"function","name":"add","description":"Add + two integers.","parameters":{"type":"object","properties":{"a":{"type":"integer"},"b":{"type":"integer"}},"required":["a","b"],"additionalProperties":false},"strict":null}],"tool_choice":{"type":"function","name":"add"},"parallel_tool_calls":false,"max_output_tokens":2048,"temperature":1,"top_p":1,"presence_penalty":0,"frequency_penalty":0,"top_logprobs":0,"max_tool_calls":null,"metadata":{},"background":false,"previous_response_id":null,"service_tier":"auto","truncation":"disabled","store":false,"instructions":null,"text":{"format":{"type":"text"}},"reasoning":{"effort":"low"},"safety_identifier":null,"prompt_cache_key":null,"prompt_cache_options":null,"usage":null},"sequence_number":1} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.added","output_index":0,"item":{"id":"rs_tmp_jz24fy2z9lc","type":"reasoning","status":"in_progress","summary":[]},"sequence_number":2} + + ' + - ' + + ' + - 'data: {"type":"response.content_part.added","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"part":{"type":"reasoning_text","text":""},"sequence_number":3} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":"The","sequence_number":4} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + user","sequence_number":5} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + wants","sequence_number":6} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":":","sequence_number":7} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + Use","sequence_number":8} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + add","sequence_number":9} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + to","sequence_number":10} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + add","sequence_number":11} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + 2","sequence_number":12} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + and","sequence_number":13} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + 3","sequence_number":14} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":".","sequence_number":15} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + Then","sequence_number":16} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + use","sequence_number":17} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + add","sequence_number":18} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + to","sequence_number":19} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + add","sequence_number":20} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + that","sequence_number":21} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + result","sequence_number":22} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + and","sequence_number":23} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + 4","sequence_number":24} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":".","sequence_number":25} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + Then","sequence_number":26} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + give","sequence_number":27} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + final","sequence_number":28} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + answer","sequence_number":29} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":".","sequence_number":30} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":"\n\nWe","sequence_number":31} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + need","sequence_number":32} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + to","sequence_number":33} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + call","sequence_number":34} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + add","sequence_number":35} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + function","sequence_number":36} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + twice","sequence_number":37} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":":","sequence_number":38} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + first","sequence_number":39} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + add","sequence_number":40} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + 2","sequence_number":41} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + and","sequence_number":42} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + 3","sequence_number":43} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + =>","sequence_number":44} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + result","sequence_number":45} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + 5","sequence_number":46} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":".","sequence_number":47} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + Then","sequence_number":48} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + add","sequence_number":49} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + that","sequence_number":50} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + result","sequence_number":51} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + (","sequence_number":52} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":"5","sequence_number":53} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":")","sequence_number":54} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + and","sequence_number":55} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + 4","sequence_number":56} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + =>","sequence_number":57} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + 9","sequence_number":58} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":".","sequence_number":59} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + Then","sequence_number":60} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + answer","sequence_number":61} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + final","sequence_number":62} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + answer","sequence_number":63} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + 9","sequence_number":64} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":".","sequence_number":65} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":"\n\nWe","sequence_number":66} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + need","sequence_number":67} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + to","sequence_number":68} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + use","sequence_number":69} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + the","sequence_number":70} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + functions","sequence_number":71} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + tool","sequence_number":72} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":".","sequence_number":73} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + So","sequence_number":74} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + first","sequence_number":75} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + call","sequence_number":76} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + functions","sequence_number":77} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":".add","sequence_number":78} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + with","sequence_number":79} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + a","sequence_number":80} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":"=2,","sequence_number":81} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + b","sequence_number":82} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":"=","sequence_number":83} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":"3","sequence_number":84} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":".","sequence_number":85} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + Then","sequence_number":86} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + call","sequence_number":87} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + again","sequence_number":88} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + with","sequence_number":89} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + a","sequence_number":90} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":"=","sequence_number":91} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + result","sequence_number":92} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":",","sequence_number":93} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + b","sequence_number":94} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":"=","sequence_number":95} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":"4","sequence_number":96} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":".","sequence_number":97} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + Then","sequence_number":98} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":" + respond","sequence_number":99} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"delta":".","sequence_number":100} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.done","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"text":"The + user wants: Use add to add 2 and 3. Then use add to add that result and 4. Then + give final answer.\n\nWe need to call add function twice: first add 2 and 3 => + result 5. Then add that result (5) and 4 => 9. Then answer final answer 9.\n\nWe + need to use the functions tool. So first call functions.add with a=2, b=3. Then + call again with a= result, b=4. Then respond.","sequence_number":101} + + ' + - ' + + ' + - 'data: {"type":"response.content_part.done","output_index":0,"item_id":"rs_tmp_jz24fy2z9lc","content_index":0,"part":{"type":"reasoning_text","text":"The + user wants: Use add to add 2 and 3. Then use add to add that result and 4. Then + give final answer.\n\nWe need to call add function twice: first add 2 and 3 => + result 5. Then add that result (5) and 4 => 9. Then answer final answer 9.\n\nWe + need to use the functions tool. So first call functions.add with a=2, b=3. Then + call again with a= result, b=4. Then respond."},"sequence_number":102} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.done","output_index":0,"item":{"id":"rs_tmp_jz24fy2z9lc","type":"reasoning","status":"completed","content":[{"type":"reasoning_text","text":"The + user wants: Use add to add 2 and 3. Then use add to add that result and 4. Then + give final answer.\n\nWe need to call add function twice: first add 2 and 3 => + result 5. Then add that result (5) and 4 => 9. Then answer final answer 9.\n\nWe + need to use the functions tool. So first call functions.add with a=2, b=3. Then + call again with a= result, b=4. Then respond."}],"summary":[],"format":"unknown"},"sequence_number":103} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.added","output_index":1,"item":{"id":"fc_tmp_yqc49bd84p","type":"function_call","status":"in_progress","call_id":"call-d2207b2b-33a6-4c81-a9ae-92419f3fb3bf","name":"add","arguments":""},"sequence_number":104} + + ' + - ' + + ' + - 'data: {"type":"response.function_call_arguments.delta","output_index":1,"item_id":"fc_tmp_yqc49bd84p","delta":"{\n \"a\": + 2,\n \"b\": 3\n}","sequence_number":105} + + ' + - ' + + ' + - 'data: {"type":"response.function_call_arguments.done","output_index":1,"item_id":"fc_tmp_yqc49bd84p","name":"add","arguments":"{\n \"a\": + 2,\n \"b\": 3\n}","sequence_number":106} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.done","output_index":1,"item":{"id":"fc_tmp_yqc49bd84p","type":"function_call","status":"completed","call_id":"call-d2207b2b-33a6-4c81-a9ae-92419f3fb3bf","name":"add","arguments":"{\n \"a\": + 2,\n \"b\": 3\n}"},"sequence_number":107} + + ' + - ' + + ' + - 'data: {"type":"response.completed","response":{"id":"gen-1793761972-ceDTcK3tNCa44UBQ7mYh","object":"response","created_at":1793761972,"model":"nvidia/nemotron-3.5-lightning:free","status":"completed","completed_at":1793761974,"output":[{"id":"rs_tmp_jz24fy2z9lc","type":"reasoning","status":"completed","content":[{"type":"reasoning_text","text":"The + user wants: Use add to add 2 and 3. Then use add to add that result and 4. Then + give final answer.\n\nWe need to call add function twice: first add 2 and 3 => + result 5. Then add that result (5) and 4 => 9. Then answer final answer 9.\n\nWe + need to use the functions tool. So first call functions.add with a=2, b=3. Then + call again with a= result, b=4. Then respond."}],"summary":[],"format":"unknown"},{"id":"fc_tmp_yqc49bd84p","type":"function_call","status":"completed","call_id":"call-d2207b2b-33a6-4c81-a9ae-92419f3fb3bf","name":"add","arguments":"{\n \"a\": + 2,\n \"b\": 3\n}"}],"error":null,"incomplete_details":null,"access_programs":null,"tools":[{"type":"function","name":"add","description":"Add + two integers.","parameters":{"type":"object","properties":{"a":{"type":"integer"},"b":{"type":"integer"}},"required":["a","b"],"additionalProperties":false},"strict":null}],"tool_choice":{"type":"function","name":"add"},"parallel_tool_calls":false,"max_output_tokens":2048,"temperature":1,"top_p":1,"presence_penalty":0,"frequency_penalty":0,"top_logprobs":0,"max_tool_calls":null,"metadata":{},"background":false,"previous_response_id":null,"service_tier":"auto","truncation":"disabled","store":false,"instructions":null,"text":{"format":{"type":"text"}},"reasoning":{"effort":"low"},"safety_identifier":null,"prompt_cache_key":null,"prompt_cache_options":null,"usage":{"input_tokens":324,"input_tokens_details":{"cached_tokens":0},"output_tokens":126,"output_tokens_details":{"reasoning_tokens":108},"total_tokens":450,"cost":0,"is_byok":false,"cost_details":{"upstream_inference_cost":0,"upstream_inference_input_cost":0,"upstream_inference_output_cost":0}}},"sequence_number":108} + + ' + - ' + + ' + - 'data: [DONE] + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: '[DONE]' +timestamp: '2026-11-04T03:12:52.602257+00:00' +upstream_url: https://openrouter.ai/api/v1/responses diff --git a/tests/cassettes/upstream_ir/tool_use_reasoning/openrouter-responses-stream-01.yaml b/tests/cassettes/upstream_ir/tool_use_reasoning/openrouter-responses-stream-01.yaml new file mode 100644 index 0000000..c596e31 --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use_reasoning/openrouter-responses-stream-01.yaml @@ -0,0 +1,245 @@ +filename: 2026-11-04-01a1a48b-9df0-7980-a4b9-23bde9b054f7 +request: + body: + input: + - content: Use add to add 2 and 3. After the result, use add to add that result + and 4. Then give the final answer. + role: user + - content: + - text: 'The user wants: Use add to add 2 and 3. Then use add to add that result + and 4. Then give final answer. + + + We need to call add function twice: first add 2 and 3 => result 5. Then + add that result (5) and 4 => 9. Then answer final answer 9. + + + We need to use the functions tool. So first call functions.add with a=2, + b=3. Then call again with a= result, b=4. Then respond.' + type: reasoning_text + format: unknown + id: rs_tmp_jz24fy2z9lc + status: completed + summary: [] + type: reasoning + - arguments: "{\n \"a\": 2,\n \"b\": 3\n}" + call_id: call-d2207b2b-33a6-4c81-a9ae-92419f3fb3bf + id: fc_tmp_yqc49bd84p + name: add + status: completed + type: function_call + - call_id: call-d2207b2b-33a6-4c81-a9ae-92419f3fb3bf + output: '5' + type: function_call_output + max_output_tokens: 2048 + model: nvidia/nemotron-3.5-lightning:free + parallel_tool_calls: false + provider: + allow_fallbacks: false + max_price: + completion: 0 + prompt: 0 + request: 0 + reasoning: + effort: low + store: false + stream: true + tool_choice: + name: add + type: function + tools: + - description: Add two integers. + name: add + parameters: + additionalProperties: false + properties: + a: + type: integer + b: + type: integer + required: + - a + - b + type: object + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '1451' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /api/v1/responses + query_params: {} +request_id: 01a1a48b-9df0-7980-a4b9-23bde9b054f7 +response: + error_event: false + headers: + cache-control: no-cache + connection: keep-alive + content-type: text/event-stream + sse: + - 'data: {"type":"response.created","response":{"id":"gen-1793761975-FlNZ7eszgb5sH5V3O69t","object":"response","created_at":1793761975,"model":"nvidia/nemotron-3.5-lightning:free","status":"in_progress","completed_at":null,"output":[],"error":null,"incomplete_details":null,"access_programs":null,"tools":[{"type":"function","name":"add","description":"Add + two integers.","parameters":{"type":"object","properties":{"a":{"type":"integer"},"b":{"type":"integer"}},"required":["a","b"],"additionalProperties":false},"strict":null}],"tool_choice":{"type":"function","name":"add"},"parallel_tool_calls":false,"max_output_tokens":2048,"temperature":1,"top_p":1,"presence_penalty":0,"frequency_penalty":0,"top_logprobs":0,"max_tool_calls":null,"metadata":{},"background":false,"previous_response_id":null,"service_tier":"auto","truncation":"disabled","store":false,"instructions":null,"text":{"format":{"type":"text"}},"reasoning":{"effort":"low"},"safety_identifier":null,"prompt_cache_key":null,"prompt_cache_options":null,"usage":null},"sequence_number":0} + + ' + - ' + + ' + - 'data: {"type":"response.in_progress","response":{"id":"gen-1793761975-FlNZ7eszgb5sH5V3O69t","object":"response","created_at":1793761975,"model":"nvidia/nemotron-3.5-lightning:free","status":"in_progress","completed_at":null,"output":[],"error":null,"incomplete_details":null,"access_programs":null,"tools":[{"type":"function","name":"add","description":"Add + two integers.","parameters":{"type":"object","properties":{"a":{"type":"integer"},"b":{"type":"integer"}},"required":["a","b"],"additionalProperties":false},"strict":null}],"tool_choice":{"type":"function","name":"add"},"parallel_tool_calls":false,"max_output_tokens":2048,"temperature":1,"top_p":1,"presence_penalty":0,"frequency_penalty":0,"top_logprobs":0,"max_tool_calls":null,"metadata":{},"background":false,"previous_response_id":null,"service_tier":"auto","truncation":"disabled","store":false,"instructions":null,"text":{"format":{"type":"text"}},"reasoning":{"effort":"low"},"safety_identifier":null,"prompt_cache_key":null,"prompt_cache_options":null,"usage":null},"sequence_number":1} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.added","output_index":0,"item":{"id":"rs_tmp_id1ci0csjjo","type":"reasoning","status":"in_progress","summary":[]},"sequence_number":2} + + ' + - ' + + ' + - 'data: {"type":"response.content_part.added","output_index":0,"item_id":"rs_tmp_id1ci0csjjo","content_index":0,"part":{"type":"reasoning_text","text":""},"sequence_number":3} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_id1ci0csjjo","content_index":0,"delta":"We + got","sequence_number":4} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_id1ci0csjjo","content_index":0,"delta":" + result","sequence_number":5} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_id1ci0csjjo","content_index":0,"delta":" + 5","sequence_number":6} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_id1ci0csjjo","content_index":0,"delta":".","sequence_number":7} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_id1ci0csjjo","content_index":0,"delta":" + Now","sequence_number":8} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_id1ci0csjjo","content_index":0,"delta":" + add","sequence_number":9} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_id1ci0csjjo","content_index":0,"delta":" + 5","sequence_number":10} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_id1ci0csjjo","content_index":0,"delta":" + and","sequence_number":11} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_id1ci0csjjo","content_index":0,"delta":" + 4","sequence_number":12} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_id1ci0csjjo","content_index":0,"delta":".","sequence_number":13} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.done","output_index":0,"item_id":"rs_tmp_id1ci0csjjo","content_index":0,"text":"We + got result 5. Now add 5 and 4.","sequence_number":14} + + ' + - ' + + ' + - 'data: {"type":"response.content_part.done","output_index":0,"item_id":"rs_tmp_id1ci0csjjo","content_index":0,"part":{"type":"reasoning_text","text":"We + got result 5. Now add 5 and 4."},"sequence_number":15} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.done","output_index":0,"item":{"id":"rs_tmp_id1ci0csjjo","type":"reasoning","status":"completed","content":[{"type":"reasoning_text","text":"We + got result 5. Now add 5 and 4."}],"summary":[],"format":"unknown"},"sequence_number":16} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.added","output_index":1,"item":{"id":"fc_tmp_6gspjedt008","type":"function_call","status":"in_progress","call_id":"call-b0e8c803-f561-4c2a-8bef-ea30c661e3c1","name":"add","arguments":""},"sequence_number":17} + + ' + - ' + + ' + - 'data: {"type":"response.function_call_arguments.delta","output_index":1,"item_id":"fc_tmp_6gspjedt008","delta":"{\n \"a\": + 5,\n \"b\": 4\n}","sequence_number":18} + + ' + - ' + + ' + - 'data: {"type":"response.function_call_arguments.done","output_index":1,"item_id":"fc_tmp_6gspjedt008","name":"add","arguments":"{\n \"a\": + 5,\n \"b\": 4\n}","sequence_number":19} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.done","output_index":1,"item":{"id":"fc_tmp_6gspjedt008","type":"function_call","status":"completed","call_id":"call-b0e8c803-f561-4c2a-8bef-ea30c661e3c1","name":"add","arguments":"{\n \"a\": + 5,\n \"b\": 4\n}"},"sequence_number":20} + + ' + - ' + + ' + - 'data: {"type":"response.completed","response":{"id":"gen-1793761975-FlNZ7eszgb5sH5V3O69t","object":"response","created_at":1793761975,"model":"nvidia/nemotron-3.5-lightning:free","status":"completed","completed_at":1793761976,"output":[{"id":"rs_tmp_id1ci0csjjo","type":"reasoning","status":"completed","content":[{"type":"reasoning_text","text":"We + got result 5. Now add 5 and 4."}],"summary":[],"format":"unknown"},{"id":"fc_tmp_6gspjedt008","type":"function_call","status":"completed","call_id":"call-b0e8c803-f561-4c2a-8bef-ea30c661e3c1","name":"add","arguments":"{\n \"a\": + 5,\n \"b\": 4\n}"}],"error":null,"incomplete_details":null,"access_programs":null,"tools":[{"type":"function","name":"add","description":"Add + two integers.","parameters":{"type":"object","properties":{"a":{"type":"integer"},"b":{"type":"integer"}},"required":["a","b"],"additionalProperties":false},"strict":null}],"tool_choice":{"type":"function","name":"add"},"parallel_tool_calls":false,"max_output_tokens":2048,"temperature":1,"top_p":1,"presence_penalty":0,"frequency_penalty":0,"top_logprobs":0,"max_tool_calls":null,"metadata":{},"background":false,"previous_response_id":null,"service_tier":"auto","truncation":"disabled","store":false,"instructions":null,"text":{"format":{"type":"text"}},"reasoning":{"effort":"low"},"safety_identifier":null,"prompt_cache_key":null,"prompt_cache_options":null,"usage":{"input_tokens":483,"input_tokens_details":{"cached_tokens":0},"output_tokens":32,"output_tokens_details":{"reasoning_tokens":14},"total_tokens":515,"cost":0,"is_byok":false,"cost_details":{"upstream_inference_cost":0,"upstream_inference_input_cost":0,"upstream_inference_output_cost":0}}},"sequence_number":21} + + ' + - ' + + ' + - 'data: [DONE] + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: '[DONE]' +timestamp: '2026-11-04T03:12:55.792634+00:00' +upstream_url: https://openrouter.ai/api/v1/responses diff --git a/tests/cassettes/upstream_ir/tool_use_reasoning/openrouter-responses-stream-02.yaml b/tests/cassettes/upstream_ir/tool_use_reasoning/openrouter-responses-stream-02.yaml new file mode 100644 index 0000000..a1ecd80 --- /dev/null +++ b/tests/cassettes/upstream_ir/tool_use_reasoning/openrouter-responses-stream-02.yaml @@ -0,0 +1,426 @@ +filename: 2026-11-04-01a1a48b-a0be-7993-81b5-557817530d8b +request: + body: + input: + - content: Use add to add 2 and 3. After the result, use add to add that result + and 4. Then give the final answer. + role: user + - content: + - text: 'The user wants: Use add to add 2 and 3. Then use add to add that result + and 4. Then give final answer. + + + We need to call add function twice: first add 2 and 3 => result 5. Then + add that result (5) and 4 => 9. Then answer final answer 9. + + + We need to use the functions tool. So first call functions.add with a=2, + b=3. Then call again with a= result, b=4. Then respond.' + type: reasoning_text + format: unknown + id: rs_tmp_jz24fy2z9lc + status: completed + summary: [] + type: reasoning + - arguments: "{\n \"a\": 2,\n \"b\": 3\n}" + call_id: call-d2207b2b-33a6-4c81-a9ae-92419f3fb3bf + id: fc_tmp_yqc49bd84p + name: add + status: completed + type: function_call + - call_id: call-d2207b2b-33a6-4c81-a9ae-92419f3fb3bf + output: '5' + type: function_call_output + - content: + - text: We got result 5. Now add 5 and 4. + type: reasoning_text + format: unknown + id: rs_tmp_id1ci0csjjo + status: completed + summary: [] + type: reasoning + - arguments: "{\n \"a\": 5,\n \"b\": 4\n}" + call_id: call-b0e8c803-f561-4c2a-8bef-ea30c661e3c1 + id: fc_tmp_6gspjedt008 + name: add + status: completed + type: function_call + - call_id: call-b0e8c803-f561-4c2a-8bef-ea30c661e3c1 + output: '9' + type: function_call_output + max_output_tokens: 2048 + model: nvidia/nemotron-3.5-lightning:free + parallel_tool_calls: false + provider: + allow_fallbacks: false + max_price: + completion: 0 + prompt: 0 + request: 0 + reasoning: + effort: low + store: false + stream: true + tool_choice: none + tools: + - description: Add two integers. + name: add + parameters: + additionalProperties: false + properties: + a: + type: integer + b: + type: integer + required: + - a + - b + type: object + type: function + headers: + accept: application/json + accept-encoding: gzip, deflate, br + authorization: Bearer *** + connection: keep-alive + content-length: '1888' + content-type: application/json + user-agent: AsyncOpenAI/Python 2.53.0 + method: POST + path: /api/v1/responses + query_params: {} +request_id: 01a1a48b-a0be-7993-81b5-557817530d8b +response: + error_event: false + headers: + cache-control: no-cache + connection: keep-alive + content-type: text/event-stream + sse: + - 'data: {"type":"response.created","response":{"id":"gen-1793761976-4t7frtBJSVhrYwFWz7he","object":"response","created_at":1793761976,"model":"nvidia/nemotron-3.5-lightning:free","status":"in_progress","completed_at":null,"output":[],"error":null,"incomplete_details":null,"access_programs":null,"tools":[{"type":"function","name":"add","description":"Add + two integers.","parameters":{"type":"object","properties":{"a":{"type":"integer"},"b":{"type":"integer"}},"required":["a","b"],"additionalProperties":false},"strict":null}],"tool_choice":"none","parallel_tool_calls":false,"max_output_tokens":2048,"temperature":1,"top_p":1,"presence_penalty":0,"frequency_penalty":0,"top_logprobs":0,"max_tool_calls":null,"metadata":{},"background":false,"previous_response_id":null,"service_tier":"auto","truncation":"disabled","store":false,"instructions":null,"text":{"format":{"type":"text"}},"reasoning":{"effort":"low"},"safety_identifier":null,"prompt_cache_key":null,"prompt_cache_options":null,"usage":null},"sequence_number":0} + + ' + - ' + + ' + - 'data: {"type":"response.in_progress","response":{"id":"gen-1793761976-4t7frtBJSVhrYwFWz7he","object":"response","created_at":1793761976,"model":"nvidia/nemotron-3.5-lightning:free","status":"in_progress","completed_at":null,"output":[],"error":null,"incomplete_details":null,"access_programs":null,"tools":[{"type":"function","name":"add","description":"Add + two integers.","parameters":{"type":"object","properties":{"a":{"type":"integer"},"b":{"type":"integer"}},"required":["a","b"],"additionalProperties":false},"strict":null}],"tool_choice":"none","parallel_tool_calls":false,"max_output_tokens":2048,"temperature":1,"top_p":1,"presence_penalty":0,"frequency_penalty":0,"top_logprobs":0,"max_tool_calls":null,"metadata":{},"background":false,"previous_response_id":null,"service_tier":"auto","truncation":"disabled","store":false,"instructions":null,"text":{"format":{"type":"text"}},"reasoning":{"effort":"low"},"safety_identifier":null,"prompt_cache_key":null,"prompt_cache_options":null,"usage":null},"sequence_number":1} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.added","output_index":0,"item":{"id":"rs_tmp_wr7i22tl0rb","type":"reasoning","status":"in_progress","summary":[]},"sequence_number":2} + + ' + - ' + + ' + - 'data: {"type":"response.content_part.added","output_index":0,"item_id":"rs_tmp_wr7i22tl0rb","content_index":0,"part":{"type":"reasoning_text","text":""},"sequence_number":3} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_wr7i22tl0rb","content_index":0,"delta":"Now","sequence_number":4} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_wr7i22tl0rb","content_index":0,"delta":" + final","sequence_number":5} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_wr7i22tl0rb","content_index":0,"delta":" + answer","sequence_number":6} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_wr7i22tl0rb","content_index":0,"delta":" + 9","sequence_number":7} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.delta","output_index":0,"item_id":"rs_tmp_wr7i22tl0rb","content_index":0,"delta":".","sequence_number":8} + + ' + - ' + + ' + - 'data: {"type":"response.reasoning_text.done","output_index":0,"item_id":"rs_tmp_wr7i22tl0rb","content_index":0,"text":"Now + final answer 9.","sequence_number":9} + + ' + - ' + + ' + - 'data: {"type":"response.content_part.done","output_index":0,"item_id":"rs_tmp_wr7i22tl0rb","content_index":0,"part":{"type":"reasoning_text","text":"Now + final answer 9."},"sequence_number":10} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.done","output_index":0,"item":{"id":"rs_tmp_wr7i22tl0rb","type":"reasoning","status":"completed","content":[{"type":"reasoning_text","text":"Now + final answer 9."}],"summary":[],"format":"unknown"},"sequence_number":11} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.added","output_index":1,"item":{"id":"msg_tmp_7wwbo2awzu","type":"message","status":"in_progress","role":"assistant","content":[]},"sequence_number":12} + + ' + - ' + + ' + - 'data: {"type":"response.content_part.added","output_index":1,"item_id":"msg_tmp_7wwbo2awzu","content_index":0,"part":{"type":"output_text","text":"","annotations":[],"logprobs":[]},"sequence_number":13} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","output_index":1,"item_id":"msg_tmp_7wwbo2awzu","content_index":0,"delta":"The","logprobs":[],"sequence_number":14} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","output_index":1,"item_id":"msg_tmp_7wwbo2awzu","content_index":0,"delta":" + final","logprobs":[],"sequence_number":15} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","output_index":1,"item_id":"msg_tmp_7wwbo2awzu","content_index":0,"delta":" + result","logprobs":[],"sequence_number":16} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","output_index":1,"item_id":"msg_tmp_7wwbo2awzu","content_index":0,"delta":" + after","logprobs":[],"sequence_number":17} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","output_index":1,"item_id":"msg_tmp_7wwbo2awzu","content_index":0,"delta":" + adding","logprobs":[],"sequence_number":18} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","output_index":1,"item_id":"msg_tmp_7wwbo2awzu","content_index":0,"delta":" + ","logprobs":[],"sequence_number":19} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","output_index":1,"item_id":"msg_tmp_7wwbo2awzu","content_index":0,"delta":"2","logprobs":[],"sequence_number":20} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","output_index":1,"item_id":"msg_tmp_7wwbo2awzu","content_index":0,"delta":" ","logprobs":[],"sequence_number":21} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","output_index":1,"item_id":"msg_tmp_7wwbo2awzu","content_index":0,"delta":"+","logprobs":[],"sequence_number":22} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","output_index":1,"item_id":"msg_tmp_7wwbo2awzu","content_index":0,"delta":" ","logprobs":[],"sequence_number":23} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","output_index":1,"item_id":"msg_tmp_7wwbo2awzu","content_index":0,"delta":"3","logprobs":[],"sequence_number":24} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","output_index":1,"item_id":"msg_tmp_7wwbo2awzu","content_index":0,"delta":" ","logprobs":[],"sequence_number":25} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","output_index":1,"item_id":"msg_tmp_7wwbo2awzu","content_index":0,"delta":"=","logprobs":[],"sequence_number":26} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","output_index":1,"item_id":"msg_tmp_7wwbo2awzu","content_index":0,"delta":" ","logprobs":[],"sequence_number":27} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","output_index":1,"item_id":"msg_tmp_7wwbo2awzu","content_index":0,"delta":"5","logprobs":[],"sequence_number":28} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","output_index":1,"item_id":"msg_tmp_7wwbo2awzu","content_index":0,"delta":",","logprobs":[],"sequence_number":29} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","output_index":1,"item_id":"msg_tmp_7wwbo2awzu","content_index":0,"delta":" + then","logprobs":[],"sequence_number":30} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","output_index":1,"item_id":"msg_tmp_7wwbo2awzu","content_index":0,"delta":" + ","logprobs":[],"sequence_number":31} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","output_index":1,"item_id":"msg_tmp_7wwbo2awzu","content_index":0,"delta":"5","logprobs":[],"sequence_number":32} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","output_index":1,"item_id":"msg_tmp_7wwbo2awzu","content_index":0,"delta":" ","logprobs":[],"sequence_number":33} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","output_index":1,"item_id":"msg_tmp_7wwbo2awzu","content_index":0,"delta":"+","logprobs":[],"sequence_number":34} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","output_index":1,"item_id":"msg_tmp_7wwbo2awzu","content_index":0,"delta":" ","logprobs":[],"sequence_number":35} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","output_index":1,"item_id":"msg_tmp_7wwbo2awzu","content_index":0,"delta":"4","logprobs":[],"sequence_number":36} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","output_index":1,"item_id":"msg_tmp_7wwbo2awzu","content_index":0,"delta":" ","logprobs":[],"sequence_number":37} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","output_index":1,"item_id":"msg_tmp_7wwbo2awzu","content_index":0,"delta":"=","logprobs":[],"sequence_number":38} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","output_index":1,"item_id":"msg_tmp_7wwbo2awzu","content_index":0,"delta":" ","logprobs":[],"sequence_number":39} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","output_index":1,"item_id":"msg_tmp_7wwbo2awzu","content_index":0,"delta":"9","logprobs":[],"sequence_number":40} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","output_index":1,"item_id":"msg_tmp_7wwbo2awzu","content_index":0,"delta":" + is","logprobs":[],"sequence_number":41} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","output_index":1,"item_id":"msg_tmp_7wwbo2awzu","content_index":0,"delta":" + **","logprobs":[],"sequence_number":42} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","output_index":1,"item_id":"msg_tmp_7wwbo2awzu","content_index":0,"delta":"9","logprobs":[],"sequence_number":43} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.delta","output_index":1,"item_id":"msg_tmp_7wwbo2awzu","content_index":0,"delta":"**.","logprobs":[],"sequence_number":44} + + ' + - ' + + ' + - 'data: {"type":"response.output_text.done","output_index":1,"item_id":"msg_tmp_7wwbo2awzu","content_index":0,"text":"The + final result after adding 2 + 3 = 5, then 5 + 4 = 9 is **9**.","logprobs":[],"sequence_number":45} + + ' + - ' + + ' + - 'data: {"type":"response.content_part.done","output_index":1,"item_id":"msg_tmp_7wwbo2awzu","content_index":0,"part":{"type":"output_text","text":"The + final result after adding 2 + 3 = 5, then 5 + 4 = 9 is **9**.","annotations":[],"logprobs":[]},"sequence_number":46} + + ' + - ' + + ' + - 'data: {"type":"response.output_item.done","output_index":1,"item":{"id":"msg_tmp_7wwbo2awzu","type":"message","status":"completed","role":"assistant","content":[{"type":"output_text","text":"The + final result after adding 2 + 3 = 5, then 5 + 4 = 9 is **9**.","annotations":[],"logprobs":[]}]},"sequence_number":47} + + ' + - ' + + ' + - 'data: {"type":"response.completed","response":{"id":"gen-1793761976-4t7frtBJSVhrYwFWz7he","object":"response","created_at":1793761976,"model":"nvidia/nemotron-3.5-lightning:free","status":"completed","completed_at":1793761977,"output":[{"id":"rs_tmp_wr7i22tl0rb","type":"reasoning","status":"completed","content":[{"type":"reasoning_text","text":"Now + final answer 9."}],"summary":[],"format":"unknown"},{"id":"msg_tmp_7wwbo2awzu","type":"message","role":"assistant","status":"completed","content":[{"type":"output_text","text":"The + final result after adding 2 + 3 = 5, then 5 + 4 = 9 is **9**.","annotations":[],"logprobs":[]}]}],"error":null,"incomplete_details":null,"access_programs":null,"tools":[{"type":"function","name":"add","description":"Add + two integers.","parameters":{"type":"object","properties":{"a":{"type":"integer"},"b":{"type":"integer"}},"required":["a","b"],"additionalProperties":false},"strict":null}],"tool_choice":"none","parallel_tool_calls":false,"max_output_tokens":2048,"temperature":1,"top_p":1,"presence_penalty":0,"frequency_penalty":0,"top_logprobs":0,"max_tool_calls":null,"metadata":{},"background":false,"previous_response_id":null,"service_tier":"auto","truncation":"disabled","store":false,"instructions":null,"text":{"format":{"type":"text"}},"reasoning":{"effort":"low"},"safety_identifier":null,"prompt_cache_key":null,"prompt_cache_options":null,"usage":{"input_tokens":270,"input_tokens_details":{"cached_tokens":0},"output_tokens":39,"output_tokens_details":{"reasoning_tokens":6},"total_tokens":309,"cost":0,"is_byok":false,"cost_details":{"upstream_inference_cost":0,"upstream_inference_input_cost":0,"upstream_inference_output_cost":0}}},"sequence_number":48} + + ' + - ' + + ' + - 'data: [DONE] + + ' + - ' + + ' + status_code: 200 + stream_status: complete + terminal_event: '[DONE]' +timestamp: '2026-11-04T03:12:56.510408+00:00' +upstream_url: https://openrouter.ai/api/v1/responses diff --git a/tests/core/test_anthropic_web_search.py b/tests/core/test_anthropic_web_search.py index 497cb95..061d66e 100644 --- a/tests/core/test_anthropic_web_search.py +++ b/tests/core/test_anthropic_web_search.py @@ -376,9 +376,9 @@ async def test_recorded_search_history_preserves_provider_state(stream: bool): ("endpoint", "provider"), [ ("responses", None), - ("responses", "anthropic"), + ("responses", "vllm"), ("chat/completions", None), - ("messages", "openai"), + ("chat/completions", "vllm"), ("messages", "vllm"), ], ) diff --git a/tests/core/test_interface.py b/tests/core/test_interface.py index 9c4582b..67334ca 100644 --- a/tests/core/test_interface.py +++ b/tests/core/test_interface.py @@ -1195,7 +1195,7 @@ async def test_reasoning_only_history( upstream, additions[downstream], additions[upstream], - provider="openai" if signed else "vllm", + provider=DEFAULT_PROVIDER_BY_ENDPOINT[upstream] if signed else "vllm", ) diff --git a/tests/core/test_provider_history_routes.py b/tests/core/test_provider_history_routes.py new file mode 100644 index 0000000..5a3bdae --- /dev/null +++ b/tests/core/test_provider_history_routes.py @@ -0,0 +1,550 @@ +"""Native history transport tests using explicit synthetic Google extension payloads.""" + +from copy import deepcopy + +import httpx +import pytest +from openai import AsyncOpenAI +from openai.lib.streaming.chat import ChatCompletionStreamState + +from molto import Molto +from molto.utils.io import dumps_sse, json_loads +from tests.core.test_web_search import _collect + + +def _history(message): + """Remove only SDK parser and stream bookkeeping from actual collected output.""" + history = message.model_dump( + exclude_unset=True, + exclude={ + "parsed": True, + "tool_calls": {"__all__": {"index": True, "function": {"parsed_arguments": True}}}, + }, + ) + for field in ("annotations", "audio", "function_call", "refusal"): + if history.get(field) is None: + history.pop(field, None) + return history + + +async def _consume(result, stream): + if not stream: + return result.choices[0].message, [result.model_dump()] + state = ChatCompletionStreamState() + events = [] + async for event in result: + events.append(event.model_dump()) + state.handle_chunk(event) + return state.get_final_completion().choices[0].message, events + + +@pytest.mark.parametrize("stream", [False, True]) +async def test_google_native_sdk_history_round_trip(stream): + """Ensures all Google attachments survive native SDK parity and exact next-turn transport.""" + + def google(state): + return {"google": {"thought_signature": state}} + + calls = [ + { + "id": f"call_{i}", + "type": "function", + "function": {"name": "lookup", "arguments": f'{{"n":{i}}}'}, + "extra_content": google(f"call-{i}"), + } + for i in range(2) + ] + assistant = { + "role": "assistant", + "content": None, + "tool_calls": calls, + "extra_content": google(" message\n"), + } + chunks = [] + for i, call in enumerate(calls): + first = deepcopy(call) + first["index"] = i + first["function"]["arguments"] = '{"n":' + delta = {"tool_calls": [first]} + if i == 0: + delta.update(role="assistant", content=None, extra_content=assistant["extra_content"]) + chunks.append(delta) + chunks.append({"tool_calls": [{"index": i, "function": {"arguments": f"{i}}}"}}]}) + chunk_base = { + "id": "chatcmpl_1", + "created": 1, + "model": "model", + "object": "chat.completion.chunk", + } + sse = "".join( + dumps_sse({**chunk_base, "choices": [{"index": 0, "delta": delta, "finish_reason": None}]}) + for delta in chunks + ) + sse += dumps_sse( + {**chunk_base, "choices": [{"index": 0, "delta": {}, "finish_reason": "tool_calls"}]} + ) + sse += "data: [DONE]\n\n" + response = { + "id": "chatcmpl_1", + "created": 1, + "model": "model", + "object": "chat.completion", + "choices": [{"index": 0, "message": assistant, "finish_reason": "tool_calls"}], + } + user = { + "role": "user", + "content": [ + {"type": "text", "text": "First", "extra_content": google("part-1")}, + {"type": "text", "text": "Second", "extra_content": google("part-2")}, + ], + "extra_content": google("user"), + } + results = [ + { + "role": "tool", + "tool_call_id": call["id"], + "content": f"file-{i}", + "extra_content": { + "google": { + "parts": [ + { + "file_data": { + "mime_type": "application/pdf", + "display_name": f"file-{i}", + "file_uri": f"gs://example/file-{i}.pdf", + } + } + ] + } + }, + } + for i, call in enumerate(calls) + ] + extra_body = { + "ordinary_extra": True, + "extra_body": {"google": {"thinking_config": {"include_thoughts": True}}}, + } + requests = [] + + def handler(request): + requests.append(json_loads(request.content)) + assert str(request.url) == "https://example.test/v1/chat/completions" + assert request.headers["authorization"] == "Bearer test-key" + if stream: + return httpx.Response(200, text=sse, headers={"content-type": "text/event-stream"}) + return httpx.Response(200, json=response) + + async with httpx.AsyncClient(transport=httpx.MockTransport(handler)) as sdk_http: + sdk = AsyncOpenAI( + api_key="test-key", + base_url="https://example.test/v1", + http_client=sdk_http, + max_retries=0, + ) + sdk_message, sdk_events = await _consume( + await sdk.chat.completions.create( + model="model", messages=[user], stream=stream, extra_body=extra_body + ), + stream, + ) + assert _history(sdk_message) == assistant + async with Molto( + http_client=httpx.AsyncClient(transport=httpx.MockTransport(handler)) + ) as molto: + actual_message, actual_events = await _consume( + await molto.chat_completions( + {"model": "model", "messages": [user], "stream": stream}, + api_key="test-key", + base_url="https://example.test/v1", + extra_body=extra_body, + ), + stream, + ) + assert actual_events == sdk_events + assert _history(actual_message) == assistant + await _consume( + await molto.chat_completions( + { + "model": "model", + "messages": [user, _history(actual_message), *results], + "stream": stream, + }, + api_key="test-key", + base_url="https://example.test/v1", + extra_body=extra_body, + ), + stream, + ) + expected = {"model": "model", "messages": [user], "stream": stream, **extra_body} + assert requests[:2] == [expected, expected] + assert requests[2] == {**expected, "messages": [user, assistant, *results]} + + +@pytest.mark.parametrize("turn", [1, 2]) +async def test_recorded_native_tool_history_matches_sdk(turn): + """Ensures eagerly validated call history retains recorded request bytes and SDK events.""" + from pathlib import Path + + from molto.utils.io import read_yaml + + cassette = read_yaml( + Path(__file__).parents[1] + / "cassettes" + / "upstream_ir" + / "tool_use" + / f"openai-chat_completions-stream-{turn:02d}.yaml" + ) + body = cassette["request"]["body"] + requests = [] + + def handler(request): + requests.append(json_loads(request.content)) + assert request.url.path == cassette["request"]["path"] + return httpx.Response( + cassette["response"]["status_code"], + text="".join(cassette["response"]["sse"]), + headers={"content-type": "text/event-stream"}, + ) + + async with httpx.AsyncClient(transport=httpx.MockTransport(handler)) as sdk_http: + sdk = AsyncOpenAI(api_key="test-key", http_client=sdk_http, max_retries=0) + expected_message, expected_events = await _consume( + await sdk.chat.completions.create(**body), True + ) + async with Molto( + http_client=httpx.AsyncClient(transport=httpx.MockTransport(handler)) + ) as molto: + actual_message, actual_events = await _consume( + await molto.chat_completions(body, api_key="test-key"), True + ) + assert requests == [body, body] + assert actual_events == expected_events + assert _history(actual_message) == _history(expected_message) + + +@pytest.mark.parametrize("stream", [False, True]) +async def test_openrouter_native_reasoning_format_history(stream): + """Ensures native Responses output carries exact format into the following SDK request.""" + item = { + "id": "rs_1", + "type": "reasoning", + "summary": [], + "content": [{"type": "reasoning_text", "text": " Think\n"}], + "status": "completed", + "format": "unknown", + } + response = { + "id": "resp_1", + "object": "response", + "created_at": 1, + "model": "model", + "status": "completed", + "output": [item], + } + event = {"type": "response.completed", "sequence_number": 0, "response": response} + requests = [] + + def handler(request): + requests.append(json_loads(request.content)) + if stream: + return httpx.Response( + 200, text=dumps_sse(event), headers={"content-type": "text/event-stream"} + ) + return httpx.Response(200, json=response) + + async def collect(result): + if stream: + events = [event async for event in result] + return events[-1].response, [event.model_dump() for event in events] + return result, [result.model_dump()] + + body = {"model": "model", "input": "Think", "stream": stream} + async with httpx.AsyncClient(transport=httpx.MockTransport(handler)) as sdk_http: + sdk = AsyncOpenAI(api_key="test-key", http_client=sdk_http, max_retries=0) + expected, expected_events = await collect(await sdk.responses.create(**body)) + async with Molto( + http_client=httpx.AsyncClient(transport=httpx.MockTransport(handler)) + ) as molto: + actual, actual_events = await collect(await molto.responses(body, api_key="test-key")) + assert actual_events == expected_events + history = [item.model_dump(exclude_unset=True) for item in actual.output] + assert history == [item] + await collect(await molto.responses({**body, "input": history}, api_key="test-key")) + assert requests == [body, body, {**body, "input": [item]}] + + +@pytest.mark.parametrize("endpoint", ["chat/completions", "messages"]) +@pytest.mark.parametrize("stream", [False, True]) +async def test_reasoning_format_cannot_be_silently_translated(endpoint, stream): + """Ensures opaque provider reasoning format is rejected before translated transport.""" + from molto.types.exceptions import UnsupportedInput + + def handler(request): + raise AssertionError("Unsupported history must fail before transport") + + async with Molto( + http_client=httpx.AsyncClient(transport=httpx.MockTransport(handler)) + ) as molto: + with pytest.raises(UnsupportedInput, match="format"): + await molto.responses( + { + "model": "model", + "stream": stream, + "input": [ + { + "type": "reasoning", + "summary": [], + "content": [{"type": "reasoning_text", "text": "Think"}], + "format": "unknown", + } + ], + }, + endpoint=endpoint, + provider="vllm", + api_key="test-key", + ) + + +@pytest.mark.parametrize("coordinator", ["chat_completions", "messages"]) +@pytest.mark.parametrize("stream", [False, True]) +async def test_reasoning_format_output_rejects_unsupported_translation(coordinator, stream): + """Ensures source reasoning format cannot disappear when projecting provider output.""" + event = { + "type": "response.output_item.added", + "sequence_number": 0, + "output_index": 0, + "item": { + "id": "rs_1", + "type": "reasoning", + "summary": [], + "content": [{"type": "reasoning_text", "text": "Think"}], + "format": "unknown", + }, + } + created = { + "type": "response.created", + "sequence_number": 0, + "response": { + "id": "resp_1", + "created_at": 1, + "model": "model", + "status": "in_progress", + "output": [], + }, + } + + def handler(request): + return httpx.Response( + 200, + text=dumps_sse(created) + dumps_sse(event), + headers={"content-type": "text/event-stream"}, + ) + + body = {"model": "model", "messages": [{"role": "user", "content": "Think"}], "stream": stream} + if coordinator == "messages": + body["max_tokens"] = 32 + async with Molto( + http_client=httpx.AsyncClient(transport=httpx.MockTransport(handler)) + ) as molto: + with pytest.raises(ValueError, match="format"): + result = await getattr(molto, coordinator)( + body, endpoint="responses", provider="vllm", api_key="test-key" + ) + if stream: + [event async for event in result] + + +def _google_stream(deltas): + """Build synthetic Google chunks, retaining late attachment snapshots.""" + chunk = { + "id": "chatcmpl_google", + "created": 1, + "model": "model", + "object": "chat.completion.chunk", + } + sse = "".join( + dumps_sse({**chunk, "choices": [{"index": 0, "delta": delta}]}) for delta in deltas + ) + sse += dumps_sse( + { + **chunk, + "choices": [{"index": 0, "delta": {}, "finish_reason": "stop"}], + "usage": {"prompt_tokens": 1, "completion_tokens": 2, "total_tokens": 3}, + } + ) + return httpx.Response( + 200, + stream=httpx.ByteStream((sse + "data: [DONE]\n\n").encode()), + headers={"content-type": "text/event-stream"}, + ) + + +@pytest.mark.parametrize("coordinator", ["responses", "messages"]) +@pytest.mark.parametrize("stream", [False, True]) +async def test_google_translated_parallel_signature_history(coordinator, stream): + """Ensures late signature snapshots retain exact text and parallel-call associations.""" + text_state = {"google": {"thought_signature": " message\n"}} + calls = [ + { + "id": f"call_{i}", + "type": "function", + "function": {"name": "lookup", "arguments": f'{{"n":{i}}}'}, + "extra_content": {"google": {"thought_signature": f"call-{i}"}}, + } + for i in range(2) + ] + deltas = [{"content": "Checking both."}, {"extra_content": text_state}] + for i, call in enumerate(calls): + first = deepcopy(call) + first["index"] = i + first["function"]["arguments"] = '{"n":' + first["extra_content"]["google"]["thought_signature"] = f"earlier-{i}" + deltas.extend( + [ + {"tool_calls": [first]}, + {"tool_calls": [{"index": i, "function": {"arguments": f"{i}}}"}}]}, + {"tool_calls": [{"index": i, "extra_content": call["extra_content"]}]}, + ] + ) + requests = [] + + def handler(request): + requests.append(json_loads(request.content)) + return _google_stream(deltas) + + body = {"model": "model", "stream": stream} + if coordinator == "responses": + body["input"] = [{"role": "user", "content": "Check both."}] + else: + body.update(messages=[{"role": "user", "content": "Check both."}], max_tokens=32) + + async def collect(result): + if not stream: + return result + async with result: + return _collect(coordinator, [event async for event in result]) + + async with Molto( + http_client=httpx.AsyncClient(transport=httpx.MockTransport(handler)) + ) as molto: + create = getattr(molto, coordinator) + result = await collect( + await create(body, endpoint="chat/completions", provider="gemini", api_key="test-key") + ) + if coordinator == "responses": + assert [item.type for item in result.output] == [ + "message", + "reasoning", + "function_call", + "reasoning", + "function_call", + "reasoning", + ] + assert [ + item.encrypted_content for item in result.output if item.type == "reasoning" + ] == [" message\n", "call-0", "call-1"] + history = [item.model_dump(exclude_unset=True) for item in result.output] + body["input"].extend(history) + body["input"].extend( + {"type": "function_call_output", "call_id": call["id"], "output": "ok"} + for call in calls + ) + else: + assert [item.type for item in result.content] == [ + "text", + "thinking", + "tool_use", + "thinking", + "tool_use", + "thinking", + ] + assert [item.signature for item in result.content if item.type == "thinking"] == [ + " message\n", + "call-0", + "call-1", + ] + body["messages"].extend( + [ + { + "role": "assistant", + "content": [item.model_dump() for item in result.content], + }, + { + "role": "user", + "content": [ + {"type": "tool_result", "tool_use_id": call["id"], "content": "ok"} + for call in calls + ], + }, + ] + ) + await collect( + await create(body, endpoint="chat/completions", provider="gemini", api_key="test-key") + ) + assert len(requests) == 2 + assert requests[1]["messages"] == [ + {"role": "user", "content": [{"type": "text", "text": "Check both."}]}, + { + "role": "assistant", + "content": "Checking both.", + "extra_content": text_state, + "tool_calls": calls, + }, + *[ + { + "role": "tool", + "tool_call_id": call["id"], + "content": [{"type": "text", "text": "ok"}], + } + for call in calls + ], + ] + + +@pytest.mark.parametrize( + "extra_content", + [ + {"google": {"thought_signature": ""}}, + {"google": {"thought_signature": None}}, + {"google": {"thought_signature": 7}}, + {"google": {"thought_signature": "state", "unknown": True}}, + {"google": "invalid"}, + "invalid", + ], +) +@pytest.mark.parametrize("placement", ["message", "call"]) +async def test_google_malformed_signature_closes_stream(extra_content, placement): + """Ensures malformed Google state fails explicitly and releases the upstream response.""" + delta = {"content": "Text"} + if placement == "message": + delta["extra_content"] = extra_content + else: + delta["tool_calls"] = [ + { + "index": 0, + "id": "call_1", + "type": "function", + "function": {"name": "lookup", "arguments": "{}"}, + "extra_content": extra_content, + } + ] + responses = [] + + def handler(request): + response = _google_stream([delta]) + responses.append(response) + return response + + async with Molto( + http_client=httpx.AsyncClient(transport=httpx.MockTransport(handler)) + ) as molto: + with pytest.raises(ValueError, match="extra_content"): + result = await molto.responses( + {"model": "model", "input": "Hello", "stream": True}, + endpoint="chat/completions", + provider="gemini", + api_key="test-key", + ) + async with result: + [event async for event in result] + assert len(responses) == 1 and responses[0].is_closed diff --git a/tests/core/test_web_search.py b/tests/core/test_web_search.py index b94994c..ca29eb0 100644 --- a/tests/core/test_web_search.py +++ b/tests/core/test_web_search.py @@ -1005,7 +1005,7 @@ def _history(protocol: Protocol, search: bool) -> list[dict[str, Any]]: async def test_fixed_route_followup_history( downstream: Protocol, upstream: Protocol, stream: bool, search: bool ): - """Ensures native and compatible-provider followups preserve reduced history and placeholders.""" + """Ensures followups preserve history or reject missing Anthropic continuation state.""" body, expected = _request_pair(downstream, upstream, stream) body_key = "input" if downstream == "responses" else "messages" expected_key = "input" if upstream == "responses" else "messages" @@ -1019,12 +1019,20 @@ async def test_fixed_route_followup_history( ] body[body_key].extend(_history(downstream, search)) expected[expected_key].extend(_history(upstream, search)) + requests = [] async with _get_http_client( [_path(upstream, stream if downstream == upstream else True)], upstream, expected_body=expected, + requests=requests, ) as http_client: - if downstream == "chat/completions": + if downstream == "responses" and upstream == "messages" and search: + with pytest.raises(UnsupportedInput, match="original encrypted_content"): + await Molto(http_client=http_client).responses( + body=body, endpoint=upstream, api_key="test-api-key" + ) + assert requests == [] + elif downstream == "chat/completions": with pytest.raises( ValueError, match="Chat Completions cannot preserve reasoning signatures" ): @@ -1040,9 +1048,6 @@ async def test_fixed_route_followup_history( body=body, endpoint=upstream, api_key="test-api-key", - provider="openai" - if downstream == "responses" and upstream == "messages" and search - else None, ) if stream: _ = [event async for event in result] @@ -1557,7 +1562,7 @@ async def test_synthetic_pause_has_no_invented_result(stream: bool, downstream: async def test_synthetic_citation_boundaries_match_sdk_and_history( stream: bool, timing: str, text, ranges, expected_text, associations ): - """Ensures SDK attribution and exact text survive output and compatible-provider history projection.""" + """Ensures citation boundaries survive output and history with required Anthropic state.""" citations = [ { "type": "url_citation", @@ -1646,9 +1651,29 @@ async def test_synthetic_citation_boundaries_match_sdk_and_history( expected_body=expected_request, requests=requests, ) as http_client: - followup = await Molto(http_client=http_client).responses( - body=body, endpoint="messages", provider="openai", api_key="test-api-key" - ) + molto = Molto(http_client=http_client) + with pytest.raises(UnsupportedInput, match="original encrypted_index"): + await molto.responses(body=body, endpoint="messages", api_key="test-api-key") + assert requests == [] + # Synthetic opaque state exercises history projection, not provider acceptance. + for index, citation in enumerate(history["content"][0]["annotations"]): + projected = next( + item + for block in expected_request["messages"][-2]["content"] + for item in block.get("citations", []) + if item["url"] == citation["url"] + ) + citation["extra_content"] = { + "anthropic": { + "encrypted_index": f"synthetic-index-{index}", + "cited_text": projected["cited_text"], + } + } + for block in expected_request["messages"][-2]["content"]: + for item in block.get("citations", []): + if item["url"] == citation["url"]: + item["encrypted_index"] = f"synthetic-index-{index}" + followup = await molto.responses(body=body, endpoint="messages", api_key="test-api-key") if stream: _ = [event async for event in followup] assert len(requests) == 1 @@ -2072,7 +2097,7 @@ async def test_synthetic_multiple_responses_text_parts_have_local_offsets( async def test_search_history_reaches_sdk_error_boundary( downstream: Protocol, upstream: Protocol, stream: bool ): - """Ensures native and compatible-provider reduced history retains recorded SDK error parity.""" + """Ensures representable search history reaches the recorded SDK error boundary.""" body, expected = _request_pair(downstream, upstream, stream) for request, protocol in ((body, downstream), (expected, upstream)): key = "input" if protocol == "responses" else "messages" @@ -2081,6 +2106,22 @@ async def test_search_history_reaches_sdk_error_boundary( {"role": "user", "content": [{"type": "input_text", "text": request[key]}]} ] request[key].extend(_history(protocol, True)) + if downstream == "responses" and upstream == "messages": + # These synthetic values satisfy local continuation requirements; the + # recorded invalid-request response remains the SDK error reference. + body["input"][-3]["action"]["sources"][0]["extra_content"] = { + "anthropic": {"encrypted_content": "synthetic-content"} + } + citation = body["input"][-2]["content"][0]["annotations"][0] + citation["extra_content"] = { + "anthropic": { + "encrypted_index": "synthetic-index", + "cited_text": body["input"][-2]["content"][0]["text"], + } + } + blocks = expected["messages"][-2]["content"] + blocks[1]["content"][0]["encrypted_content"] = "synthetic-content" + blocks[2]["citations"][0]["encrypted_index"] = "synthetic-index" error_path = _matched_cassette_path("error-invalid_request_error", upstream, "stream-00.yaml") error_type = AnthropicBadRequestError if upstream == "messages" else OpenAIBadRequestError async with _get_http_client([error_path], upstream, expected_body=expected) as http_client: @@ -2101,9 +2142,6 @@ async def test_search_history_reaches_sdk_error_boundary( body=body, endpoint=upstream, api_key="test-api-key", - provider="openai" - if downstream == "responses" and upstream == "messages" - else None, ) if stream: _ = [event async for event in result] diff --git a/tests/test_hosted_providers.py b/tests/test_hosted_providers.py new file mode 100644 index 0000000..6063301 --- /dev/null +++ b/tests/test_hosted_providers.py @@ -0,0 +1,488 @@ +"""Offline destination/authentication probes; these do not certify hosted models.""" + +from copy import deepcopy +from pathlib import Path + +import httpx +import pytest +from openai import AsyncOpenAI, OpenAIError +from openai.lib.streaming.chat import ChatCompletionStreamState +from pydantic import SecretStr + +from molto import Molto +from molto.configs import ENV_CONFIG, EnvConfig +from molto.providers import PROVIDER_CAPABILITIES, PROVIDER_KEY_NAMES +from molto.upstream.registry import CLIENTS +from molto.utils.io import dumps_sse, json_loads, read_yaml + +DESTINATIONS = [ + ("fireworks", "responses", "https://api.fireworks.ai/inference/v1", "/responses"), + ("openrouter", "responses", "https://openrouter.ai/api/v1", "/responses"), + ("togetherai", "responses", "https://api.together.ai/v1", "/responses"), + ( + "fireworks", + "chat/completions", + "https://api.fireworks.ai/inference/v1", + "/chat/completions", + ), + ("togetherai", "chat/completions", "https://api.together.ai/v1", "/chat/completions"), + ( + "bedrock", + "chat/completions", + "https://bedrock-runtime.ap-southeast-1.amazonaws.com/openai/v1", + "/chat/completions", + ), + ( + "gemini", + "chat/completions", + "https://generativelanguage.googleapis.com/v1beta/openai", + "/chat/completions", + ), + ( + "bedrock", + "responses", + "https://bedrock-runtime.ap-southeast-1.amazonaws.com/openai/v1", + "/responses", + ), +] + + +@pytest.mark.parametrize("source", ["environment", "dotenv"]) +@pytest.mark.parametrize( + "names", + [ + ["AWS_BEARER_TOKEN_BEDROCK"], + ["BEDROCK_API_KEY"], + ["AWS_BEARER_TOKEN_BEDROCK", "BEDROCK_API_KEY"], + ], +) +def test_bedrock_credential_alias_preserves_secret_and_name_precedence( + source, names, monkeypatch, tmp_path +): + """Ensures both names load one secret field, preferring the AWS name within each source.""" + for name in ("AWS_BEARER_TOKEN_BEDROCK", "BEDROCK_API_KEY"): + monkeypatch.delenv(name, raising=False) + values = {name: f"synthetic-{index}" for index, name in enumerate(names)} + env_file = None + if source == "environment": + for name, value in values.items(): + monkeypatch.setenv(name, value) + else: + env_file = tmp_path / ".env" + env_file.write_text("\n".join(f"{name}={value}" for name, value in values.items())) + config = EnvConfig(_env_file=env_file) + credential = config.aws_bearer_token_bedrock + assert isinstance(credential, SecretStr) + assert credential.get_secret_value() == "synthetic-0" + assert str(credential) == "**********" + assert config.model_dump()["aws_bearer_token_bedrock"] is credential + + +@pytest.mark.parametrize("field", ["aws_bearer_token_bedrock", "BEDROCK_API_KEY"]) +def test_bedrock_constructor_credential_overrides_environment(field, monkeypatch): + """Ensures explicit settings construction keeps precedence over either environment name.""" + monkeypatch.setenv("AWS_BEARER_TOKEN_BEDROCK", "synthetic-aws") + monkeypatch.setenv("BEDROCK_API_KEY", "synthetic-alias") + config = EnvConfig(_env_file=None, **{field: "synthetic-explicit"}) + assert config.aws_bearer_token_bedrock.get_secret_value() == "synthetic-explicit" + + +@pytest.mark.parametrize( + ("environment_name", "dotenv_name", "expected"), + [ + ("AWS_BEARER_TOKEN_BEDROCK", "AWS_BEARER_TOKEN_BEDROCK", "synthetic-environment"), + ("BEDROCK_API_KEY", "BEDROCK_API_KEY", "synthetic-environment"), + ("AWS_BEARER_TOKEN_BEDROCK", "BEDROCK_API_KEY", "synthetic-environment"), + ("BEDROCK_API_KEY", "AWS_BEARER_TOKEN_BEDROCK", "synthetic-file"), + ], +) +def test_bedrock_alias_and_source_precedence( + environment_name, dotenv_name, expected, monkeypatch, tmp_path +): + """Ensures the AWS name takes priority while same-name environment values override dotenv.""" + for name in ("AWS_BEARER_TOKEN_BEDROCK", "BEDROCK_API_KEY"): + monkeypatch.delenv(name, raising=False) + monkeypatch.setenv(environment_name, "synthetic-environment") + env_file = tmp_path / ".env" + env_file.write_text(f"{dotenv_name}=synthetic-file\n") + config = EnvConfig(_env_file=env_file) + assert config.aws_bearer_token_bedrock.get_secret_value() == expected + + +def cassette(protocol, stream): + mode = "stream" if stream else "non_stream" + path = Path(__file__).parent / "cassettes/matched/simple_text" + return read_yaml(path / f"openai-{protocol.replace('/', '_')}-{mode}-00.yaml") + + +def response(recording): + recorded = recording["response"] + if "sse" in recorded: + return httpx.Response( + 200, content="".join(recorded["sse"]), headers={"content-type": "text/event-stream"} + ) + return httpx.Response(200, json=recorded["body"]) + + +@pytest.mark.parametrize(("provider", "endpoint", "base", "path"), DESTINATIONS) +@pytest.mark.parametrize("stream", [False, True]) +@pytest.mark.parametrize("override", [False, True]) +async def test_hosted_native_destination_auth_and_sdk_parity( + provider, endpoint, base, path, stream, override, monkeypatch +): + """Ensures configured keys/default URLs and explicit overrides retain native SDK fidelity.""" + monkeypatch.setattr( + ENV_CONFIG, PROVIDER_KEY_NAMES[provider].lower(), SecretStr("configured-key") + ) + monkeypatch.setenv("OPENAI_API_KEY", "unrelated") + monkeypatch.setenv("OPENAI_ORG_ID", "unrelated") + monkeypatch.setenv("OPENAI_PROJECT_ID", "unrelated") + base = "https://custom.example/prefix" if override else base + key = "override-key" if override else "configured-key" + recording = cassette(endpoint, stream) + body = deepcopy(recording["request"]["body"]) + body["stream"] = stream + requests = [] + + def handler(request): + requests.append(request) + assert str(request.url) == base + path + assert request.method == "POST" + assert json_loads(request.content) == body + assert request.headers["authorization"] == f"Bearer {key}" + assert "x-api-key" not in request.headers + assert "openai-organization" not in request.headers + assert "openai-project" not in request.headers + return response(recording) + + async with httpx.AsyncClient(transport=httpx.MockTransport(handler)) as transport: + async with Molto(http_client=transport) as molto: + actual = await getattr(molto, endpoint.replace("/", "_"))( + body, + endpoint=endpoint, + provider=provider, + base_url=base if override or provider == "bedrock" else None, + api_key=key if override else None, + extra_headers={"Authorization": "inbound", "x-api-key": "inbound"}, + ) + if stream: + actual = [event.model_dump() async for event in actual] + else: + actual = actual.model_dump() + async with httpx.AsyncClient( + transport=httpx.MockTransport(lambda _: response(recording)) + ) as transport: + sdk = AsyncOpenAI(api_key="sdk-key", http_client=transport) + expected = await ( + sdk.responses.create if endpoint == "responses" else sdk.chat.completions.create + )(**body) + if stream: + async with expected: + expected = [event.model_dump() async for event in expected] + else: + expected = expected.model_dump() + assert actual == expected + assert len(requests) == 1 + + +@pytest.mark.parametrize(("provider", "endpoint", "base", "path"), DESTINATIONS) +@pytest.mark.parametrize("downstream", ["responses", "chat_completions", "messages"]) +@pytest.mark.parametrize("stream", [False, True]) +async def test_missing_provider_credentials_never_use_other_accounts( + provider, endpoint, base, path, downstream, stream, monkeypatch +): + """Ensures unrelated environment keys cannot authorize any hosted route or result mode.""" + monkeypatch.setattr(ENV_CONFIG, PROVIDER_KEY_NAMES[provider].lower(), SecretStr("")) + for name in ( + "OPENAI_API_KEY", + "OPENAI_ADMIN_KEY", + "ANTHROPIC_API_KEY", + "ANTHROPIC_AUTH_TOKEN", + ): + monkeypatch.setenv(name, "unrelated-key") + body = { + "model": "example", + "stream": stream, + "max_tokens": 20, + "messages": [{"role": "user", "content": "Hi"}], + } + if downstream == "responses": + body = {"model": "example", "stream": stream, "input": "Hi", "max_output_tokens": 20} + + def unexpected(request): + pytest.fail("Missing provider credential reached HTTP") + + async with Molto( + http_client=httpx.AsyncClient(transport=httpx.MockTransport(unexpected)) + ) as molto: + with pytest.raises(Exception, match=PROVIDER_KEY_NAMES[provider]) as error: + await getattr(molto, downstream)( + body, endpoint=endpoint, provider=provider, base_url=base + ) + assert type(error.value).__name__ == "AuthenticationError" + assert str(error.value.request.url) == base + path + + +@pytest.mark.parametrize(("provider", "endpoint", "base", "path"), DESTINATIONS) +async def test_direct_hosted_client_defaults_and_missing_credentials( + provider, endpoint, base, path, monkeypatch +): + """Ensures direct clients own their URL and reject unrelated SDK credentials without the facade.""" + monkeypatch.setenv("OPENAI_API_KEY", "unrelated-key") + async with httpx.AsyncClient() as transport: + kwargs = {"capabilities": PROVIDER_CAPABILITIES[provider]} + if provider == "bedrock": + with pytest.raises(ValueError, match="explicit"): + CLIENTS[provider, endpoint](transport, **kwargs) + kwargs["base_url"] = base + client = CLIENTS[provider, endpoint](transport, **kwargs) + with pytest.raises(OpenAIError, match=PROVIDER_KEY_NAMES[provider]): + client._make_sdk_client() + selected = CLIENTS[provider, endpoint](transport, api_key="selected-key", **kwargs) + sdk = selected._make_sdk_client() + assert str(sdk.base_url).rstrip("/") == base + assert sdk.default_headers["Authorization"] == "Bearer selected-key" + + +@pytest.mark.parametrize(("provider", "supported", "base", "path"), DESTINATIONS) +async def test_hosted_providers_reject_unselected_protocols(provider, supported, base, path): + """Ensures a custom URL cannot silently enable an unsupported provider protocol.""" + async with Molto( + http_client=httpx.AsyncClient( + transport=httpx.MockTransport( + lambda _: pytest.fail("Unsupported provider protocol reached HTTP") + ) + ) + ) as client: + for endpoint in {"responses", "chat/completions", "messages"}: + if (provider, endpoint) in CLIENTS: + continue + with pytest.raises(ValueError): + await client.responses( + {"model": "example", "input": "Hi"}, + provider=provider, + endpoint=endpoint, + api_key="selected-key", + base_url=base, + ) + + +def tool_chunk(calls, finish=None): + return { + "id": "chat-1", + "model": "example", + "created": 1, + "object": "chat.completion.chunk", + "choices": [{"index": 0, "delta": {"tool_calls": calls}, "finish_reason": finish}], + } + + +def gemini_http(events): + data = "".join(dumps_sse(event) for event in events) + "data: [DONE]\n\n" + return httpx.AsyncClient( + transport=httpx.MockTransport( + lambda _: httpx.Response(200, text=data, headers={"content-type": "text/event-stream"}) + ) + ) + + +def call_start(call_id, arguments="{", **fields): + return { + "id": call_id, + "type": "function", + "function": {"name": "add", "arguments": arguments}, + **fields, + } + + +@pytest.mark.parametrize( + ("downstream", "stream"), + [("chat_completions", True), ("responses", True), ("responses", False)], +) +@pytest.mark.parametrize("parallel", [False, True]) +async def test_gemini_missing_indices_preserve_distinct_calls(downstream, stream, parallel): + """Ensures repaired single and contiguous parallel calls finish with stable IDs and arguments.""" + events = [ + tool_chunk([call_start("call-a", index=None)]), + tool_chunk([{"id": "call-a", "function": {"arguments": '"a":1}'}}]), + ] + if parallel: + events.extend( + [ + tool_chunk([call_start("call-b")]), + tool_chunk([{"id": "call-b", "function": {"arguments": '"a":2}'}}]), + ] + ) + events.append(tool_chunk([], "tool_calls")) + async with Molto(http_client=gemini_http(events)) as molto: + body = {"model": "example", "stream": stream} + body.update( + {"input": "Hi"} + if downstream == "responses" + else {"messages": [{"role": "user", "content": "Hi"}]} + ) + result = await getattr(molto, downstream)( + body, endpoint="chat/completions", provider="gemini", api_key="key" + ) + if stream: + output = [event async for event in result] + if downstream == "chat_completions": + state = ChatCompletionStreamState() + for event in output: + state.handle_chunk(event) + calls = state.get_final_completion().choices[0].message.tool_calls + actual = [(c.id, c.function.arguments) for c in calls] + else: + response = output[-1].response if stream else result + actual = [(item.call_id, item.arguments) for item in response.output] + if stream: + added = [ + event.item.call_id + for event in output + if event.type == "response.output_item.added" + ] + done = [ + event.item.call_id + for event in output + if event.type == "response.output_item.done" + ] + assert added == done == [call_id for call_id, _ in actual] + assert actual == [("call-a", '{"a":1}')] + ([("call-b", '{"a":2}')] if parallel else []) + + +@pytest.mark.parametrize("mixed_indices", [False, True]) +async def test_gemini_native_interleaved_calls_use_ids_not_array_positions(mixed_indices): + """Ensures native accumulation preserves parallel identities when fragment order changes.""" + first = [call_start("call-a"), call_start("call-b")] + for call in first: + call["extra_content"] = {"google": {"thought_signature": f"state-{call['id']}"}} + if mixed_indices: + first[1]["index"] = 1 + events = [ + tool_chunk(first), + tool_chunk( + [ + {"id": "call-b", "function": {"arguments": '"a":2}'}}, + {"id": "call-a", "function": {"arguments": '"a":1}'}}, + ] + ), + tool_chunk([], "tool_calls"), + ] + original = deepcopy(events) + async with Molto(http_client=gemini_http(events)) as molto: + output = await molto.chat_completions( + {"model": "example", "stream": True, "messages": [{"role": "user", "content": "Hi"}]}, + provider="gemini", + api_key="key", + ) + state = ChatCompletionStreamState() + async for event in output: + state.handle_chunk(event) + calls = state.get_final_completion().choices[0].message.tool_calls + assert [(c.id, c.function.name, c.function.arguments) for c in calls] == [ + ("call-a", "add", '{"a":1}'), + ("call-b", "add", '{"a":2}'), + ] + assert [c.extra_content for c in calls] == [ + {"google": {"thought_signature": "state-call-a"}}, + {"google": {"thought_signature": "state-call-b"}}, + ] + assert events == original + + +@pytest.mark.parametrize("stream", [False, True]) +async def test_gemini_translated_noncontiguous_calls_reject(stream): + """Ensures inferred indices do not bypass the translated stream's contiguous-call contract.""" + events = [ + tool_chunk([call_start("call-a"), call_start("call-b")]), + tool_chunk([{"id": "call-a", "function": {"arguments": "}"}}]), + ] + async with Molto(http_client=gemini_http(events)) as molto: + with pytest.raises(ValueError, match="contiguous"): + result = await molto.responses( + {"model": "example", "input": "Hi", "stream": stream}, + endpoint="chat/completions", + provider="gemini", + api_key="key", + ) + if stream: + [event async for event in result] + + +@pytest.mark.parametrize( + "calls", + [ + [{"index": None, "function": {"arguments": "{}"}}], + [call_start("call-a", index=-1)], + [call_start("call-a", index="invalid")], + [call_start("call-a", index=0), call_start("call-b", index=0)], + [call_start("call-a", index=0), call_start("call-a", index=1)], + ], +) +async def test_gemini_ambiguous_or_conflicting_identity_rejects(calls): + """Ensures malformed or conflicting identity fails before a fabricated successful completion.""" + async with Molto(http_client=gemini_http([tool_chunk(calls)])) as molto: + with pytest.raises(ValueError, match="unambiguous|nonnegative|identity|index"): + result = await molto.responses( + {"model": "example", "input": "Hi", "stream": True}, + endpoint="chat/completions", + provider="gemini", + api_key="key", + ) + [event async for event in result] + + +async def test_gemini_anonymous_fragment_after_parallel_calls_rejects(): + """Ensures a fragment with several possible owners never defaults to the latest or zero index.""" + events = [ + tool_chunk([call_start("call-a"), call_start("call-b")]), + tool_chunk([{"function": {"arguments": "}"}}]), + ] + async with Molto(http_client=gemini_http(events)) as molto: + with pytest.raises(ValueError, match="unambiguous"): + result = await molto.chat_completions( + { + "model": "example", + "messages": [{"role": "user", "content": "Hi"}], + "stream": True, + }, + provider="gemini", + api_key="key", + ) + [event async for event in result] + + +async def test_gemini_anonymous_single_call_continuation_is_unambiguous(): + """Ensures an anonymous argument-only fragment can continue the sole established call.""" + events = [ + tool_chunk([call_start("call-a")]), + tool_chunk([{"function": {"arguments": '"a":1}'}}]), + tool_chunk([], "tool_calls"), + ] + async with Molto(http_client=gemini_http(events)) as molto: + result = await molto.responses( + {"model": "example", "input": "Hi", "stream": False}, + endpoint="chat/completions", + provider="gemini", + api_key="key", + ) + assert [(item.call_id, item.arguments) for item in result.output] == [("call-a", '{"a":1}')] + + +async def test_gemini_indexed_chunks_retain_native_fidelity(): + """Ensures Gemini compatibility repair does not alter already indexed provider chunks.""" + from openai.types.chat import ChatCompletionChunk + + events = [ + tool_chunk([call_start("call-a", index=0)]), + tool_chunk([{"id": "call-a", "index": 0, "function": {"arguments": "}"}}]), + tool_chunk([], "tool_calls"), + ] + async with Molto(http_client=gemini_http(events)) as molto: + result = await molto.chat_completions( + {"model": "example", "messages": [{"role": "user", "content": "Hi"}], "stream": True}, + provider="gemini", + api_key="key", + ) + actual = [event.model_dump() async for event in result] + assert actual == [ChatCompletionChunk.model_validate(event).model_dump() for event in events] diff --git a/tests/test_match_anthropic_cassette_events.py b/tests/test_match_anthropic_cassette_events.py index 8182e24..cf1428a 100644 --- a/tests/test_match_anthropic_cassette_events.py +++ b/tests/test_match_anthropic_cassette_events.py @@ -1666,10 +1666,12 @@ def test_opaque_reasoning_history_uses_prior_done_snapshot(cassette_dir: Path) - def test_request_only_matching_preserves_recorded_error(tmp_path: Path) -> None: + """Ensures request alignment preserves recorded error bytes, status, and headers.""" cassette_dir = Path(__file__).parent / "cassettes" / "errors" / "context_length_exceeded" expected = read_yaml(str(cassette_dir / "anthropic-messages-stream-00.yaml")) responses_path = cassette_dir / "openai-responses-stream-00.yaml" original_responses = responses_path.read_bytes() + expected["response"]["body_bytes"] = b'{ "error": "original bytes" }\n' unmatched = deepcopy(expected) unmatched["request"]["body"]["model"] = "unmatched-model" unmatched["request"]["body"]["messages"] = [{"role": "user", "content": "Unmatched input"}] diff --git a/tests/test_match_anthropic_cassette_responses.py b/tests/test_match_anthropic_cassette_responses.py index 527c980..f6a368c 100644 --- a/tests/test_match_anthropic_cassette_responses.py +++ b/tests/test_match_anthropic_cassette_responses.py @@ -269,6 +269,17 @@ def test_cli_writes_sorted_output_without_mutating_input(tmp_path: Path) -> None assert output_path.read_text().splitlines()[0].startswith("filename:") +def test_matching_discards_stale_raw_response_bytes() -> None: + """Ensures deliberately matched JSON replaces raw bytes without mutating the canonical recording.""" + source, canonical = _cassettes() + source["response"]["body_bytes"] = b"old recorded response" + canonical["response"]["body_bytes"] = b"canonical original bytes" + original = deepcopy(canonical) + match_messages_response(source, canonical) + assert "body_bytes" not in source["response"] + assert canonical == original + + def _search_cassettes() -> tuple[dict, dict]: directory = CASSETTES.parent / "web_search" return ( diff --git a/tests/test_match_openai_cassette_events.py b/tests/test_match_openai_cassette_events.py index d1d5864..f9058a6 100644 --- a/tests/test_match_openai_cassette_events.py +++ b/tests/test_match_openai_cassette_events.py @@ -817,10 +817,12 @@ def test_uses_default_service_tier_for_translated_chat_completions() -> None: def test_request_only_matching_preserves_recorded_error(tmp_path: Path) -> None: + """Ensures request alignment preserves recorded error bytes, status, and headers.""" cassette_dir = Path(__file__).parent / "cassettes" / "errors" / "context_length_exceeded" expected = read_yaml(str(cassette_dir / "openai-chat_completions-stream-00.yaml")) responses_path = cassette_dir / "openai-responses-stream-00.yaml" original_responses = responses_path.read_bytes() + expected["response"]["body_bytes"] = b'{ "error": "original bytes" }\n' unmatched = deepcopy(expected) unmatched["request"]["body"]["model"] = "unmatched-model" unmatched["request"]["body"]["messages"] = [{"role": "user", "content": "Unmatched input"}] diff --git a/tests/test_match_openai_cassette_responses.py b/tests/test_match_openai_cassette_responses.py index b878dbb..f002d64 100644 --- a/tests/test_match_openai_cassette_responses.py +++ b/tests/test_match_openai_cassette_responses.py @@ -271,6 +271,17 @@ def test_cli_writes_sorted_output_without_mutating_input(tmp_path: Path) -> None assert output_path.read_text().splitlines()[0].startswith("filename:") +def test_matching_discards_stale_raw_response_bytes() -> None: + """Ensures deliberately matched JSON replaces raw bytes without mutating the canonical recording.""" + source, canonical = _cassettes() + source["response"]["body_bytes"] = b"old recorded response" + canonical["response"]["body_bytes"] = b"canonical original bytes" + original = deepcopy(canonical) + match_chat_completions_response(source, canonical) + assert "body_bytes" not in source["response"] + assert canonical == original + + def _search_cassettes() -> tuple[dict, dict]: directory = CASSETTES.parent / "web_search" return ( diff --git a/tests/test_providers.py b/tests/test_providers.py index 877fab2..6bba768 100644 --- a/tests/test_providers.py +++ b/tests/test_providers.py @@ -18,7 +18,12 @@ def test_provider_capabilities_are_explicit_and_immutable() -> None: """Ensures provider-specific requirements are explicit and cannot be mutated.""" assert PROVIDER_CAPABILITIES == { "anthropic": ProviderCapabilities(thinking="summary", requires_search_history_state=True), + "bedrock": ProviderCapabilities(thinking="summary"), + "fireworks": ProviderCapabilities(thinking="summary"), "openai": ProviderCapabilities(thinking="summary"), + "gemini": ProviderCapabilities(thinking="summary"), + "openrouter": ProviderCapabilities(thinking="summary"), + "togetherai": ProviderCapabilities(thinking="raw"), "vllm": ProviderCapabilities(thinking="raw"), } with pytest.raises(FrozenInstanceError): @@ -36,7 +41,7 @@ def test_default_provider_is_separate_from_endpoint_selection() -> None: @pytest.mark.parametrize( ("provider", "base_url"), [ - ("openai", "https://vllm.example"), + ("anthropic", "https://vllm.example"), ("vllm", "https://api.anthropic.com"), ], ) @@ -45,6 +50,7 @@ async def test_provider_selects_capabilities_independently_of_endpoint_and_base_ provider: str, base_url: str, ) -> None: + """Ensures a supported provider selects capabilities independently of the destination.""" captured: dict[str, object] = {} def stub_events( diff --git a/tests/test_recorder_proxy.py b/tests/test_recorder_proxy.py new file mode 100644 index 0000000..e700771 --- /dev/null +++ b/tests/test_recorder_proxy.py @@ -0,0 +1,308 @@ +"""Offline regressions for the standalone provider evidence recorder.""" + +import json +from pathlib import Path + +import httpx +import pytest +from starlette.requests import Request +from yaml import safe_load + +from molto.utils.test import OpenAICassetteManager, OpenAICassetteTransport +from scripts import recorder_proxy + + +@pytest.fixture +def recording_dir(monkeypatch, tmp_path): + """Ensure recorder tests write temporary artifacts, never committed cassettes.""" + monkeypatch.setattr(recorder_proxy, "OUTPUT_DIR", tmp_path) + monkeypatch.setattr(recorder_proxy, "TARGET_HOST", "https://provider.test/prefix") + return tmp_path + + +def read_recording(path: Path) -> dict: + files = list(path.glob("*.yaml")) + assert len(files) == 1 + return safe_load(files[0].read_text()) + + +@pytest.mark.parametrize("stream", [False, True]) +@pytest.mark.parametrize( + ("status", "content_type", "body"), + [ + (400, "application/json", b""), + (502, "text/html", b"Bad gateway\n"), + (429, "application/json; charset=utf-8", b'{ "error": "slow down" }\n'), + (400, "application/problem+json", b'{"detail":"bad request"}'), + (503, "application/json", b"not json"), + (400, "application/octet-stream", b"\xff\x00"), + (200, "application/json", b'{ "id": "result" }\n'), + ], +) +async def test_response_bytes_and_errors_survive_proxy( + monkeypatch, recording_dir, stream, status, content_type, body +): + """Ensures all result modes retain status, exact body bytes, headers, and one attempt.""" + requests = [] + + def handler(request): + requests.append(request) + assert str(request.url) == "https://provider.test/prefix/v1/responses" + return httpx.Response( + status, + content=body, + headers={ + "content-type": content_type, + "x-request-id": "request-1", + "retry-after": "1", + }, + ) + + async with httpx.AsyncClient(transport=httpx.MockTransport(handler)) as upstream: + monkeypatch.setattr(recorder_proxy, "HTTP_CLIENT", upstream) + async with httpx.AsyncClient( + transport=httpx.ASGITransport(app=recorder_proxy.app), base_url="http://proxy.test" + ) as client: + response = await client.post("/v1/responses", json={"model": "m", "stream": stream}) + + assert len(requests) == 1 + assert response.status_code == status + assert response.content == body + assert response.headers["content-type"] == content_type + assert response.headers["x-request-id"] == "request-1" + captured = read_recording(recording_dir)["response"] + assert captured["body_bytes"] == body + assert captured["status_code"] == status + assert captured["headers"]["retry-after"] == "1" + if "json" in content_type and body.startswith(b"{"): + assert captured["body"] == json.loads(body) + + +class ProviderStream(httpx.AsyncByteStream): + def __init__(self, chunks, fail=False): + self.chunks = chunks + self.fail = fail + self.closed = False + + async def __aiter__(self): + for chunk in self.chunks: + yield chunk + if self.fail: + raise httpx.ReadError("URL may contain credentials") + + async def aclose(self): + self.closed = True + + +def proxy_request(): + async def receive(): + return {"type": "http.request", "body": b'{"stream":true}', "more_body": False} + + return Request( + { + "type": "http", + "method": "POST", + "path": "/v1/responses", + "headers": [(b"content-type", b"application/json")], + "query_string": b"", + }, + receive, + ) + + +@pytest.mark.parametrize( + ("chunks", "terminal", "error"), + [ + ([b'data: {"choices":[]}\n\ndata: [DONE]\n\n'], "[DONE]", False), + ( + [b'event: response.incomplete\ndata: {"type":"response.incomplete"}\n\n'], + "response.incomplete", + False, + ), + ([b'event: message_stop\ndata: {"type":"message_stop"}\n\n'], "message_stop", False), + ([b'data: {"error":{"message":"invalid request"}}\n\n'], None, True), + ([b'data: {"choices":[]}\n\n'], None, False), + ], +) +async def test_stream_capture_reports_eof_and_terminal_evidence( + monkeypatch, recording_dir, chunks, terminal, error +): + """Ensures EOF, protocol termination, and HTTP 200 stream errors remain distinct evidence.""" + source = ProviderStream(chunks) + async with httpx.AsyncClient( + transport=httpx.MockTransport( + lambda _: httpx.Response( + 200, stream=source, headers={"content-type": "text/event-stream; charset=utf-8"} + ) + ) + ) as upstream: + monkeypatch.setattr(recorder_proxy, "HTTP_CLIENT", upstream) + response = await recorder_proxy.proxy_request(proxy_request(), "v1/responses") + messages = [] + + async def send(message): + messages.append(message) + + await response.stream_response(send) + + captured = read_recording(recording_dir)["response"] + assert captured["status_code"] == 200 + assert captured["stream_status"] == "complete" + assert captured["terminal_event"] == terminal + assert captured["error_event"] == error + assert "".join(captured["sse"]).encode() == b"".join(chunks) + assert b"".join(item.get("body", b"") for item in messages) == b"".join(chunks) + assert source.closed + + +@pytest.mark.parametrize("disconnect_at", ["http.response.start", "http.response.body"]) +async def test_disconnected_stream_is_saved_and_closed(monkeypatch, recording_dir, disconnect_at): + """Ensures disconnects during headers or body save partial evidence and close transport.""" + source = ProviderStream([b'data: {"choices":[]}\n\n', b"data: [DONE]\n\n"]) + async with httpx.AsyncClient( + transport=httpx.MockTransport( + lambda _: httpx.Response( + 200, stream=source, headers={"content-type": "text/event-stream"} + ) + ) + ) as upstream: + monkeypatch.setattr(recorder_proxy, "HTTP_CLIENT", upstream) + response = await recorder_proxy.proxy_request(proxy_request(), "v1/responses") + + async def send(message): + if message["type"] == disconnect_at: + raise OSError("client disconnected") + + with pytest.raises(OSError, match="client disconnected"): + await response.stream_response(send) + + captured = read_recording(recording_dir)["response"] + assert captured["stream_status"] == "disconnected" + assert captured["terminal_event"] is None + assert not any("[DONE]" in line for line in captured["sse"]) + assert source.closed + + +async def test_failed_stream_propagates_and_retains_partial_evidence(monkeypatch, recording_dir): + """Ensures an upstream read failure is not swallowed or reported as successful completion.""" + source = ProviderStream([b'data: {"choices":[]}\n\n'], fail=True) + async with httpx.AsyncClient( + transport=httpx.MockTransport( + lambda _: httpx.Response( + 200, stream=source, headers={"content-type": "text/event-stream"} + ) + ) + ) as upstream: + monkeypatch.setattr(recorder_proxy, "HTTP_CLIENT", upstream) + response = await recorder_proxy.proxy_request(proxy_request(), "v1/responses") + + async def send(message): + pass + + with pytest.raises(httpx.ReadError): + await response.stream_response(send) + + captured = read_recording(recording_dir)["response"] + assert captured["stream_status"] == "transport_error" + assert captured["transport_error"] == "ReadError" + assert captured["terminal_event"] is None + assert captured["sse"] == ['data: {"choices":[]}\n', "\n"] + assert source.closed + + +async def test_credentials_are_masked_in_recordings_only(monkeypatch, recording_dir): + """Ensures echoed credentials are masked while continuation state and actual traffic survive.""" + payload = { + "extra_content": {"google": {"thought_signature": "opaque-state"}}, + "key": "semantic-key", + } + + def handler(request): + assert request.headers["authorization"] == "Bearer header-secret" + assert request.headers["x-api-key"] == "api-secret" + assert request.url.params["key"] == "query-secret" + assert json.loads(request.content) == payload + return httpx.Response(400, text="header-secret api-secret query-secret opaque-state") + + async with httpx.AsyncClient(transport=httpx.MockTransport(handler)) as upstream: + monkeypatch.setattr(recorder_proxy, "HTTP_CLIENT", upstream) + async with httpx.AsyncClient( + transport=httpx.ASGITransport(app=recorder_proxy.app), base_url="http://proxy.test" + ) as client: + response = await client.post( + "/v1/responses?key=query-secret", + json=payload, + headers={"authorization": "Bearer header-secret", "x-api-key": "api-secret"}, + ) + + assert response.text == "header-secret api-secret query-secret opaque-state" + captured = read_recording(recording_dir) + assert captured["request"]["body"] == payload + assert captured["request"]["query_params"]["key"] == "***" + assert captured["request"]["headers"]["authorization"] == "Bearer ***" + assert captured["response"]["body_bytes"] == b"*** *** *** opaque-state" + assert "secret" not in next(recording_dir.glob("*.yaml")).read_text() + + +@pytest.mark.parametrize("body", [b"", b'{ "error": "bad request" }\n', b"\xff\x00"]) +def test_replay_uses_authoritative_response_bytes(monkeypatch, tmp_path, body): + """Ensures replay does not reserialize JSON or corrupt empty and binary error bodies.""" + manager = OpenAICassetteManager("recorder", "recorder", "recorder", False, root=tmp_path) + cassette = { + "request": { + "method": "POST", + "path": "/v1/responses", + "body": {"model": "m"}, + "query_params": {}, + "headers": {"content-type": "application/json"}, + }, + "response": { + "status_code": 400, + "headers": {"content-type": "application/json", "x-request-id": "request-1"}, + "body": {"error": "parsed value is not authoritative"}, + "body_bytes": body, + }, + } + monkeypatch.setattr(manager, "read", lambda _: cassette) + transport = OpenAICassetteTransport(manager, playback_only=True) + request = httpx.Request("POST", "https://provider.test/v1/responses", json={"model": "m"}) + response = transport._response_from_cassette( + request, {"model": "m"}, tmp_path / "capture.yaml" + ) + assert response.content == body + assert response.status_code == 400 + assert response.headers["x-request-id"] == "request-1" + + +@pytest.mark.parametrize("content_type", ["application/json", "text/html"]) +async def test_partial_non_streaming_error_retains_received_bytes( + monkeypatch, recording_dir, content_type +): + """Ensures truncated error bodies retain observed bytes and failure status without fabrication.""" + body = b'{"error":"truncated' if content_type == "application/json" else b"truncated" + source = ProviderStream([body], fail=True) + async with httpx.AsyncClient( + transport=httpx.MockTransport( + lambda _: httpx.Response(502, stream=source, headers={"content-type": content_type}) + ) + ) as upstream: + monkeypatch.setattr(recorder_proxy, "HTTP_CLIENT", upstream) + with pytest.raises(httpx.ReadError): + await recorder_proxy.proxy_request(proxy_request(), "v1/responses") + captured = read_recording(recording_dir)["response"] + assert captured["status_code"] == 502 + assert captured["body_bytes"] == body + assert captured["body"] == body.decode() + assert captured["transport_error"] == "ReadError" + assert source.closed + + +def test_standalone_proxy_disables_credential_bearing_access_logs(monkeypatch, recording_dir): + """Ensures standalone startup cannot expose query credentials through Uvicorn access logs.""" + captured = {} + monkeypatch.setattr("sys.argv", ["recorder_proxy.py"]) + monkeypatch.setattr( + recorder_proxy.uvicorn, "run", lambda app, **options: captured.update(options) + ) + recorder_proxy.main() + assert captured["access_log"] is False diff --git a/tests/types/test_openai_responses.py b/tests/types/test_openai_responses.py index fa4ef0b..11a25dc 100644 --- a/tests/types/test_openai_responses.py +++ b/tests/types/test_openai_responses.py @@ -30,6 +30,25 @@ ) +@pytest.mark.parametrize("strictness", [{}, {"strict": False}, {"strict": True}, {"strict": None}]) +def test_function_tool_preserves_optional_strictness(strictness): + """Ensures omitted strictness stays omitted and explicit values retain existing serialization.""" + tool = {"type": "function", "name": "add", "parameters": {}, **strictness} + request = OpenAIResponsesCreateRequest(model="m", tools=[tool]) + expected = {key: value for key, value in tool.items() if value is not None} + assert request.model_dump()["tools"] == [expected] + assert request.model_dump()["tools"] == [expected] + + +@pytest.mark.parametrize("field", ["type", "name", "parameters"]) +def test_function_tool_still_requires_sdk_identity_and_schema(field): + """Ensures optional strictness does not loosen other required function definition fields.""" + tool = {"type": "function", "name": "add", "parameters": {}} + del tool[field] + with pytest.raises(ValidationError): + OpenAIResponsesCreateRequest(model="m", tools=[tool]) + + def test_request_fields_match_responses_create_body_parameters(): signature = inspect.signature(AsyncResponses.create) transport_parameters = {"self", "extra_headers", "extra_query", "extra_body", "timeout"} diff --git a/tests/types/test_provider_history.py b/tests/types/test_provider_history.py new file mode 100644 index 0000000..1aae029 --- /dev/null +++ b/tests/types/test_provider_history.py @@ -0,0 +1,138 @@ +"""Synthetic provider history boundaries; these cases do not certify live models.""" + +from copy import deepcopy + +import pytest +from openai.types.chat import ChatCompletionMessage +from openai.types.responses import ResponseReasoningItem +from pydantic import ValidationError + +from molto.types.openai_chat_completions import OpenAIChatCompletionsCreateRequest +from molto.types.openai_responses import OpenAIResponsesCreateRequest + + +@pytest.mark.parametrize( + "call", + [ + {"id": "call_1", "type": "function", "function": {"name": "add", "arguments": '{"a":2}'}}, + {"id": "call_2", "type": "custom", "custom": {"name": "code", "input": " x\n"}}, + ], +) +def test_tool_history_is_eager_and_repeatable(call): + """Ensures function and custom calls survive repeated serialization without lazy iterators.""" + message = {"role": "assistant", "content": None, "tool_calls": [call]} + request = OpenAIChatCompletionsCreateRequest(model="model", messages=[message]) + expected = {"model": "model", "messages": [message]} + assert request.model_dump(warnings="error") == expected + assert request.model_dump(warnings="error") == expected + + +@pytest.mark.parametrize("kind", ["function", "custom"]) +@pytest.mark.parametrize( + "corruption", + ["index", "missing_id", "missing_name", "missing_payload", "extra", "nested_extra"], +) +def test_tool_history_rejects_corruption_at_construction(kind, corruption): + """Ensures malformed call history fails before transport instead of disappearing on dump.""" + payload = "arguments" if kind == "function" else "input" + call = {"id": "call_1", "type": kind, kind: {"name": "tool", payload: "{}"}} + if corruption == "index": + call["index"] = 0 + elif corruption == "missing_id": + del call["id"] + elif corruption == "missing_name": + del call[kind]["name"] + elif corruption == "missing_payload": + del call[kind][payload] + elif corruption == "extra": + call["unexpected"] = True + else: + call[kind]["unexpected"] = True + with pytest.raises(ValidationError): + OpenAIChatCompletionsCreateRequest( + model="model", messages=[{"role": "assistant", "tool_calls": [call]}] + ) + + +def google_state(value): + return {"google": {"thought_signature": value}} + + +@pytest.mark.parametrize("role", ["user", "system", "developer", "assistant", "tool"]) +@pytest.mark.parametrize("parts", [False, True]) +def test_google_message_and_part_attachments_remain_independent(role, parts): + """Ensures opaque message and individual part values remain at their original attachments.""" + message = {"role": role, "content": "Text", "extra_content": google_state(" message\n")} + if parts: + message["content"] = [ + {"type": "text", "text": "First", "extra_content": google_state("part-1")}, + {"type": "text", "text": "Second", "extra_content": google_state("part-2")}, + ] + if role == "tool": + message["tool_call_id"] = "call_1" + message["extra_content"]["google"]["parts"] = [ + { + "file_data": { + "mime_type": "application/pdf", + "display_name": "report", + "file_uri": "gs://example/report.pdf", + } + } + ] + original = deepcopy(message) + request = OpenAIChatCompletionsCreateRequest(model="model", messages=[message]) + assert request.model_dump()["messages"] == [original] + assert request.model_dump()["messages"] == [original] + assert message == original + + +def test_google_parallel_calls_preserve_distinct_opaque_state(): + """Ensures each parallel call retains its own signature, identity and argument bytes.""" + message = ChatCompletionMessage.model_validate( + { + "role": "assistant", + "content": None, + "extra_content": google_state("message"), + "tool_calls": [ + { + "id": f"call_{i}", + "type": "function", + "function": {"name": "add", "arguments": f'{{"a":{i}}}'}, + "extra_content": google_state(f"call-{i}"), + } + for i in range(2) + ], + } + ).model_dump(exclude_unset=True) + request = OpenAIChatCompletionsCreateRequest(model="model", messages=[message]) + assert request.model_dump(warnings="error")["messages"] == [message] + assert request.model_dump(warnings="error")["messages"] == [message] + + +@pytest.mark.parametrize( + "extension", [{"other": {}}, {"google": {}, "other": {}}, {"google": "bad"}, None] +) +def test_google_extension_rejects_unknown_namespaces(extension): + """Ensures the extension is a narrow Google envelope rather than arbitrary request extras.""" + with pytest.raises(ValidationError): + OpenAIChatCompletionsCreateRequest( + model="model", + messages=[{"role": "user", "content": "Text", "extra_content": extension}], + ) + + +def test_openrouter_reasoning_format_round_trips_sdk_history(): + """Ensures SDK-retained reasoning format survives repeated native history serialization.""" + item = ResponseReasoningItem.model_validate( + { + "id": "rs_1", + "type": "reasoning", + "summary": [], + "content": [{"type": "reasoning_text", "text": " Think\n"}], + "status": "completed", + "format": "unknown", + } + ).model_dump(exclude_unset=True) + request = OpenAIResponsesCreateRequest(model="model", input=[item]) + assert request.model_dump()["input"] == [item] + assert request.model_dump()["input"] == [item] diff --git a/tests/upstream/test_multi_turn.py b/tests/upstream/test_multi_turn.py index 54f6575..9170528 100644 --- a/tests/upstream/test_multi_turn.py +++ b/tests/upstream/test_multi_turn.py @@ -1,9 +1,14 @@ from contextlib import asynccontextmanager +from copy import deepcopy from pathlib import Path import httpx import pytest +from anthropic.lib.streaming._messages import accumulate_event +from openai import AsyncOpenAI +from openai.lib.streaming.chat import ChatCompletionStreamState +from molto import Molto from molto.providers import PROVIDER_CAPABILITIES from molto.types.normalized import ( AssistantInput, @@ -28,24 +33,43 @@ UserInput, ) from molto.upstream.anthropic import AnthropicMessagesClient +from molto.upstream.bedrock import BedrockChatCompletionsClient, BedrockResponsesClient +from molto.upstream.fireworks import FireworksChatCompletionsClient, FireworksResponsesClient +from molto.upstream.gemini import GeminiChatCompletionsClient from molto.upstream.openai import OpenAIChatCompletionsClient, OpenAIResponsesClient +from molto.upstream.openrouter import OpenRouterResponsesClient +from molto.upstream.together import TogetherAIChatCompletionsClient, TogetherAIResponsesClient from molto.utils.io import json_loads, read_yaml -CLIENTS = [OpenAIResponsesClient, OpenAIChatCompletionsClient, AnthropicMessagesClient] -REASONING_CLIENTS = [OpenAIResponsesClient, AnthropicMessagesClient] -CASSETTE_DIR = Path(__file__).parents[1] / "cassettes" / "upstream_ir" -CLIENT_SETTINGS = { +CLIENTS = { OpenAIResponsesClient: ("openai", "responses"), OpenAIChatCompletionsClient: ("openai", "chat_completions"), AnthropicMessagesClient: ("anthropic", "messages"), + BedrockResponsesClient: ("bedrock", "responses"), + BedrockChatCompletionsClient: ("bedrock", "chat_completions"), + FireworksResponsesClient: ("fireworks", "responses"), + FireworksChatCompletionsClient: ("fireworks", "chat_completions"), + GeminiChatCompletionsClient: ("gemini", "chat_completions"), + OpenRouterResponsesClient: ("openrouter", "responses"), + TogetherAIResponsesClient: ("togetherai", "responses"), + TogetherAIChatCompletionsClient: ("togetherai", "chat_completions"), } +# The original scenario prompts belong to these providers' own recordings. +# Hosted captures below use their recorded prompts and available scenarios. +CANONICAL_CLIENTS = [ + client for client, (provider, _) in CLIENTS.items() if provider in {"openai", "anthropic"} +] +REASONING_CLIENTS = [ + client for client in CANONICAL_CLIENTS if CLIENTS[client][1] != "chat_completions" +] +CASSETTE_DIR = Path(__file__).parents[1] / "cassettes" / "upstream_ir" @asynccontextmanager async def _replay_client( client_type, scenario: str, turns: int, *, requests: list[httpx.Request] | None = None ): - provider, endpoint = CLIENT_SETTINGS[client_type] + provider, endpoint = CLIENTS[client_type] cassettes = [ read_yaml(CASSETTE_DIR / scenario / f"{provider}-{endpoint}-stream-{turn:02}.yaml") for turn in range(turns) @@ -86,14 +110,24 @@ def handle(request: httpx.Request) -> httpx.Response: assert consumed == turns, "Not all conversation turns were replayed" -def _assert_ir(events: list[ModelResponseStreamEvent]) -> list[TextOutput | ToolCall | Thinking]: +def _assert_ir( + events: list[ModelResponseStreamEvent], + *, + tool_name="read_file", + source_timestamps=None, + raw_reasoning=False, + termination_reason=None, +) -> list[TextOutput | ToolCall | Thinking]: """Check lifecycle balance and reconstruct each completed part from its deltas.""" start, end = events[0], events[-1] assert isinstance(start, ResponseStartEvent) assert isinstance(end, ResponseEndEvent) assert start.id == end.id and start.id assert start.model == end.model and start.model - assert start.created_at == end.created_at + if source_timestamps is None: + assert start.created_at == end.created_at + else: + assert (start.created_at, end.created_at) == source_timestamps assert end.stop_sequence is None usage = end.usage assert usage is not None @@ -104,15 +138,17 @@ def _assert_ir(events: list[ModelResponseStreamEvent]) -> list[TextOutput | Tool assert 0 <= usage.input_tokens_details.cache_write_tokens <= usage.input_tokens assert 0 <= usage.output_tokens_details.reasoning_tokens <= usage.output_tokens - parts = [] - active = None + parts = {} + active_parts = {} for event in events[1:-1]: assert isinstance(event, (PartStartEvent, PartDeltaEvent, PartEndEvent)) - assert event.index == len(parts) if isinstance(event, PartStartEvent): - assert active is None - active = event.part.model_copy(deep=True) - elif isinstance(event, PartDeltaEvent): + assert event.index == len(parts) + len(active_parts) + active_parts[event.index] = event.part.model_copy(deep=True) + continue + assert event.index in active_parts + active = active_parts[event.index] + if isinstance(event, PartDeltaEvent): delta = event.delta if isinstance(delta, TextDelta): assert isinstance(active, TextOutput) @@ -126,8 +162,12 @@ def _assert_ir(events: list[ModelResponseStreamEvent]) -> list[TextOutput | Tool else: assert isinstance(delta, ThinkingDelta) assert isinstance(active, Thinking) - assert not delta.content_delta - active.summary += delta.summary_delta or "" + if raw_reasoning: + assert not delta.summary_delta and not delta.signature_delta + active.content += delta.content_delta or "" + else: + assert not delta.content_delta + active.summary += delta.summary_delta or "" if delta.signature_delta is not None: # Opaque state is a replacement snapshot, never a text fragment. active.signature = delta.signature_delta @@ -137,25 +177,32 @@ def _assert_ir(events: list[ModelResponseStreamEvent]) -> list[TextOutput | Tool assert active.content.strip() elif isinstance(active, ToolCall): assert active.tool_call_id - assert active.tool_name == "read_file" + assert active.tool_name == tool_name args = json_loads(active.args) - assert isinstance(args, dict) and set(args) == {"path"} - assert isinstance(args["path"], str) and args["path"] + assert isinstance(args, dict) + if tool_name == "read_file": + assert set(args) == {"path"} + assert isinstance(args["path"], str) and args["path"] else: assert isinstance(active, Thinking) - assert active.content == "" - assert active.signature - parts.append(event.part) - active = None - assert active is None + if raw_reasoning: + assert active.content and not active.summary and not active.signature + else: + assert active.content == "" + assert active.signature + parts[event.index] = event.part + del active_parts[event.index] + assert not active_parts assert parts + parts = [parts[index] for index in range(len(parts))] assert end.termination_reason == ( - "tool_call" if any(isinstance(part, ToolCall) for part in parts) else "stop" + termination_reason + or ("tool_call" if any(isinstance(part, ToolCall) for part in parts) else "stop") ) return parts -@pytest.mark.parametrize("client_type", CLIENTS, ids=lambda cls: cls.__name__) +@pytest.mark.parametrize("client_type", CANONICAL_CLIENTS, ids=lambda cls: cls.__name__) async def test_multi_turn_text_chat(client_type) -> None: """Ensures all clients emit coherent text IR and preserve assistant history.""" async with _replay_client(client_type, "text_chat", turns=2) as (client, model): @@ -181,7 +228,7 @@ async def test_multi_turn_text_chat(client_type) -> None: ) -@pytest.mark.parametrize("client_type", CLIENTS, ids=lambda cls: cls.__name__) +@pytest.mark.parametrize("client_type", CANONICAL_CLIENTS, ids=lambda cls: cls.__name__) async def test_multi_turn_text_and_image_chat(client_type) -> None: """Ensures mixed text/image parts stay in one user message across conversation turns.""" requests = [] @@ -240,7 +287,7 @@ async def test_multi_turn_text_and_image_chat(client_type) -> None: request.input.append(AssistantInput(content=parts)) -@pytest.mark.parametrize("client_type", CLIENTS, ids=lambda cls: cls.__name__) +@pytest.mark.parametrize("client_type", CANONICAL_CLIENTS, ids=lambda cls: cls.__name__) async def test_multi_turn_consecutive_user_text_inputs(client_type) -> None: """Ensures adjacent user messages and text parts retain their boundaries across turns.""" requests = [] @@ -376,7 +423,7 @@ async def _assert_tool_conversation(client_type, *, reasoning: bool) -> None: assert continued_thinking is reasoning -@pytest.mark.parametrize("client_type", CLIENTS, ids=lambda cls: cls.__name__) +@pytest.mark.parametrize("client_type", CANONICAL_CLIENTS, ids=lambda cls: cls.__name__) async def test_multi_turn_tool_use(client_type) -> None: """Ensures tool IR preserves JSON arguments, call identity, results, and final text.""" await _assert_tool_conversation(client_type, reasoning=False) @@ -386,3 +433,884 @@ async def test_multi_turn_tool_use(client_type) -> None: async def test_multi_turn_tool_use_with_reasoning(client_type) -> None: """Ensures reasoning summaries and opaque state survive a complete tool conversation.""" await _assert_tool_conversation(client_type, reasoning=True) + + +# Only provider-owned recordings belong in this matrix. Missing scenarios are +# absent coverage, never canonical fixtures relabeled as another provider. +PROVIDER_CLIENTS = { + (provider, endpoint): client + for client, (provider, endpoint) in CLIENTS.items() + if client not in CANONICAL_CLIENTS +} +PROVIDER_NATIVE_CONVERSATIONS = [ + pytest.param( + provider, endpoint, scenario.name, mode, id=f"{provider}-{endpoint}-{scenario.name}-{mode}" + ) + for provider, endpoint in PROVIDER_CLIENTS + for scenario in sorted(CASSETTE_DIR.iterdir()) + if scenario.is_dir() + for mode in ("stream", "non_stream") + if (scenario / f"{provider}-{endpoint}-{mode}-00.yaml").exists() +] + +PROVIDER_RESPONSES_CONVERSATIONS = [ + pytest.param(case.values[0], case.values[2], case.values[3], id=case.id) + for case in PROVIDER_NATIVE_CONVERSATIONS + if case.values[1] == "responses" +] + + +def _provider_turns(provider, scenario, mode, endpoint="responses"): + return [ + read_yaml(path) + for path in sorted((CASSETTE_DIR / scenario).glob(f"{provider}-{endpoint}-{mode}-*.yaml")) + ] + + +def _sdk_body(body): + """Keep provider extensions separate from the SDK's native arguments.""" + body = deepcopy(body) + extension_keys = ("provider",) if "input" in body else ("provider", "reasoning") + extras = {key: body.pop(key) for key in extension_keys if key in body} + return body, extras + + +def _recorded_response(cassette): + response = cassette["response"] + if "sse" in response: + return httpx.Response( + response["status_code"], + text="".join(response["sse"]), + headers={"content-type": "text/event-stream"}, + ) + return httpx.Response( + response["status_code"], + content=response["body_bytes"], + headers={"content-type": "application/json"}, + ) + + +async def _collect_responses(result, stream): + if not stream: + return result, None + async with result: + events = [event async for event in result] + completed = [event.response for event in events if event.type == "response.completed"] + assert len(completed) == 1 + return completed[0], [event.model_dump() for event in events] + + +async def _collect_chat(result, stream, *, repair_single_call_index=False): + if not stream: + return result, None + state = ChatCompletionStreamState() + async with result: + events = [event async for event in result] + if repair_single_call_index: + # The Gemini recordings contain one complete, unindexed call per response. + # Repair SDK reference copies only; Molto output must already carry indices. + events = [event.model_copy(deep=True) for event in events] + tools = [ + tool + for event in events + for choice in event.choices + for tool in choice.delta.tool_calls or [] + ] + assert len(tools) <= 1 + for tool in tools: + assert tool.index is None and tool.id + tool.index = 0 + for event in events: + state.handle_chunk(event) + return state.get_final_completion(), [event.model_dump() for event in events] + + +def _chat_history(message, provider): + """Reproduce the recording driver's actual SDK-output history.""" + # Fireworks rejects null output-only fields in assistant input. + history = message.model_dump(exclude_unset=True, exclude_none=provider == "fireworks") + if provider == "gemini": + # Gemini rejects null optional message fields; opaque nested nulls stay intact. + history = {name: value for name, value in history.items() if value is not None} + assert history.pop("annotations", None) in (None, []) + history.pop("parsed", None) + for call in history.get("tool_calls") or []: + if provider in {"togetherai", "gemini"}: + call.pop("index", None) + call["function"].pop("parsed_arguments", None) + # These providers repeat delta.role; the SDK accumulator concatenates those strings. + if provider in {"togetherai", "gemini"}: + assert history["role"] and history["role"].replace("assistant", "") == "" + history["role"] = "assistant" + else: + assert history["role"] == "assistant" + return history + + +def _chat_input_body(recorded): + """Omit empty output-only SDK fields from input copies, preserving source cassettes.""" + body = deepcopy(recorded) + for message in body["messages"]: + if message["role"] != "assistant": + continue + assert message.pop("annotations", None) in (None, []) + for field in ("reasoning_content", "tool_calls"): + if field in message and message[field] is None: + del message[field] + for call in message.get("tool_calls", []): + call.pop("index", None) + return body + + +@pytest.mark.parametrize( + ("provider", "endpoint", "scenario", "mode"), PROVIDER_NATIVE_CONVERSATIONS +) +async def test_provider_native_conversation(provider, endpoint, scenario, mode): + """Ensures native SDK parity and exact actual-output continuation for recorded provider conversations.""" + cassettes = _provider_turns(provider, scenario, mode, endpoint) + stream = mode == "stream" + responses = endpoint == "responses" + history_key = "input" if responses else "messages" + path = "/responses" if responses else "/chat/completions" + collect = _collect_responses if responses else _collect_chat + history = deepcopy(cassettes[0]["request"]["body"][history_key]) + for turn, cassette in enumerate(cassettes): + recorded = cassette["request"]["body"] + base_url = cassette["upstream_url"].removesuffix(path) + assert history == recorded[history_key] + wire = {**recorded, history_key: history} + if not responses: + wire = _chat_input_body(wire) + body, extras = _sdk_body(wire) + calls = [] + + def handle(request, cassette=cassette, recorded=wire, calls=calls): + calls.append(request) + assert str(request.url) == cassette["upstream_url"] + assert request.headers["authorization"] == "Bearer test-key" + assert json_loads(request.content) == recorded + return _recorded_response(cassette) + + async with httpx.AsyncClient(transport=httpx.MockTransport(handle)) as transport: + sdk = AsyncOpenAI( + api_key="test-key", + base_url=base_url, + http_client=transport, + max_retries=0, + ) + sdk_result = await ( + sdk.responses.create if responses else sdk.chat.completions.create + )(**body, extra_body=extras) + expected, expected_events = await ( + _collect_chat(sdk_result, stream, repair_single_call_index=True) + if provider == "gemini" + else collect(sdk_result, stream) + ) + async with Molto( + http_client=httpx.AsyncClient(transport=httpx.MockTransport(handle)) + ) as molto: + actual, actual_events = await collect( + await getattr(molto, endpoint)( + body, + provider=provider, + api_key="test-key", + base_url=base_url, + extra_body=extras, + ), + stream, + ) + if stream and responses: + # Native streaming documents only this omitted-usage normalization. + for event in expected_events: + if ( + event["type"] == "response.completed" + and event["response"]["usage"]["input_tokens_details"]["cache_write_tokens"] + is None + ): + event["response"]["usage"]["input_tokens_details"]["cache_write_tokens"] = 0 + expected.usage.input_tokens_details.cache_write_tokens = 0 + assert actual_events == expected_events + assert actual.model_dump() == expected.model_dump() + assert len(calls) == 2 + if responses: + history.extend(item.model_dump(exclude_unset=True) for item in actual.output) + else: + history.append(_chat_history(actual.choices[0].message, provider)) + if turn + 1 < len(cassettes): + next_history = cassettes[turn + 1]["request"]["body"][history_key] + assert history == next_history[: len(history)] + suffix = next_history[len(history) :] + assert suffix and all( + item.get("role") in {"user", "tool"} or item.get("type") == "function_call_output" + for item in suffix + ) + history.extend(deepcopy(suffix)) + + +def _caller_input(items): + """Read recorded caller data; assistant history must come from actual emitted IR.""" + result = [] + for item in items: + if item.get("type") == "function_call_output": + content = item["output"] + if isinstance(content, str): + content = [{"type": "input_text", "text": content}] + result.append( + ToolReturn( + tool_call_id=item["call_id"], + content=[TextInput(content=part["text"]) for part in content], + ) + ) + else: + assert item["role"] == "user" + content = item["content"] + if isinstance(content, str): + content = [{"type": "input_text", "text": content}] + assert all(part["type"] == "input_text" for part in content) + result.append(UserInput(content=[TextInput(content=part["text"]) for part in content])) + return result + + +def _expected_responses_wire(recorded): + """Adjust source copies only for documented normalized representations, never model output.""" + body = deepcopy(recorded) + for item in body["input"]: + if item.get("role") == "user" and isinstance(item["content"], str): + item["content"] = [{"type": "input_text", "text": item["content"]}] + if item.get("role") == "assistant": + # IR text parts do not carry their enclosing source message's ID. + item.pop("id", None) + # Reconstructed Responses history intentionally omits native phase; + # the SDK parity path above still preserves the provider's value. + assert item.get("phase") in (None, "commentary", "final_answer") + item.pop("phase", None) + for part in item["content"]: + part.setdefault("annotations", []) + part.setdefault("logprobs", []) + if item.get("type") == "reasoning": + assert item.pop("format", None) in (None, "unknown") + item.pop("status", None) + if item.get("type") == "function_call_output" and isinstance(item["output"], str): + item["output"] = [{"type": "input_text", "text": item["output"]}] + for tool in body.get("tools", []): + assert tool["type"] == "function" + tool.setdefault("strict", False) + return body + + +@pytest.mark.parametrize( + ("provider", "scenario", "mode"), + [case for case in PROVIDER_RESPONSES_CONVERSATIONS if case.values[2] == "stream"], +) +async def test_provider_normalized_responses_conversation(provider, scenario, mode): + """Ensures SDK-visible text, reasoning, calls and usage survive real normalized continuations.""" + cassettes = _provider_turns(provider, scenario, mode) + first = cassettes[0]["request"]["body"] + request = NormalizedRequest( + model=first["model"], + stream=True, + max_output_tokens=first["max_output_tokens"], + input=_caller_input(first["input"]), + ) + if first.get("tools"): + request.tools = [ + FunctionTool(**{key: value for key, value in tool.items() if key != "type"}) + for tool in first["tools"] + ] + for turn, cassette in enumerate(cassettes): + recorded = cassette["request"]["body"] + base_url = cassette["upstream_url"].removesuffix("/responses") + body, extras = _sdk_body(recorded) + async with httpx.AsyncClient( + transport=httpx.MockTransport( + lambda _, cassette=cassette: _recorded_response(cassette) + ) + ) as transport: + sdk = AsyncOpenAI( + api_key="test-key", base_url=base_url, http_client=transport, max_retries=0 + ) + reference, source_events = await _collect_responses( + await sdk.responses.create(**body, extra_body=extras), True + ) + expected = _expected_responses_wire(recorded) + calls = [] + + def handle(http_request, expected=expected, cassette=cassette, calls=calls): + calls.append(http_request) + assert str(http_request.url) == cassette["upstream_url"] + assert json_loads(http_request.content) == expected + return _recorded_response(cassette) + + # Keep captured execution controls; these tests target content and history. + controls = { + key: recorded[key] + for key in ( + "reasoning", + "tool_choice", + "parallel_tool_calls", + "store", + "provider", + "include", + ) + if key in recorded + } + client_type = PROVIDER_CLIENTS[provider, "responses"] + unsigned_summary = any( + item.type == "reasoning" and item.summary and not item.encrypted_content + for item in reference.output + ) + async with httpx.AsyncClient(transport=httpx.MockTransport(handle)) as transport: + client = client_type( + transport, + api_key="test-key", + capabilities=client_type.resolve_capabilities(PROVIDER_CAPABILITIES[provider]), + base_url=base_url, + extra_body=controls, + ) + before = request.model_copy(deep=True) + if unsigned_summary: + with pytest.raises( + ValueError, match="A Responses reasoning summary requires a signature" + ): + _ = [event async for event in client.events(request)] + assert len(calls) == 1 + return + events = [event async for event in client.events(request)] + assert request == before + assert len(calls) == 1 + raw = any(item.type == "reasoning" and item.content for item in reference.output) + parts = _assert_ir( + events, + tool_name=request.tools[0].name if request.tools else "read_file", + source_timestamps=( + int(source_events[0]["response"]["created_at"]), + int(reference.created_at), + ), + raw_reasoning=raw, + ) + assert (events[0].id, events[0].model) == (reference.id, reference.model) + assert ( + "".join(part.content for part in parts if isinstance(part, TextOutput)) + == reference.output_text + ) + assert [ + (part.tool_call_id, part.tool_name, json_loads(part.args)) + for part in parts + if isinstance(part, ToolCall) + ] == [ + (item.call_id, item.name, json_loads(item.arguments)) + for item in reference.output + if item.type == "function_call" + ] + assert [ + (part.content, part.summary, part.signature) + for part in parts + if isinstance(part, Thinking) + ] == [ + ( + "".join(part.text for part in item.content or []), + "".join(part.text for part in item.summary), + item.encrypted_content, + ) + for item in reference.output + if item.type == "reasoning" + ] + assert ( + events[-1].usage.input_tokens, + events[-1].usage.output_tokens, + events[-1].usage.total_tokens, + ) == ( + reference.usage.input_tokens, + reference.usage.output_tokens, + reference.usage.total_tokens, + ) + if turn + 1 < len(cassettes): + request.input.append(AssistantInput(content=parts)) + suffix = cassettes[turn + 1]["request"]["body"]["input"][ + len(recorded["input"]) + len(reference.output) : + ] + assert suffix + request.input.extend(_caller_input(suffix)) + + +def _responses_caller_input(messages): + """Read only caller messages; translated assistant history comes from Molto output.""" + result = [] + for message in messages: + if message["role"] == "tool": + result.append( + { + "type": "function_call_output", + "call_id": message["tool_call_id"], + "output": message["content"], + } + ) + else: + assert message["role"] == "user" + content = message["content"] + if isinstance(content, str): + content = [{"type": "text", "text": content}] + assert all(part["type"] == "text" for part in content) + result.append( + { + "role": "user", + "content": [{"type": "input_text", "text": part["text"]} for part in content], + } + ) + return result + + +def _expected_chat_wire(recorded): + """Account for normalized text parts and omitted empty assistant metadata on copies.""" + body = _chat_input_body(recorded) + for message in body["messages"]: + if message["role"] in {"user", "tool"} and isinstance(message["content"], str): + message["content"] = [{"type": "text", "text": message["content"]}] + if message["role"] == "assistant": + for field in ("audio", "function_call", "refusal", "content"): + if field in message and message[field] is None: + del message[field] + if message.get("tool_calls") and message.get("content") == "": + del message["content"] + return body + + +def _messages_caller_input(messages): + """Express recorded caller input in Messages without copying assistant history.""" + result = [] + for message in messages: + if message["role"] == "tool": + result.append( + { + "role": "user", + "content": [ + { + "type": "tool_result", + "tool_use_id": message["tool_call_id"], + "content": message["content"], + } + ], + } + ) + else: + assert message["role"] == "user" + result.append(deepcopy(message)) + return result + + +def _google_signatures(message): + """Read opaque signatures from independently parsed SDK message and tool attachments.""" + return [ + extra["google"]["thought_signature"] + for attachment in (message, *(message.tool_calls or [])) + if (extra := getattr(attachment, "extra_content", None)) + ] + + +@pytest.mark.parametrize( + ("provider", "endpoint", "scenario", "mode", "downstream"), + [ + pytest.param(*case.values, downstream, id=f"{case.id}-{downstream}") + for case in PROVIDER_NATIVE_CONVERSATIONS + if case.values[1] == "chat_completions" and case.values[3] == "stream" + for downstream in ( + ("responses", "messages") if case.values[0] == "gemini" else ("responses",) + ) + ], +) +@pytest.mark.parametrize("stream", [False, True]) +async def test_provider_chat_translated_conversation( + provider, endpoint, scenario, mode, downstream, stream +): + """Ensures translated text, calls and Gemini signatures survive SDK-backed continuation.""" + cassettes = _provider_turns(provider, scenario, mode, endpoint) + first = cassettes[0]["request"]["body"] + responses = downstream == "responses" + history_key = "input" if responses else "messages" + caller_input = _responses_caller_input if responses else _messages_caller_input + body = { + "model": first["model"], + "stream": stream, + "max_output_tokens" if responses else "max_tokens": first["max_completion_tokens"], + history_key: caller_input(first["messages"]), + } + if first.get("tools"): + body["tools"] = ( + [{"type": "function", **tool["function"]} for tool in first["tools"]] + if responses + else [ + { + "name": tool["function"]["name"], + "description": tool["function"]["description"], + "input_schema": tool["function"]["parameters"], + } + for tool in first["tools"] + ] + ) + for turn, cassette in enumerate(cassettes): + recorded = cassette["request"]["body"] + base_url = cassette["upstream_url"].removesuffix("/chat/completions") + sdk_body, extras = _sdk_body(recorded) + async with httpx.AsyncClient( + transport=httpx.MockTransport( + lambda _, cassette=cassette: _recorded_response(cassette) + ) + ) as transport: + sdk = AsyncOpenAI( + api_key="test-key", base_url=base_url, http_client=transport, max_retries=0 + ) + reference, _ = await _collect_chat( + await sdk.chat.completions.create(**sdk_body, extra_body=extras), + True, + repair_single_call_index=provider == "gemini", + ) + expected = _expected_chat_wire(recorded) + if not responses: + expected["stream_options"]["include_obfuscation"] = False + calls = [] + + def handle(request, cassette=cassette, expected=expected, calls=calls): + calls.append(request) + assert str(request.url) == cassette["upstream_url"] + assert json_loads(request.content) == expected + return _recorded_response(cassette) + + controls = { + key: recorded[key] + for key in ("reasoning", "reasoning_effort", "tool_choice", "parallel_tool_calls") + if key in recorded + } + before = deepcopy(body) + message = reference.choices[0].message + async with Molto( + http_client=httpx.AsyncClient(transport=httpx.MockTransport(handle)) + ) as molto: + result = await getattr(molto, downstream)( + body, + provider=provider, + endpoint="chat/completions", + api_key="test-key", + base_url=base_url, + extra_body=controls, + ) + if responses: + actual, _ = await _collect_responses(result, stream) + elif stream: + actual = None + async with result: + async for event in result: + actual = accumulate_event(event=event, current_snapshot=actual) + else: + actual = result + assert body == before + assert len(calls) == 1 + assert (actual.id, actual.model) == (reference.id, reference.model) + if responses: + assert actual.status == "completed" + assert actual.created_at == reference.created + assert actual.usage.total_tokens == reference.usage.total_tokens + text = actual.output_text + tool_calls = [ + (item.call_id, item.name, json_loads(item.arguments)) + for item in actual.output + if item.type == "function_call" + ] + thoughts = [item for item in actual.output if item.type == "reasoning"] + signatures = [item.encrypted_content for item in thoughts] + assert all(not item.summary and not item.content for item in thoughts) + assert all( + item.type in {"message", "function_call", "reasoning"} for item in actual.output + ) + usage = (actual.usage.input_tokens, actual.usage.output_tokens) + else: + assert actual.stop_reason == "end_turn" + text = "".join(block.text for block in actual.content if block.type == "text") + tool_calls = [ + (block.id, block.name, block.input) + for block in actual.content + if block.type == "tool_use" + ] + thoughts = [block for block in actual.content if block.type == "thinking"] + signatures = [block.signature for block in thoughts] + assert all(not block.thinking for block in thoughts) + assert all(block.type in {"text", "tool_use", "thinking"} for block in actual.content) + usage = ( + actual.usage.input_tokens + + (actual.usage.cache_read_input_tokens or 0) + + (actual.usage.cache_creation_input_tokens or 0), + actual.usage.output_tokens, + ) + assert text == (message.content or "") + assert tool_calls == [ + (call.id, call.function.name, json_loads(call.function.arguments)) + for call in message.tool_calls or [] + ] + assert not getattr(message, "reasoning_content", None) + assert signatures == _google_signatures(message) + assert usage == (reference.usage.prompt_tokens, reference.usage.completion_tokens) + if turn + 1 < len(cassettes): + if responses: + body[history_key].extend( + item.model_dump(exclude_unset=True) for item in actual.output + ) + else: + body[history_key].append( + { + "role": "assistant", + "content": [block.model_dump() for block in actual.content], + } + ) + suffix = cassettes[turn + 1]["request"]["body"]["messages"][ + len(recorded["messages"]) + 1 : + ] + assert suffix + body[history_key].extend(caller_input(suffix)) + + +@pytest.mark.parametrize("scenario", ["text_chat", "tool_use"]) +async def test_gemini_normalized_signature_conversation(scenario): + """Ensures Gemini signatures enter IR unchanged and restore their original attachments.""" + cassettes = _provider_turns("gemini", scenario, "stream", "chat_completions") + first = cassettes[0]["request"]["body"] + request = NormalizedRequest( + model=first["model"], + stream=True, + max_output_tokens=first["max_completion_tokens"], + input=_caller_input(_responses_caller_input(first["messages"])), + tools=[FunctionTool(**tool["function"]) for tool in first.get("tools", [])] or None, + ) + for turn, cassette in enumerate(cassettes): + recorded = cassette["request"]["body"] + base_url = cassette["upstream_url"].removesuffix("/chat/completions") + sdk_body, extras = _sdk_body(recorded) + async with httpx.AsyncClient( + transport=httpx.MockTransport( + lambda _, cassette=cassette: _recorded_response(cassette) + ) + ) as transport: + sdk = AsyncOpenAI( + api_key="test-key", base_url=base_url, http_client=transport, max_retries=0 + ) + reference, _ = await _collect_chat( + await sdk.chat.completions.create(**sdk_body, extra_body=extras), + True, + repair_single_call_index=True, + ) + calls = [] + expected = _expected_chat_wire(recorded) + + def handle(http_request, cassette=cassette, expected=expected, calls=calls): + calls.append(http_request) + assert str(http_request.url) == cassette["upstream_url"] + assert json_loads(http_request.content) == expected + return _recorded_response(cassette) + + async with httpx.AsyncClient(transport=httpx.MockTransport(handle)) as transport: + client = GeminiChatCompletionsClient( + transport, + api_key="test-key", + base_url=base_url, + capabilities=PROVIDER_CAPABILITIES["gemini"], + extra_body={ + key: recorded[key] + for key in ("reasoning_effort", "tool_choice", "parallel_tool_calls") + if key in recorded + }, + ) + before = request.model_copy(deep=True) + events = [event async for event in client.events(request)] + assert request == before + assert len(calls) == 1 + assert reference.choices[0].finish_reason == "stop" + parts = _assert_ir( + events, + tool_name=request.tools[0].name if request.tools else "read_file", + termination_reason="stop", + ) + message = reference.choices[0].message + assert (events[0].id, events[0].model, events[0].created_at) == ( + reference.id, + reference.model, + reference.created, + ) + assert ( + events[-1].usage.input_tokens, + events[-1].usage.output_tokens, + events[-1].usage.total_tokens, + ) == ( + reference.usage.prompt_tokens, + reference.usage.completion_tokens, + reference.usage.total_tokens, + ) + assert "".join(part.content for part in parts if isinstance(part, TextOutput)) == ( + message.content or "" + ) + assert [ + (part.tool_call_id, part.tool_name, json_loads(part.args)) + for part in parts + if isinstance(part, ToolCall) + ] == [ + (call.id, call.function.name, json_loads(call.function.arguments)) + for call in message.tool_calls or [] + ] + assert [ + part.signature for part in parts if isinstance(part, Thinking) + ] == _google_signatures(message) + assert all( + not part.content and not part.summary for part in parts if isinstance(part, Thinking) + ) + if turn + 1 < len(cassettes): + request.input.append(AssistantInput(content=parts)) + suffix = cassettes[turn + 1]["request"]["body"]["messages"][ + len(recorded["messages"]) + 1 : + ] + assert suffix + request.input.extend(_caller_input(_responses_caller_input(suffix))) + + +@pytest.mark.parametrize("provider", ["openrouter", "fireworks"]) +@pytest.mark.parametrize("downstream", ["chat_completions", "messages"]) +@pytest.mark.parametrize("stream", [False, True]) +async def test_provider_reasoning_public_projection(provider, downstream, stream): + """Ensures public projections preserve raw reasoning or reject unsigned summaries from actual Responses evidence.""" + cassette = _provider_turns(provider, "tool_use_reasoning", "stream")[0] + recorded = cassette["request"]["body"] + base_url = cassette["upstream_url"].removesuffix("/responses") + sdk_body, extras = _sdk_body(recorded) + async with httpx.AsyncClient( + transport=httpx.MockTransport(lambda _: _recorded_response(cassette)) + ) as transport: + sdk = AsyncOpenAI( + api_key="test-key", base_url=base_url, http_client=transport, max_retries=0 + ) + reference, _ = await _collect_responses( + await sdk.responses.create(**sdk_body, extra_body=extras), True + ) + expected = _expected_responses_wire(recorded) + body = { + "model": recorded["model"], + "messages": deepcopy(recorded["input"]), + "max_tokens": recorded["max_output_tokens"], + "stream": stream, + } + for message in body["messages"]: + assert message["role"] == "user" + if isinstance(message["content"], list): + for part in message["content"]: + assert part["type"] == "input_text" + part["type"] = "text" + tools = recorded["tools"] + if downstream == "chat_completions": + body["tools"] = [ + { + "type": "function", + "function": {key: value for key, value in tool.items() if key != "type"}, + } + for tool in tools + ] + else: + body["tools"] = [ + { + "name": tool["name"], + "description": tool["description"], + "input_schema": tool["parameters"], + } + for tool in tools + ] + expected["stream_options"] = {"include_obfuscation": False} + controls = { + key: recorded[key] + for key in ("reasoning", "tool_choice", "parallel_tool_calls", "store", "provider") + if key in recorded + } + calls = [] + + def handle(request): + calls.append(request) + assert str(request.url) == cassette["upstream_url"] + assert json_loads(request.content) == expected + return _recorded_response(cassette) + + async with Molto( + http_client=httpx.AsyncClient(transport=httpx.MockTransport(handle)) + ) as molto: + if provider == "fireworks": + assert any( + item.type == "reasoning" and item.summary and not item.encrypted_content + for item in reference.output + ) + with pytest.raises( + ValueError, match="A Responses reasoning summary requires a signature" + ): + result = await getattr(molto, downstream)( + body, + provider=provider, + endpoint="responses", + base_url=base_url, + api_key="test-key", + extra_body=controls, + ) + if stream: + async with result: + _ = [event async for event in result] + assert len(calls) == 1 + return + result = await getattr(molto, downstream)( + body, + provider=provider, + endpoint="responses", + base_url=base_url, + api_key="test-key", + extra_body=controls, + ) + if stream: + actual = None + state = ChatCompletionStreamState() if downstream == "chat_completions" else None + async with result: + async for event in result: + if state is not None: + state.handle_chunk(event) + else: + actual = accumulate_event(event=event, current_snapshot=actual) + if state is not None: + actual = state.get_final_completion() + else: + actual = result + assert len(calls) == 1 + assert (actual.id, actual.model) == (reference.id, reference.model) + if downstream == "chat_completions": + message = actual.choices[0].message + text = message.content or "" + reasoning = message.reasoning_content + calls = [ + (call.id, call.function.name, json_loads(call.function.arguments)) + for call in message.tool_calls or [] + ] + usage = (actual.usage.prompt_tokens, actual.usage.completion_tokens) + assert actual.choices[0].finish_reason == "tool_calls" + else: + text = "".join(block.text for block in actual.content if block.type == "text") + reasoning = "".join(block.thinking for block in actual.content if block.type == "thinking") + assert all(not block.signature for block in actual.content if block.type == "thinking") + calls = [ + (block.id, block.name, block.input) + for block in actual.content + if block.type == "tool_use" + ] + usage = ( + actual.usage.input_tokens + + (actual.usage.cache_read_input_tokens or 0) + + (actual.usage.cache_creation_input_tokens or 0), + actual.usage.output_tokens, + ) + assert actual.stop_reason == "tool_use" + assert text == reference.output_text + assert reasoning == "".join( + part.text for item in reference.output if item.type == "reasoning" for part in item.content + ) + assert calls == [ + (item.call_id, item.name, json_loads(item.arguments)) + for item in reference.output + if item.type == "function_call" + ] + assert usage == (reference.usage.input_tokens, reference.usage.output_tokens) diff --git a/tests/upstream/test_openai.py b/tests/upstream/test_openai.py index df84ec4..baec449 100644 --- a/tests/upstream/test_openai.py +++ b/tests/upstream/test_openai.py @@ -1,4 +1,5 @@ from collections.abc import AsyncIterator +from copy import deepcopy from json import dumps import httpx @@ -511,10 +512,11 @@ def test_responses_client_rejects_message_identity_on_mixed_assistant_content(pa def test_chat_completions_client_remaps_parallel_image_result_after_tool_messages(): + """Ensures parallel image results follow the complete call-linked tool result block.""" request = NormalizedRequest( input=[ UserInput(content=[TextInput(content="Call all tools.")]), - Thinking(content="", summary="I should call all tools in parallel."), + Thinking(content="I should call all tools in parallel.", summary=""), ToolCall( tool_call_id="call_a", tool_name="read_image", @@ -706,7 +708,7 @@ def test_chat_completions_client_flushes_image_results_before_later_assistant_hi request = NormalizedRequest( input=[ UserInput(content=[TextInput(content="Call both tools.")]), - Thinking(content="", summary="I should call both tools in parallel."), + Thinking(content="I should call both tools in parallel.", summary=""), ToolCall( tool_call_id="call_a", tool_name="read_image", @@ -725,7 +727,7 @@ def test_chat_completions_client_flushes_image_results_before_later_assistant_hi tool_call_id="call_b", content=[TextInput(content="Text from b.txt")], ), - Thinking(content="", summary="Let me try again."), + Thinking(content="Let me try again.", summary=""), ToolCall( tool_call_id="call_c", tool_name="read_image", @@ -3850,3 +3852,210 @@ def handler(request: httpx.Request) -> httpx.Response: error = exc_info.value assert error.response.status_code == 404 assert isinstance(error.__cause__, APIStatusError) + + +def _provider_chunk(delta, finish_reason=None): + return { + "id": "chatcmpl_synthetic", + "object": "chat.completion.chunk", + "created": 1, + "model": "synthetic", + "choices": [{"index": 0, "delta": delta, "finish_reason": finish_reason}], + } + + +def _provider_stream(*chunks): + return httpx.Response( + 200, + text="".join(f"data: {dumps(chunk)}\n\n" for chunk in chunks) + "data: [DONE]\n\n", + headers={"content-type": "text/event-stream"}, + ) + + +@pytest.mark.parametrize("following", [{"content": "\n\n"}, {"reasoning_content": " think "}]) +async def test_tool_lifecycle_closes_before_following_content(following): + """Ensures actual nonempty content finishes the preceding call before starting a new part.""" + first = { + "index": 0, + "id": "call_1", + "type": "function", + "function": {"name": "lookup", "arguments": "{"}, + } + chunks = [ + _provider_chunk({"tool_calls": [first]}), + _provider_chunk( + { + "content": "", + "reasoning_content": "", + "tool_calls": [{"index": 0, "function": {"arguments": "}"}}], + } + ), + _provider_chunk(following), + _provider_chunk({}, "tool_calls"), + ] + async with httpx.AsyncClient( + transport=httpx.MockTransport(lambda _: _provider_stream(*chunks)) + ) as transport: + client = OpenAIChatCompletionsClient( + transport, capabilities=PROVIDER_CAPABILITIES["vllm"], api_key="test" + ) + events = [ + event + async for event in client.events(NormalizedRequest(model="synthetic", stream=True)) + ] + starts = [event for event in events if isinstance(event, PartStartEvent)] + ends = [event for event in events if isinstance(event, PartEndEvent)] + assert [event.index for event in starts] == [0, 1] + assert [event.index for event in ends] == [0, 1] + assert ends[0].part == ToolCall(tool_call_id="call_1", tool_name="lookup", args="{}") + assert events.index(ends[0]) < events.index(starts[1]) + assert ends[1].part == ( + TextOutput(content="\n\n") + if "content" in following + else Thinking(content=" think ", summary="") + ) + + +@pytest.mark.parametrize( + "following", + [ + {"content": "text"}, + {"reasoning_content": "think"}, + { + "tool_calls": [ + {"index": 1, "id": "call_2", "function": {"name": "second", "arguments": "{}"}} + ] + }, + ], +) +async def test_closed_tool_call_cannot_resume(following): + """Ensures intervening text, reasoning, or another call makes later fragments fail explicitly.""" + chunks = [ + _provider_chunk( + { + "tool_calls": [ + {"index": 0, "id": "call_1", "function": {"name": "first", "arguments": "{"}} + ] + } + ), + _provider_chunk(following), + _provider_chunk({"tool_calls": [{"index": 0, "function": {"arguments": "}"}}]}), + _provider_chunk({}, "stop"), + ] + async with httpx.AsyncClient( + transport=httpx.MockTransport(lambda _: _provider_stream(*chunks)) + ) as transport: + client = OpenAIChatCompletionsClient( + transport, capabilities=PROVIDER_CAPABILITIES["vllm"], api_key="test" + ) + with pytest.raises(ValueError, match="contiguous"): + [ + event + async for event in client.events(NormalizedRequest(model="synthetic", stream=True)) + ] + + +@pytest.mark.parametrize("placement", ["message", "part", "call"]) +def test_translated_history_rejects_google_state(placement): + """Ensures opaque native continuation state is rejected instead of dropped in translation.""" + message = { + "role": "assistant", + "content": [{"type": "text", "text": "hello"}], + "tool_calls": [ + {"id": "call_1", "type": "function", "function": {"name": "lookup", "arguments": "{}"}} + ], + } + extension = {"google": {"thought_signature": "opaque"}} + target = ( + message + if placement == "message" + else message["content"][0] + if placement == "part" + else message["tool_calls"][0] + ) + target["extra_content"] = extension + original = deepcopy(message) + request = OpenAIChatCompletionsCreateRequest(model="synthetic", messages=[message]) + with pytest.raises(UnsupportedInput, match="extra_content"): + OpenAIChatCompletionsAdapter(PROVIDER_CAPABILITIES["vllm"]).normalize_request(request) + assert message == original + + +@pytest.mark.parametrize( + ("provider", "placement"), + [("openai", "message"), ("openai", "call"), ("gemini", "message")], +) +@pytest.mark.parametrize("coordinator", ["responses", "messages"]) +@pytest.mark.parametrize("stream", [False, True]) +async def test_translated_output_rejects_google_state_and_closes( + provider, placement, coordinator, stream +): + """Ensures unsupported output state fails explicitly and releases the upstream stream.""" + delta = { + "tool_calls": [ + {"index": 0, "id": "call_1", "function": {"name": "lookup", "arguments": "{}"}} + ] + } + target = delta if placement == "message" else delta["tool_calls"][0] + target["extra_content"] = {"google": {"thought_signature": "opaque"}} + responses = [] + + def handler(request): + response = _provider_stream(_provider_chunk(delta), _provider_chunk({}, "tool_calls")) + responses.append(response) + return response + + body = {"model": "synthetic", "stream": stream} + if coordinator == "responses": + body["input"] = "Hello" + else: + body.update(messages=[{"role": "user", "content": "Hello"}], max_tokens=32) + async with Molto( + http_client=httpx.AsyncClient(transport=httpx.MockTransport(handler)) + ) as client: + with pytest.raises(ValueError, match="extra_content|associated text"): + result = await getattr(client, coordinator)( + body=body, endpoint="chat/completions", provider=provider, api_key="test" + ) + if stream: + async with result: + [event async for event in result] + assert responses[0].is_closed + + +@pytest.mark.parametrize( + "part", + [ + Thinking(content="", summary="summary"), + Thinking(content="", summary="", signature="opaque"), + ], +) +def test_chat_projection_rejects_nonportable_reasoning(part): + """Ensures Chat history never converts summaries or signatures into unsigned raw text.""" + request = NormalizedRequest(model="synthetic", input=[AssistantInput(content=[part])]) + with pytest.raises(UnsupportedInput, match="cannot represent"): + OpenAIChatCompletionsClient._request_body(request) + + +async def test_generic_chat_missing_index_fails_instead_of_losing_call(): + """Ensures unsupported missing indices cannot produce a successful empty translated response.""" + chunk = _provider_chunk( + { + "tool_calls": [ + {"index": None, "id": "call_1", "function": {"name": "lookup", "arguments": "{}"}} + ] + } + ) + async with httpx.AsyncClient( + transport=httpx.MockTransport( + lambda _: _provider_stream(chunk, _provider_chunk({}, "tool_calls")) + ) + ) as transport: + client = OpenAIChatCompletionsClient( + transport, capabilities=PROVIDER_CAPABILITIES["vllm"], api_key="test" + ) + with pytest.raises(ValueError, match="require an index"): + [ + event + async for event in client.events(NormalizedRequest(model="synthetic", stream=True)) + ] diff --git a/tests/upstream/test_openrouter.py b/tests/upstream/test_openrouter.py new file mode 100644 index 0000000..e6ea417 --- /dev/null +++ b/tests/upstream/test_openrouter.py @@ -0,0 +1,122 @@ +"""OpenRouter Responses interprets explicit wire reasoning without changing other protocols.""" + +import httpx +import pytest + +from molto.providers import PROVIDER_CAPABILITIES +from molto.types.normalized import NormalizedRequest, PartEndEvent, Thinking +from molto.upstream.openrouter import OpenRouterResponsesClient +from tests.upstream.test_openai import _response_event, _unexpected_http + + +async def normalized_events(monkeypatch, items): + async def native_events(request): + for item in items: + yield _response_event(item) + + async with httpx.AsyncClient(transport=httpx.MockTransport(_unexpected_http)) as transport: + client = OpenRouterResponsesClient( + transport, capabilities=PROVIDER_CAPABILITIES["openrouter"] + ) + monkeypatch.setattr(client, "native_events", native_events) + return [event async for event in client.events(NormalizedRequest(model="m"))] + + +def reasoning_item(**fields): + return {"id": "rs_1", "type": "reasoning", "summary": [], **fields} + + +def item_event(item, *, done=False): + return { + "type": "response.output_item.done" if done else "response.output_item.added", + "output_index": 0, + "sequence_number": 0, + "item": item, + } + + +@pytest.mark.parametrize("raw", [False, True]) +async def test_wire_reasoning_preserves_raw_or_signed_summary(monkeypatch, raw): + """Ensures explicit raw text and signed summaries retain their distinct IR representations.""" + item = reasoning_item( + **( + {"content": [{"type": "reasoning_text", "text": "Thought"}], "format": "unknown"} + if raw + else { + "summary": [{"type": "summary_text", "text": "Thought"}], + "encrypted_content": "opaque", + } + ) + ) + events = await normalized_events(monkeypatch, [item_event(item), item_event(item, done=True)]) + assert events[-1] == PartEndEvent( + index=0, + part=Thinking( + id="rs_1", + content="Thought" if raw else "", + summary="" if raw else "Thought", + signature=None if raw else "opaque", + ), + ) + + +@pytest.mark.parametrize( + ("fields", "error"), + [ + ( + {"summary": [{"type": "summary_text", "text": "Summary"}]}, + "summary requires a signature", + ), + ( + { + "summary": [{"type": "summary_text", "text": "Summary"}], + "encrypted_content": "opaque", + "format": "unknown", + }, + "format cannot be translated", + ), + ( + {"content": [{"type": "reasoning_text", "text": "Raw"}], "format": "named-v1"}, + "format cannot be translated", + ), + ( + { + "content": [{"type": "reasoning_text", "text": "Raw"}], + "summary": [{"type": "summary_text", "text": "Summary"}], + "encrypted_content": "opaque", + }, + "both raw reasoning and a summary", + ), + ( + { + "content": [{"type": "reasoning_text", "text": "Raw"}], + "encrypted_content": "opaque", + }, + "signature cannot accompany raw reasoning", + ), + ], +) +async def test_wire_reasoning_keeps_format_and_signature_boundaries(monkeypatch, fields, error): + """Ensures wire interpretation does not accept unsigned summaries, opaque formats, or mixed parts.""" + with pytest.raises(ValueError, match=error): + await normalized_events(monkeypatch, [item_event(reasoning_item(**fields), done=True)]) + + +@pytest.mark.parametrize("first_raw", [False, True]) +async def test_wire_reasoning_cannot_change_representation_mid_item(monkeypatch, first_raw): + """Ensures individually valid deltas cannot mix raw and summarized reasoning in one item.""" + deltas = [ + { + "type": "response.reasoning_text.delta" + if raw + else "response.reasoning_summary_text.delta", + "content_index" if raw else "summary_index": 0, + "item_id": "rs_1", + "output_index": 0, + "sequence_number": index, + "delta": "Thought", + } + for index, raw in enumerate((first_raw, not first_raw)) + ] + with pytest.raises(ValueError, match="cannot mix raw text"): + await normalized_events(monkeypatch, [item_event(reasoning_item()), *deltas])