Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
8f0409f
feat(routing): add modality-aware target selection
taf2 Aug 15, 2026
7e9ee98
fix(routing): preserve modality routing invariants
taf2 Aug 15, 2026
8aca287
fix(translation): classify OpenAI audio and video inputs
taf2 Aug 15, 2026
fa68d9e
feat(routing): allow classifier target failover to be disabled
taf2 Aug 15, 2026
e9a5b64
fix(client): strip replay status from Responses input
taf2 Aug 15, 2026
aad7e26
fixed the missing optional type: "message" handling
taf2 Aug 15, 2026
372f7a1
fix(routing): preserve media in Responses tool output
taf2 Aug 15, 2026
9ccbb2b
fix(responses): sanitize replayed reasoning content
taf2 Aug 15, 2026
14d12d5
fix(responses): preserve replay-safe message IDs
taf2 Aug 15, 2026
abdd6c0
feat(client): allow target reasoning effort overrides
taf2 Aug 15, 2026
92801c6
feat(routing): support text-only multimodal judges
taf2 Aug 15, 2026
35312e4
fix(translation): encode data image URLs for Anthropic
taf2 Aug 15, 2026
2c9d94c
fix(client): bridge Responses custom tools
taf2 Aug 15, 2026
c660c8e
fix(client): bridge Responses search tools
taf2 Aug 15, 2026
2b09e0c
fix(client): normalize xAI web search tools
taf2 Aug 15, 2026
ea00397
fix(client): sanitize xAI reasoning replay
taf2 Aug 15, 2026
f3da50d
fix(client): sanitize Responses reasoning replay
taf2 Aug 15, 2026
7be6274
fix(client): sanitize custom tool replay ids
taf2 Aug 15, 2026
38049e9
fix(client): drop hosted search replay records
taf2 Aug 16, 2026
1a43b43
fix(client): enforce Responses replay id limits
taf2 Aug 16, 2026
70abd21
feat(routing): stabilize turn routing and telemetry
taf2 Aug 16, 2026
8f296bf
feat(observability): log classifier reasoning
taf2 Aug 16, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions crates/libsy-llm-client/src/backend.rs
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,14 @@ pub struct HttpBackendConfig {
pub extra_headers: BTreeMap<String, String>,
/// Default top-level request fields, applied only when the request omits the key.
pub extra_body: BTreeMap<String, Value>,
/// Reasoning effort forced onto every outbound request for this target.
pub reasoning_effort_override: Option<String>,
/// Whether Responses custom tools are bridged through upstream function tools.
pub bridge_custom_tools: bool,
/// Whether Responses deferred tools are made eagerly available upstream.
pub eager_load_tool_search: bool,
/// Whether cross-provider Responses fields are normalized for xAI.
pub xai_responses_compatibility: bool,
/// Additional attempts after the initial upstream request.
pub max_retries: u32,
}
Expand All @@ -64,6 +72,13 @@ impl fmt::Debug for HttpBackendConfig {
.field("forward_auth", &self.forward_auth)
.field("extra_header_names", &self.extra_headers.keys())
.field("extra_body_keys", &self.extra_body.keys())
.field("reasoning_effort_override", &self.reasoning_effort_override)
.field("bridge_custom_tools", &self.bridge_custom_tools)
.field("eager_load_tool_search", &self.eager_load_tool_search)
.field(
"xai_responses_compatibility",
&self.xai_responses_compatibility,
)
.field("max_retries", &self.max_retries)
.finish()
}
Expand Down Expand Up @@ -248,6 +263,26 @@ impl Backend {
&self.config().extra_body
}

/// Target-specific reasoning effort that replaces a caller-supplied value.
pub fn reasoning_effort_override(&self) -> Option<&str> {
self.config().reasoning_effort_override.as_deref()
}

/// Whether Responses custom tools must be represented as function tools upstream.
pub fn bridge_custom_tools(&self) -> bool {
self.config().bridge_custom_tools
}

/// Whether Responses tool discovery must be converted to eager definitions upstream.
pub fn eager_load_tool_search(&self) -> bool {
self.config().eager_load_tool_search
}

/// Whether Responses requests need xAI cross-provider compatibility normalization.
pub fn xai_responses_compatibility(&self) -> bool {
self.config().xai_responses_compatibility
}

/// Additional attempts allowed after the initial request.
pub fn max_retries(&self) -> u32 {
self.config().max_retries
Expand Down Expand Up @@ -343,6 +378,10 @@ mod tests {
forward_auth: false,
extra_headers: BTreeMap::new(),
extra_body: BTreeMap::new(),
reasoning_effort_override: None,
bridge_custom_tools: false,
eager_load_tool_search: false,
xai_responses_compatibility: false,
max_retries: 0,
}
}
Expand Down
Loading