| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
fix(translation): report cache writes in Chat Completions as cache_write_tokens (#947) Signed-off-by: Elyas Mehtabuddin <emehtabuddin@nvidia.com> | 2 天前 | |
fix(translation): keep tool-result media and stored tool continuations across Responses (#713) * fix(translation): carry tool-result image and file content across Responses Signed-off-by: Zengyuan Liu <zengyuanl@nvidia.com> * fix(translation): keep stored Responses tool outputs as tool results Signed-off-by: Zengyuan Liu <zengyuanl@nvidia.com> --------- Signed-off-by: Zengyuan Liu <zengyuanl@nvidia.com> | 1 个月前 | |
fix(stage): match tool semantics by bare MCP tool name (#831) Stage `tool_semantics` now match MCP tools by their bare tool name. For example, `mutate = ["send_payment_request"]` now matches: - A Codex Responses call with `"name": "send_payment_request", "namespace": "mcp__billing"`. - A Claude Code call named `mcp__billing__send_payment_request`. The full name `mcp__billing__send_payment_request` still matches both. The full name is checked first, and the bare name only when the full name matches nothing. Changes: 1. `libsy` finds the bare name in one of two ways: - Codex: from the namespace mapping that the Responses decoder stores on the request. - Claude Code: from the `mcp__<server>__<tool>` form. The name is split once, after the server name, so tool names that contain `__` still work. 2. The namespace key and its two read helpers (`tool_namespaces`, `split_qualified_name`) move from `switchyard-translation` into a new `switchyard_protocol::codex_namespaces` module. This lets `libsy` read the mapping without depending on `switchyard-translation`. Fixes: https://linear.app/nvidia/issue/SWITCH-1456 Assisted-by: Claude:Opus 5.5 medium Signed-off-by: Graham King <grahamk@nvidia.com> | 1 个月前 | |
Initial commit | 3 个月前 | |
fix(translation): preserve structured-output enforcement (#892) Record schema enforcement in the shared IR. Enable OpenAI strict mode for compatible schemas. Add `is_schema_enforced` to the IR output params so a request's schema enforcement survives translation. Decoders resolve provider defaults: Anthropic always enforces, OpenAI reads the `strict` flag. When enforcement cannot carry over, such as advisory mode on Anthropic or a schema outside OpenAI's strict subset, the codec emits a lossy diagnostic. Fixes: https://github.com/NVIDIA-NeMo/Switchyard/issues/467 Assisted-by: Pi:GPT 6 Astra medium Reviewed-by: Pi:Grok 4.7 high Reviewed-by: Pi:Kimi K3 high Signed-off-by: Graham King <grahamk@nvidia.com> | 28 天前 | |
fix(translation): return HTTP 502 when Responses generation fails (#703) * fix(translation): reject a buffered Responses result that reports status failed Signed-off-by: Elyas Mehtabuddin <emehtabuddin@nvidia.com> * fix(server): preserve provider error codes and redact echoed credentials Signed-off-by: Elyas Mehtabuddin <emehtabuddin@nvidia.com> * chore(tests): shorten failed Responses coverage Signed-off-by: Elyas Mehtabuddin <emehtabuddin@nvidia.com> * chore(server): simplify provider error parsing and test cases Signed-off-by: Elyas Mehtabuddin <emehtabuddin@nvidia.com> * chore(tests): combine server tests for Responses failures Signed-off-by: Elyas Mehtabuddin <emehtabuddin@nvidia.com> --------- Signed-off-by: Elyas Mehtabuddin <emehtabuddin@nvidia.com> | 1 个月前 | |
feat(translation): support Codex freeform tools and the Responses-lite request shape (#648) * feat(translation): round-trip Responses freeform custom tools Codex drives GPT-5 models with freeform tools: the definition is {"type": "custom", ...} and the model answers with custom_tool_call items whose input is a raw string. The Responses codec only modelled function tools, so a Codex session against a GPT-5 model through Switchyard lost its tool definitions and its tool calls and ended after one turn. Custom tools now pass through the IR as a function with a single input argument, with the verbatim definitions kept on the request extensions. History items custom_tool_call and custom_tool_call_output decode and re-encode with their types intact, upstream custom_tool_call output items decode on both the buffered and stream paths, and when a response is encoded with the request's extensions, calls to a custom tool are rewritten back into custom_tool_call items. Argument delta events for such calls are dropped on the stream because a partial JSON delta has no freeform equivalent; clients read the completed item. Signed-off-by: Lin Jia <linj@nvidia.com> Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * feat(translation): understand Responses-lite additional_tools input items Codex sends GPT-5 requests in a lite shape: no top-level tools, empty instructions, the tool definitions inside input[0] as an additional_tools developer item, and the base instructions as a developer message. The Responses codec did not know the item, so a routed GPT-5 session had no tools in the IR and the item was turned into a user message carrying the tool JSON. The request decoder now reads the item's tools as the request's tool definitions (including freeform tools) and keeps the array verbatim on the request extensions; the input decoder skips the item; the request encoder re-emits it in place and leaves top-level tools absent, so a Responses upstream receives the request in the shape the client used, while a chat upstream receives ordinary function tools. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Signed-off-by: Lin Jia <linj@nvidia.com> * fix(translation): give rewritten custom tool calls a ctc item id prefix OpenAI validates replayed item ids by prefix and rejects a custom_tool_call whose id starts with fc_ ("Expected an ID that begins with 'ctc'"). When a function_call item is rewritten into a custom_tool_call for the client, its synthesized id now takes the ctc_ prefix. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Signed-off-by: Lin Jia <linj@nvidia.com> * docs(translation): explain the custom-tool bookkeeping in the Responses request codec Signed-off-by: Lin Jia <linj@nvidia.com> * fix(translation): keep the additional_tools item when a lite request encodes input as a string A request that reduces to one user text encodes its Responses input as a plain string. The re-emitted additional_tools item was inserted only into an array input, so a Responses-lite request with a single user message lost its tool definitions on the way upstream. The encoder now widens the string to the equivalent one-message array before inserting the item. Found by review on #648; covered by a request round-trip test. Signed-off-by: Lin Jia <linj@nvidia.com> * fix(translation): pair freeform tool calls with their outputs #664 reorders replayed history so each function_call_output follows its call. Freeform (custom) calls and their custom_tool_call_output items are the same shape for an upstream that pairs by adjacency, so the pass now treats them alike. A tool result answering a freeform call keeps the custom_tool_call_output type from this branch and the paired call name from Signed-off-by: Lin Jia <linj@nvidia.com> #664. Covered by a parallel custom-call round-trip test. --------- Signed-off-by: Lin Jia <linj@nvidia.com> Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> | 1 个月前 | |
docs(translation): publish Rust API documentation (#1072) * docs(translation): include Rust API docs in site builds Signed-off-by: David Gardner <dagardner@nvidia.com> * docs(translation): include README in crate documentation Signed-off-by: David Gardner <dagardner@nvidia.com> * docs(translation): clarify Rust API coverage and dependencies Signed-off-by: David Gardner <dagardner@nvidia.com> * docs: clarify crate dependency wording Signed-off-by: David Gardner <dagardner@nvidia.com> --------- Signed-off-by: David Gardner <dagardner@nvidia.com> | 8 天前 | |
Initial commit | 3 个月前 | |
fix(translation): reject incomplete upstream streams (#425) - reject upstream SSE that reaches EOF without a source-format terminal event - preserve OpenAI Chat and Responses compatibility with their optional [DONE] marker - require Anthropic message_stop rather than accepting [DONE] as a substitute - avoid appending a duplicate EOF error after a decoded in-band provider error - cover the observed partial OpenAI response with a deterministic regression test Signed-off-by: yoliverasPozo <yoliveras@farmaciadelpozo.com> | 2 个月前 | |
Initial commit | 3 个月前 | |
fix(translation): validate nested tool result media (#755) Make target capability validation inspect media nested inside `ToolResult.content`, the same way it already inspects top-level message content. Signed-off-by: Alex Fournier <afournier@nvidia.com> | 1 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 2 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 3 个月前 | ||
| 28 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 8 天前 | ||
| 3 个月前 | ||
| 2 个月前 | ||
| 3 个月前 | ||
| 1 个月前 |