mirror of
https://github.com/openai/codex.git
synced 2026-11-13 06:45:07 +00:00
Unify turn input submission and routing (#38275)
## What changed - Add `TurnInputRequest` and typed submission results for atomically starting a turn, steering the active turn, or declining input with a specific reason. - Expose `start_or_steer_turn`, `start_turn_if_idle`, and `steer_turn` on `CodexThread`, and migrate Core consumers to these APIs. - Make app-server `turn/start` steer an active regular turn and return that turn's ID. Reject incompatible output schemas and non-steerable turns without applying settings or enqueueing input. ## Testing - Cover concurrent start-or-steer submissions, accepted and rejected settings updates, output-schema compatibility, idle-start rejection, and app-server steering. GitOrigin-RevId: dd9b5528d76ec650c019e97af420bc13190ea86a
This commit is contained in:
1 parent
4b07886d59
commit
cbb7e82a8b
137 files changed
+5217
-6812
No files matched your search
@@ -3,8 +3,10 @@ use codex_core::ModelClient;
|
||||
use codex_core::NewThread;
|
||||
use codex_core::Prompt;
|
||||
use codex_core::ResponseEvent;
|
||||
use codex_core::StartIfIdleSubmission;
|
||||
use codex_core::StartThreadOptions;
|
||||
use codex_core::ThreadManager;
|
||||
use codex_core::TurnInputRequest;
|
||||
use codex_core::config::Config;
|
||||
use codex_core::content_items_to_text;
|
||||
use codex_core::detached_memory_responses_metadata;
|
||||
@@ -26,7 +28,6 @@ use codex_protocol::config_types::ReasoningSummary;
|
||||
use codex_protocol::openai_models::ModelInfo;
|
||||
use codex_protocol::openai_models::ReasoningEffort;
|
||||
use codex_protocol::protocol::InternalSessionSource;
|
||||
use codex_protocol::protocol::Op;
|
||||
use codex_protocol::protocol::SessionSource;
|
||||
use codex_protocol::protocol::ThreadSource;
|
||||
use codex_protocol::protocol::TokenUsage;
|
||||
@@ -336,23 +337,24 @@ impl MemoryStartupContext {
|
||||
.await?;
|
||||
|
||||
let agent = SpawnedConsolidationAgent { thread_id, thread };
|
||||
if let Err(err) = agent
|
||||
let submit_result = match agent
|
||||
.thread
|
||||
.submit(Op::UserInput {
|
||||
items: prompt,
|
||||
final_output_json_schema: None,
|
||||
responsesapi_client_metadata: None,
|
||||
additional_context: Default::default(),
|
||||
thread_settings: Default::default(),
|
||||
})
|
||||
.start_turn_if_idle(TurnInputRequest::user_input(prompt))
|
||||
.await
|
||||
{
|
||||
Ok(StartIfIdleSubmission::Started { .. }) => Ok(()),
|
||||
Ok(submission) => Err(anyhow::anyhow!(
|
||||
"memory consolidation input was not started: {submission:?}"
|
||||
)),
|
||||
Err(err) => Err(err.into()),
|
||||
};
|
||||
if let Err(err) = submit_result {
|
||||
if let Err(shutdown_err) = self.shutdown_consolidation_agent(agent).await {
|
||||
tracing::warn!(
|
||||
"failed to shut down consolidation agent after submit error: {shutdown_err}"
|
||||
);
|
||||
}
|
||||
return Err(err.into());
|
||||
return Err(err);
|
||||
}
|
||||
|
||||
Ok(agent)
|
||||
|
||||
Reference in new issue
Block a user