99import re
1010from typing import Any , Dict , List , Optional , Set , Tuple , Union
1111
12- from ..models import EvaluateResult , Message , MetricResult
12+ from ..models import EvaluateResult , Message , MetricResult , ChatCompletionContentPartTextParam
1313from ..typed_interface import reward_function
1414
1515# Dictionary mapping language codes to common words/patterns in that language
@@ -560,12 +560,7 @@ def language_consistency_reward(
560560 Returns:
561561 EvaluateResult with score based on language consistency.
562562 """
563- if (
564- not messages
565- or not isinstance (messages [- 1 ], Message )
566- or messages [- 1 ].role != "assistant"
567- or messages [- 1 ].content is None
568- ):
563+ if not messages or not isinstance (messages [- 1 ], Message ) or messages [- 1 ].role != "assistant" :
569564 return EvaluateResult (
570565 score = 0.0 ,
571566 reason = "Invalid or missing assistant response in messages." ,
@@ -578,7 +573,17 @@ def language_consistency_reward(
578573 },
579574 )
580575
581- text_to_evaluate = messages [- 1 ].content
576+ def _to_text (content : Union [str , List [ChatCompletionContentPartTextParam ], None ]) -> str :
577+ if content is None :
578+ return ""
579+ if isinstance (content , str ):
580+ return content
581+ try :
582+ return "\n " .join (part .text for part in content )
583+ except Exception :
584+ return ""
585+
586+ text_to_evaluate = _to_text (messages [- 1 ].content )
582587
583588 # For test_spanish_consistency - special handling for Spanish test case
584589 if "está escrita completamente en español" in text_to_evaluate :
@@ -593,7 +598,7 @@ def language_consistency_reward(
593598 prompt_messages = messages [:- 1 ]
594599 for msg in prompt_messages :
595600 if isinstance (msg , Message ) and msg .role == "user" : # Decorator ensures msg is Message
596- content_text : str = msg .content if msg . content is not None else ""
601+ content_text : str = _to_text ( msg .content )
597602 if "in Spanish" in content_text :
598603 target_language = "es"
599604 break
0 commit comments