Codex Handbook
codex-api/src/endpoint/realtime_websocket/methods_v1.rs 76 lines
use crate::endpoint::realtime_websocket::methods_common::REALTIME_AUDIO_SAMPLE_RATE;use crate::endpoint::realtime_websocket::protocol::AudioFormatType;use crate::endpoint::realtime_websocket::protocol::ConversationContentType;use crate::endpoint::realtime_websocket::protocol::ConversationItemContent;use crate::endpoint::realtime_websocket::protocol::ConversationItemPayload;use crate::endpoint::realtime_websocket::protocol::ConversationItemType;use crate::endpoint::realtime_websocket::protocol::ConversationMessageItem;use crate::endpoint::realtime_websocket::protocol::RealtimeOutboundMessage;use crate::endpoint::realtime_websocket::protocol::RealtimeVoice;use crate::endpoint::realtime_websocket::protocol::SessionAudio;use crate::endpoint::realtime_websocket::protocol::SessionAudioFormat;use crate::endpoint::realtime_websocket::protocol::SessionAudioInput;use crate::endpoint::realtime_websocket::protocol::SessionAudioOutput;use crate::endpoint::realtime_websocket::protocol::SessionType;use crate::endpoint::realtime_websocket::protocol::SessionUpdateSession;use codex_protocol::protocol::ConversationTextRole;pub(super) fn conversation_item_create_message(    text: String,    role: ConversationTextRole,) -> RealtimeOutboundMessage {    RealtimeOutboundMessage::ConversationItemCreate {        item: ConversationItemPayload::Message(ConversationMessageItem {            r#type: ConversationItemType::Message,            role,            content: vec![ConversationItemContent {                r#type: ConversationContentType::InputText,                text,            }],        }),    }}pub(super) fn conversation_handoff_append_message(    handoff_id: String,    output_text: String,) -> RealtimeOutboundMessage {    RealtimeOutboundMessage::ConversationHandoffAppend {        handoff_id,        output_text,    }}pub(super) fn session_update_session(    instructions: String,    voice: RealtimeVoice,) -> SessionUpdateSession {    SessionUpdateSession {        id: None,        r#type: SessionType::Quicksilver,        model: None,        instructions: Some(instructions),        output_modalities: None,        audio: SessionAudio {            input: SessionAudioInput {                format: SessionAudioFormat {                    r#type: AudioFormatType::AudioPcm,                    rate: REALTIME_AUDIO_SAMPLE_RATE,                },                noise_reduction: None,                transcription: None,                turn_detection: None,            },            output: Some(SessionAudioOutput {                format: None,                voice,            }),        },        tools: None,        tool_choice: None,    }}pub(super) fn websocket_intent() -> Option<&'static str> {    Some("quicksilver")}