| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
feat(vgr): add fail-closed decision policy (#717) * feat(vgr): derive fail-closed verification capabilities Signed-off-by: adhaile <adhaile@nvidia.com> * fix(vgr): address capability derivation review Signed-off-by: Giedrius Burachas <gburachas@nvidia.com> * fix(ci): repair commit checks and isolate build toolchains Signed-off-by: Giedrius Burachas <gburachas@nvidia.com> * feat(vgr): add frozen commit rules and verifier questions Signed-off-by: adhaile <adhaile@nvidia.com> Signed-off-by: Giedrius Burachas <gburachas@nvidia.com> * fix(vgr): address decision policy review Signed-off-by: Giedrius Burachas <gburachas@nvidia.com> * refactor(vgr): move verifier prompts into text assets Signed-off-by: Giedrius Burachas <gburachas@nvidia.com> * refactor(vgr): share transcript rendering with escalation Signed-off-by: Giedrius Burachas <gburachas@nvidia.com> --------- Signed-off-by: adhaile <adhaile@nvidia.com> Signed-off-by: Giedrius Burachas <gburachas@nvidia.com> Co-authored-by: adhaile <adhaile@nvidia.com> | 3 天前 | |
fix(translation): preserve logprobs in normalized Chat requests (#987) Signed-off-by: Giedrius Burachas <gburachas@nvidia.com> | 3 天前 | |
fix(translation): OpenAI Responses codec interoperability fixes for transforming routes (#646) * fix(translation): carry encrypted reasoning through the Responses codec Signed-off-by: Lin Jia <linj@nvidia.com> * fix(translation): decode text-only Responses reasoning items on output_item.done Signed-off-by: Lin Jia <linj@nvidia.com> * fix(translation): decode Responses reasoning from added, done, text.done, and completed carriers Signed-off-by: Lin Jia <linj@nvidia.com> * feat(translation): opt-in trace of raw Responses stream events Signed-off-by: Lin Jia <linj@nvidia.com> * fix(translation): emit Responses reasoning in the standard summary_text shape Signed-off-by: Lin Jia <linj@nvidia.com> * fix(translation): make synthesized Responses item ids unique across responses Signed-off-by: Lin Jia <linj@nvidia.com> * fix(translation): keep synthesized Responses item ids within 64 characters Embedding the upstream response id made synthesized item ids unique across turns, but some upstreams issue response ids several hundred characters long, and OpenAI rejects replayed item ids over 64 characters. A session that started on such an upstream and later moved to an OpenAI model failed every request with a 400 on the replayed history. Long response ids are now replaced by a 64-bit FNV-1a digest, which keeps ids distinct per response while bounding their length. Signed-off-by: Lin Jia <linj@nvidia.com> Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * fix(translation): replay encrypted reasoning under the item id it was issued with Encrypted reasoning returned by OpenAI-compatible providers is bound to the output item id it was issued under. The buffered path re-emitted such items with a synthesized id while keeping the payload, so a client that replayed the conversation got a 400 (invalid_encrypted_content: item_id did not match the target item id) on its next request and the session died. This affected any escalation route whose efficient tier returns encrypted reasoning. Both decoders now record the provider item id on the reasoning.encrypted detail, and both encoders reuse that id for the emitted reasoning item. If the id only becomes known after the item has already opened under another id, the payload is dropped with a warning instead of poisoning the replay. Signed-off-by: Lin Jia <linj@nvidia.com> Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * fix(translation): accept a verbatim reasoning item as an encrypted reasoning detail The buffered request decoder in #645 keeps a provider's reasoning item whole as the reasoning detail when it carries encrypted_content. The stream and buffered response encoders here read the payload and item id through the shared helpers, so those helpers now recognise that shape alongside the documented reasoning.encrypted object. This keeps the buffered-decode, re-stream path (used by any route that buffers a reply) carrying the encrypted payload under its original id regardless of which PR lands first. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Signed-off-by: Lin Jia <linj@nvidia.com> * fix(translation): keep every reasoning item of a streamed Responses response GPT-5 models emit a reasoning item ahead of each tool call, so one response can carry several reasoning items. The Responses stream encoder kept a single reasoning slot: the second item never opened, and when its encrypted payload arrived under a different provider id the encoder dropped it with a warning (observed on 1.5 percent of GPT-5.6 turns behind Switchyard). The same slot also opened under a synthesized id whenever summary text streamed before the payload, which made the payload unverifiable and dropped it too. The encoder now tracks reasoning items per source content index and emits each as its own output item, closing them in provider order. The Responses stream decoder announces a reasoning item's provider id as soon as the added event names it, so the encoder opens the item under that id before any text or payload arrives. The response accumulator folds the announcement into the payload detail that follows it and drops announcements whose payload never came, so replayed history keeps one detail per item; the chat encoder skips announcements since a chat client cannot use them. Tests cover a two-reasoning-item response, summary text arriving before the payload, and the decoder announcing an id exactly once across added, done and completed events. Signed-off-by: Lin Jia <linj@nvidia.com> * chore(translation): changelog entries and review tidy-ups for the Responses codec fixes Adds the changelog entries for the Responses reasoning, item-id, and raw trace changes, removes a comment left behind when a helper moved to the shared codec module, and lists the new tracing dependency with the rest of the crate's dependencies. Signed-off-by: Lin Jia <linj@nvidia.com> --------- Signed-off-by: Lin Jia <linj@nvidia.com> Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> | 1 个月前 | |
chore(rust): prepare translation crates for publishing (#72) Signed-off-by: nachiketb <nachiketb@nvidia.com> | 3 个月前 | |
chore(rust): prepare translation crates for publishing (#72) Signed-off-by: nachiketb <nachiketb@nvidia.com> | 3 个月前 | |
chore(rust): prepare translation crates for publishing (#72) Signed-off-by: nachiketb <nachiketb@nvidia.com> | 3 个月前 |
switchyard-translation
Pure Rust translation between OpenAI Chat Completions, OpenAI Responses, and Anthropic Messages request, response, and streaming formats.
The crate translates through provider-neutral LLM types from switchyard-protocol and does not
depend on provider SDKs, HTTP servers, Python, or FFI bindings.
License
Licensed under the Apache License, Version 2.0. See the Switchyard repository for details.