mirror of
https://github.com/openai/codex.git
synced 2026-05-05 11:57:33 +00:00
## Summary This PR removes `image_detail_original` as a runtime experiment and makes original image detail available whenever the selected model supports it. Concretely, this change: - drops the `image_detail_original` feature flag from the feature registry and generated config schema - makes tool-emitted image detail depend only on `ModelInfo.supports_image_detail_original` - updates `view_image` and `code_mode`/`js_repl` image emission to use that capability check directly - removes now-redundant experiment-specific tests and instruction coverage - keeps backward compatibility for existing configs by silently ignoring a stale `features.image_detail_original` entry The net effect is that `detail: "original"` is always available on supported models, without requiring an experiment toggle.
76 lines
2.2 KiB
Rust
76 lines
2.2 KiB
Rust
use super::*;
|
|
use codex_protocol::models::ImageDetail;
|
|
use codex_protocol::openai_models::ModelInfo;
|
|
use pretty_assertions::assert_eq;
|
|
use serde_json::json;
|
|
|
|
fn model_info() -> ModelInfo {
|
|
serde_json::from_value(json!({
|
|
"slug": "test-model",
|
|
"display_name": "Test Model",
|
|
"description": null,
|
|
"supported_reasoning_levels": [],
|
|
"shell_type": "shell_command",
|
|
"visibility": "list",
|
|
"supported_in_api": true,
|
|
"priority": 1,
|
|
"availability_nux": null,
|
|
"upgrade": null,
|
|
"base_instructions": "base",
|
|
"model_messages": null,
|
|
"supports_reasoning_summaries": false,
|
|
"default_reasoning_summary": "auto",
|
|
"support_verbosity": false,
|
|
"default_verbosity": null,
|
|
"apply_patch_tool_type": null,
|
|
"truncation_policy": {
|
|
"mode": "bytes",
|
|
"limit": 10000
|
|
},
|
|
"supports_parallel_tool_calls": false,
|
|
"supports_image_detail_original": true,
|
|
"context_window": null,
|
|
"auto_compact_token_limit": null,
|
|
"effective_context_window_percent": 95,
|
|
"experimental_supported_tools": [],
|
|
"input_modalities": ["text", "image"],
|
|
"supports_search_tool": false
|
|
}))
|
|
.expect("deserialize test model")
|
|
}
|
|
|
|
#[test]
|
|
fn explicit_original_is_allowed_when_model_supports_it() {
|
|
let model_info = model_info();
|
|
|
|
assert!(can_request_original_image_detail(&model_info));
|
|
assert_eq!(
|
|
normalize_output_image_detail(&model_info, Some(ImageDetail::Original)),
|
|
Some(ImageDetail::Original)
|
|
);
|
|
assert_eq!(
|
|
normalize_output_image_detail(&model_info, /*detail*/ None),
|
|
None
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn explicit_original_is_dropped_without_model_support() {
|
|
let mut model_info = model_info();
|
|
model_info.supports_image_detail_original = false;
|
|
assert_eq!(
|
|
normalize_output_image_detail(&model_info, Some(ImageDetail::Original)),
|
|
None
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn unsupported_non_original_detail_is_dropped() {
|
|
let model_info = model_info();
|
|
|
|
assert_eq!(
|
|
normalize_output_image_detail(&model_info, Some(ImageDetail::Low)),
|
|
None
|
|
);
|
|
}
|