Codex Handbook
core/src/tools/code_mode/response_adapter.rs 47 lines
use codex_code_mode::ImageDetail as CodeModeImageDetail;use codex_protocol::models::DEFAULT_IMAGE_DETAIL;use codex_protocol::models::FunctionCallOutputContentItem;use codex_protocol::models::ImageDetail;trait IntoProtocol<T> {    fn into_protocol(self) -> T;}pub(super) fn into_function_call_output_content_items(    items: Vec<codex_code_mode::FunctionCallOutputContentItem>,) -> Vec<FunctionCallOutputContentItem> {    items.into_iter().map(IntoProtocol::into_protocol).collect()}impl IntoProtocol<ImageDetail> for CodeModeImageDetail {    fn into_protocol(self) -> ImageDetail {        let value = self;        match value {            CodeModeImageDetail::Auto => ImageDetail::Auto,            CodeModeImageDetail::Low => ImageDetail::Low,            CodeModeImageDetail::High => ImageDetail::High,            CodeModeImageDetail::Original => ImageDetail::Original,        }    }}impl IntoProtocol<FunctionCallOutputContentItem>    for codex_code_mode::FunctionCallOutputContentItem{    fn into_protocol(self) -> FunctionCallOutputContentItem {        let value = self;        match value {            codex_code_mode::FunctionCallOutputContentItem::InputText { text } => {                FunctionCallOutputContentItem::InputText { text }            }            codex_code_mode::FunctionCallOutputContentItem::InputImage { image_url, detail } => {                FunctionCallOutputContentItem::InputImage {                    image_url,                    detail: detail                        .map(IntoProtocol::into_protocol)                        .or(Some(DEFAULT_IMAGE_DETAIL)),                }            }        }    }}