Add Codex Chat-to-Responses bridge

- Add Codex provider API format selection and model mapping for Chat-only upstreams.
- Convert Codex Responses requests to Chat Completions and rebuild Chat responses as Responses output.
- Preserve reasoning_content across non-streaming, streaming, tool calls, and previous_response_id follow-ups.
- Add a bounded Codex Chat history cache for restoring tool calls before tool outputs.
- Cover Chat bridge, compact routing, streaming, and history recovery with focused tests.
This commit is contained in:
Jason
2026-05-19 19:06:00 +08:00
parent 5315fa284b
commit 74acf1e387
16 changed files with 1796 additions and 163 deletions
+9 -2
View File
@@ -9,8 +9,12 @@
//! a direct (non-proxied) CLI request.
use super::{
failover_switch::FailoverSwitchManager, handlers, log_codes::srv as log_srv,
provider_router::ProviderRouter, providers::gemini_shadow::GeminiShadowStore, types::*,
failover_switch::FailoverSwitchManager,
handlers,
log_codes::srv as log_srv,
provider_router::ProviderRouter,
providers::{codex_chat_history::CodexChatHistoryStore, gemini_shadow::GeminiShadowStore},
types::*,
ProxyError,
};
use crate::database::Database;
@@ -38,6 +42,8 @@ pub struct ProxyState {
pub provider_router: Arc<ProviderRouter>,
/// Gemini Native shadow state,用于 thoughtSignature / tool call 回放
pub gemini_shadow: Arc<GeminiShadowStore>,
/// Codex Chat bridge history,用于恢复 previous_response_id 指向的 tool call
pub codex_chat_history: Arc<CodexChatHistoryStore>,
/// AppHandle,用于发射事件和更新托盘菜单
pub app_handle: Option<tauri::AppHandle>,
/// 故障转移切换管理器
@@ -72,6 +78,7 @@ impl ProxyServer {
current_providers: Arc::new(RwLock::new(std::collections::HashMap::new())),
provider_router,
gemini_shadow: Arc::new(GeminiShadowStore::default()),
codex_chat_history: Arc::new(CodexChatHistoryStore::default()),
app_handle,
failover_manager,
};