Skip to main content

switchyard_translation/codecs/
mod.rs

1// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2// SPDX-License-Identifier: Apache-2.0
3
4//! Buffered wire-format codecs that translate between provider JSON and IR.
5
6pub mod anthropic;
7pub(crate) mod common;
8pub mod openai_chat;
9mod openai_media;
10pub mod responses;
11pub mod stream;
12mod structured_output;
13
14use serde_json::Value;
15
16use crate::diagnostic::TranslationDiagnostic;
17use crate::error::Result;
18use crate::format::FormatId;
19use crate::llm::{AggLlmResponse, LlmRequest};
20use crate::policy::TranslationPolicy;
21
22/// Result of decoding a request into neutral IR.
23pub struct DecodedRequest {
24    pub request: LlmRequest,
25    pub diagnostics: Vec<TranslationDiagnostic>,
26}
27
28/// Result of encoding a neutral request into provider JSON.
29pub struct EncodedRequest {
30    pub body: Value,
31    pub diagnostics: Vec<TranslationDiagnostic>,
32}
33
34/// Result of decoding a response into neutral IR.
35pub struct DecodedResponse {
36    pub response: AggLlmResponse,
37    pub diagnostics: Vec<TranslationDiagnostic>,
38}
39
40/// Result of encoding a neutral response into provider JSON.
41pub struct EncodedResponse {
42    pub body: Value,
43    pub diagnostics: Vec<TranslationDiagnostic>,
44}
45
46/// Codec contract for one buffered provider wire format.
47pub trait FormatCodec: Send + Sync {
48    /// Returns the format handled by this codec.
49    fn format(&self) -> FormatId;
50
51    /// Decodes a request body into the neutral IR.
52    fn decode_request(&self, body: &Value, policy: &TranslationPolicy) -> Result<DecodedRequest>;
53
54    /// Encodes a neutral request into provider JSON.
55    fn encode_request(
56        &self,
57        request: &LlmRequest,
58        policy: &TranslationPolicy,
59    ) -> Result<EncodedRequest>;
60
61    /// Decodes a response body into the neutral IR.
62    fn decode_response(&self, body: &Value, policy: &TranslationPolicy) -> Result<DecodedResponse>;
63
64    /// Encodes a neutral response into provider JSON.
65    fn encode_response(
66        &self,
67        response: &AggLlmResponse,
68        policy: &TranslationPolicy,
69    ) -> Result<EncodedResponse>;
70}