@@ -17,22 +17,37 @@ const DEFAULT_CODEX_MODEL: &str = "gpt-4o";
1717
1818/// Chat using the Codex API with OAuth authentication
1919pub async fn chat ( access_token : & str , session : & mut Session , model_param : Option < & str > ) -> Result < ( ) > {
20- eprintln ! ( "Codex: model parameter received: {:?}" , model_param) ;
2120 let model = model_param. unwrap_or ( DEFAULT_CODEX_MODEL ) . to_string ( ) ;
22- eprintln ! ( "Codex: Using model: {}" , model) ;
2321
24- // Convert session messages to Codex format
25- let messages: Vec < CodexMessage > = session
26- . messages
27- . iter ( )
28- . map ( |m| CodexMessage {
29- role : m. role . to_string ( ) ,
30- content : m. content . clone ( ) ,
31- } )
32- . collect ( ) ;
22+ // Extract system messages for instructions, and non-system messages for input
23+ let mut instructions: Option < String > = None ;
24+ let mut chat_messages: Vec < CodexMessage > = Vec :: new ( ) ;
25+
26+ for m in & session. messages {
27+ if m. role == Role :: System {
28+ // Combine system messages into instructions
29+ if let Some ( ref mut inst) = instructions {
30+ inst. push_str ( "\n \n " ) ;
31+ inst. push_str ( & m. content ) ;
32+ } else {
33+ instructions = Some ( m. content . clone ( ) ) ;
34+ }
35+ } else {
36+ chat_messages. push ( CodexMessage {
37+ role : m. role . to_string ( ) ,
38+ content : m. content . clone ( ) ,
39+ } ) ;
40+ }
41+ }
42+
43+ // Provide default instructions if none found
44+ let instructions = instructions. unwrap_or_else ( || {
45+ "You are a helpful AI assistant." . to_string ( )
46+ } ) ;
3347
3448 // Check total input size
35- let total_input_size: usize = messages. iter ( ) . map ( |m| m. content . len ( ) ) . sum ( ) ;
49+ let total_input_size: usize = chat_messages. iter ( ) . map ( |m| m. content . len ( ) ) . sum :: < usize > ( )
50+ + instructions. len ( ) ;
3651
3752 if total_input_size > 500_000 {
3853 return Err ( anyhow ! (
@@ -41,11 +56,13 @@ pub async fn chat(access_token: &str, session: &mut Session, model_param: Option
4156 ) ) ;
4257 }
4358
44- // Create the request
45- let request = if messages. len ( ) == 1 && messages[ 0 ] . role == "user" {
46- CodexRequest :: simple ( model, messages[ 0 ] . content . clone ( ) )
59+ // Create the request with instructions
60+ let request = if chat_messages. len ( ) == 1 && chat_messages[ 0 ] . role == "user" {
61+ CodexRequest :: simple ( model, chat_messages[ 0 ] . content . clone ( ) )
62+ . with_instructions ( instructions)
4763 } else {
48- CodexRequest :: from_messages ( model, messages)
64+ CodexRequest :: from_messages ( model, chat_messages)
65+ . with_instructions ( instructions)
4966 } ;
5067
5168 // Make the request
0 commit comments