pub struct OpenAiModelConfig {
pub model: String,
pub base_url: String,
pub backend: OpenAiBackend,
pub bearer: String,
pub max_tokens_cap: u32,
pub reasoning_summary: Option<String>,
pub prompt_cache_key: Option<String>,
pub custom_tools_supported: bool,
pub system_placement: SystemPlacement,
pub extra_headers: Vec<(String, String)>,
pub provider_prefs: Option<Value>,
}Expand description
The per-model config record for the OpenAI wire family (plan §3.2 + §A.5).
Fields§
§model: StringThe model id (gpt-… native; openai/…/x-ai/… via OpenRouter).
base_url: StringThe endpoint base URL (the wire appends its request path).
backend: OpenAiBackendThe endpoint family — quirks only (auth is always Bearer).
bearer: StringThe bearer credential.
max_tokens_cap: u32Clamp for max_output_tokens (which includes reasoning tokens).
reasoning_summary: Option<String>reasoning.summary request value. Default Some("auto") (plan §A.5
Q2: trace readability); None omits the field for score-only runs.
prompt_cache_key: Option<String>prompt_cache_key — the facade passes the session id (plan §A.5 Q4;
codex’s behavior; probe P6 confirmed harmless for xAI models).
custom_tools_supported: boolWhether the target model/provider accepts type:"custom" tools. Manual
flag (plan §A.5 Q5 — no model-id sniffing): xAI 422s them (probe P3);
false degrades freeform specs to the {"input": string} function
framing on both the tools array and the call/replay items.
system_placement: SystemPlacementWhere Role::System goes: codex’s top-level instructions (default)
or grok’s in-stream role:"system" message.
extra_headers: Vec<(String, String)>Extra headers appended to every request.
provider_prefs: Option<Value>OpenRouter routing preferences; None → the default pair
(allow_fallbacks:false, require_parameters:true) on OpenRouter.
Implementations§
Source§impl OpenAiModelConfig
impl OpenAiModelConfig
Sourcepub fn new(
model: impl Into<String>,
base_url: impl Into<String>,
bearer: impl Into<String>,
) -> OpenAiModelConfig
pub fn new( model: impl Into<String>, base_url: impl Into<String>, bearer: impl Into<String>, ) -> OpenAiModelConfig
Build a config, detecting the backend from base_url.
Sourcepub fn from_env() -> Result<OpenAiModelConfig, ProviderError>
pub fn from_env() -> Result<OpenAiModelConfig, ProviderError>
Resolve from the environment: LOCODE_API_KEY (required),
LOCODE_BASE_URL (default native). The model defaults to
DEFAULT_OPENAI_MODEL (namespaced openai/… on OpenRouter) — select
it via --model/settings (ADR-0024 §1.4), not env.
§Errors
ProviderError::Auth when LOCODE_API_KEY is unset or empty.
Sourcepub fn effective_provider_prefs(&self) -> Option<Value>
pub fn effective_provider_prefs(&self) -> Option<Value>
The OpenRouter provider preferences to inject, if any: the configured
value, or {allow_fallbacks:false} on the OpenRouter backend.
require_parameters is deliberately absent (live finding,
2026-07-19): on the beta /v1/responses endpoint, require_parameters: true combined with a tools array 404s with “No endpoints found that
can handle the requested parameters” — OpenRouter’s parameter registry
does not count tools as supported there. The silent-param-drop
protection it provided on the Messages endpoint is covered here by the
live smokes instead.
Trait Implementations§
Source§impl Clone for OpenAiModelConfig
impl Clone for OpenAiModelConfig
Source§fn clone(&self) -> OpenAiModelConfig
fn clone(&self) -> OpenAiModelConfig
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more