mirror of
https://github.com/openai/codex.git
synced 2026-10-24 18:18:41 +00:00
progress
This commit is contained in:
@@ -58,6 +58,7 @@ pub struct ModelClient {
|
||||
config: Arc<Config>,
|
||||
auth_manager: Option<Arc<AuthManager>>,
|
||||
model_family: ModelFamily,
|
||||
models_etag: Option<String>,
|
||||
otel_manager: OtelManager,
|
||||
provider: ModelProviderInfo,
|
||||
conversation_id: ConversationId,
|
||||
@@ -72,6 +73,7 @@ impl ModelClient {
|
||||
config: Arc<Config>,
|
||||
auth_manager: Option<Arc<AuthManager>>,
|
||||
model_family: ModelFamily,
|
||||
models_etag: Option<String>,
|
||||
otel_manager: OtelManager,
|
||||
provider: ModelProviderInfo,
|
||||
effort: Option<ReasoningEffortConfig>,
|
||||
@@ -83,6 +85,7 @@ impl ModelClient {
|
||||
config,
|
||||
auth_manager,
|
||||
model_family,
|
||||
models_etag,
|
||||
otel_manager,
|
||||
provider,
|
||||
conversation_id,
|
||||
@@ -262,7 +265,7 @@ impl ModelClient {
|
||||
store_override: None,
|
||||
conversation_id: Some(conversation_id.clone()),
|
||||
session_source: Some(session_source.clone()),
|
||||
extra_headers: beta_feature_headers(&self.config),
|
||||
extra_headers: beta_feature_headers(&self.config, self.models_etag.clone()),
|
||||
};
|
||||
|
||||
let stream_result = client
|
||||
@@ -398,7 +401,7 @@ fn build_api_prompt(prompt: &Prompt, instructions: String, tools_json: Vec<Value
|
||||
}
|
||||
}
|
||||
|
||||
fn beta_feature_headers(config: &Config) -> ApiHeaderMap {
|
||||
fn beta_feature_headers(config: &Config, models_etag: Option<String>) -> ApiHeaderMap {
|
||||
let enabled = FEATURES
|
||||
.iter()
|
||||
.filter_map(|spec| {
|
||||
@@ -416,6 +419,11 @@ fn beta_feature_headers(config: &Config) -> ApiHeaderMap {
|
||||
{
|
||||
headers.insert("x-codex-beta-features", header_value);
|
||||
}
|
||||
if let Some(etag) = models_etag
|
||||
&& let Ok(header_value) = HeaderValue::from_str(&etag)
|
||||
{
|
||||
headers.insert("X-If-Models-Match", header_value);
|
||||
}
|
||||
headers
|
||||
}
|
||||
|
||||
|
||||
@@ -492,6 +492,7 @@ impl Session {
|
||||
session_configuration: &SessionConfiguration,
|
||||
per_turn_config: Config,
|
||||
model_family: ModelFamily,
|
||||
models_etag: Option<String>,
|
||||
conversation_id: ConversationId,
|
||||
sub_id: String,
|
||||
) -> TurnContext {
|
||||
@@ -505,6 +506,7 @@ impl Session {
|
||||
per_turn_config.clone(),
|
||||
auth_manager,
|
||||
model_family.clone(),
|
||||
models_etag,
|
||||
otel_manager,
|
||||
provider,
|
||||
session_configuration.model_reasoning_effort,
|
||||
@@ -919,6 +921,7 @@ impl Session {
|
||||
.models_manager
|
||||
.construct_model_family(session_configuration.model.as_str(), &per_turn_config)
|
||||
.await;
|
||||
let models_etag = self.services.models_manager.get_models_etag().await;
|
||||
let mut turn_context: TurnContext = Self::make_turn_context(
|
||||
Some(Arc::clone(&self.services.auth_manager)),
|
||||
&self.services.otel_manager,
|
||||
@@ -926,6 +929,7 @@ impl Session {
|
||||
&session_configuration,
|
||||
per_turn_config,
|
||||
model_family,
|
||||
models_etag,
|
||||
self.conversation_id,
|
||||
sub_id,
|
||||
);
|
||||
@@ -2105,6 +2109,7 @@ async fn spawn_review_thread(
|
||||
.models_manager
|
||||
.construct_model_family(&model, &config)
|
||||
.await;
|
||||
let models_etag = sess.services.models_manager.get_models_etag().await;
|
||||
// For reviews, disable web_search and view_image regardless of global settings.
|
||||
let mut review_features = sess.features.clone();
|
||||
review_features
|
||||
@@ -2137,6 +2142,7 @@ async fn spawn_review_thread(
|
||||
per_turn_config.clone(),
|
||||
auth_manager,
|
||||
model_family.clone(),
|
||||
models_etag,
|
||||
otel_manager,
|
||||
provider,
|
||||
per_turn_config.model_reasoning_effort,
|
||||
@@ -3163,6 +3169,7 @@ mod tests {
|
||||
&session_configuration,
|
||||
per_turn_config,
|
||||
model_family,
|
||||
None,
|
||||
conversation_id,
|
||||
"turn_id".to_string(),
|
||||
);
|
||||
@@ -3249,6 +3256,7 @@ mod tests {
|
||||
&session_configuration,
|
||||
per_turn_config,
|
||||
model_family,
|
||||
None,
|
||||
conversation_id,
|
||||
"turn_id".to_string(),
|
||||
));
|
||||
|
||||
@@ -131,6 +131,10 @@ impl ModelsManager {
|
||||
.with_config_overrides(config)
|
||||
}
|
||||
|
||||
pub async fn get_models_etag(&self) -> Option<String> {
|
||||
self.etag.read().await.clone()
|
||||
}
|
||||
|
||||
pub async fn get_model(&self, model: &Option<String>, config: &Config) -> String {
|
||||
if let Some(model) = model.as_ref() {
|
||||
return model.to_string();
|
||||
|
||||
@@ -92,6 +92,7 @@ async fn run_request(input: Vec<ResponseItem>) -> Value {
|
||||
Arc::clone(&config),
|
||||
None,
|
||||
model_family,
|
||||
None,
|
||||
otel_manager,
|
||||
provider,
|
||||
effort,
|
||||
|
||||
@@ -93,6 +93,7 @@ async fn run_stream_with_bytes(sse_body: &[u8]) -> Vec<ResponseEvent> {
|
||||
Arc::clone(&config),
|
||||
None,
|
||||
model_family,
|
||||
None,
|
||||
otel_manager,
|
||||
provider,
|
||||
effort,
|
||||
|
||||
@@ -86,6 +86,7 @@ async fn responses_stream_includes_subagent_header_on_review() {
|
||||
Arc::clone(&config),
|
||||
None,
|
||||
model_family,
|
||||
None,
|
||||
otel_manager,
|
||||
provider,
|
||||
effort,
|
||||
@@ -181,6 +182,7 @@ async fn responses_stream_includes_subagent_header_on_other() {
|
||||
Arc::clone(&config),
|
||||
None,
|
||||
model_family,
|
||||
None,
|
||||
otel_manager,
|
||||
provider,
|
||||
effort,
|
||||
@@ -275,6 +277,7 @@ async fn responses_respects_model_family_overrides_from_config() {
|
||||
Arc::clone(&config),
|
||||
None,
|
||||
model_family,
|
||||
None,
|
||||
otel_manager,
|
||||
provider,
|
||||
effort,
|
||||
|
||||
@@ -1146,6 +1146,7 @@ async fn azure_responses_request_includes_store_and_reasoning_ids() {
|
||||
Arc::clone(&config),
|
||||
None,
|
||||
model_family,
|
||||
None,
|
||||
otel_manager,
|
||||
provider,
|
||||
effort,
|
||||
|
||||
Reference in New Issue
Block a user