@@ -525,12 +525,16 @@ impl OpenAIResponsesClient {
525525 for message in messages {
526526 match message. content {
527527 MessageContent :: Text ( text) => {
528+ let content_item = match message. role {
529+ MessageRole :: User => ResponseContentItem :: InputText { text } ,
530+ MessageRole :: Assistant => ResponseContentItem :: OutputText { text } ,
531+ } ;
528532 result. push ( ResponseInputItem :: Message {
529533 role : match message. role {
530534 MessageRole :: User => "user" . to_string ( ) ,
531535 MessageRole :: Assistant => "assistant" . to_string ( ) ,
532536 } ,
533- content : vec ! [ ResponseContentItem :: InputText { text } ] ,
537+ content : vec ! [ content_item ] ,
534538 } ) ;
535539 }
536540 MessageContent :: Structured ( blocks) => {
@@ -1454,6 +1458,35 @@ mod tests {
14541458 }
14551459 }
14561460
1461+ #[ test]
1462+ fn test_convert_assistant_text_message ( ) {
1463+ let client = OpenAIResponsesClient :: new (
1464+ "test_key" . to_string ( ) ,
1465+ "gpt-5" . to_string ( ) ,
1466+ "https://api.openai.com/v1" . to_string ( ) ,
1467+ ) ;
1468+
1469+ // Test that assistant messages with simple text use OutputText, not InputText
1470+ let messages = vec ! [ Message :: new_assistant( "Hello from assistant" ) ] ;
1471+
1472+ let converted = client. convert_messages ( messages) ;
1473+ assert_eq ! ( converted. len( ) , 1 ) ;
1474+
1475+ match & converted[ 0 ] {
1476+ ResponseInputItem :: Message { role, content } => {
1477+ assert_eq ! ( role, "assistant" ) ;
1478+ assert_eq ! ( content. len( ) , 1 ) ;
1479+ match & content[ 0 ] {
1480+ ResponseContentItem :: OutputText { text } => {
1481+ assert_eq ! ( text, "Hello from assistant" ) ;
1482+ }
1483+ _ => panic ! ( "Expected OutputText for assistant message" ) ,
1484+ }
1485+ }
1486+ _ => panic ! ( "Expected Message" ) ,
1487+ }
1488+ }
1489+
14571490 #[ test]
14581491 fn test_convert_tool_result_message ( ) {
14591492 let client = OpenAIResponsesClient :: new (
0 commit comments