@@ -1121,7 +1121,7 @@ def generate(self,
11211121 raise ValueError ("input_documents must be provided in the configuration" )
11221122
11231123 start_time = time .time ()
1124- expected_rows = self .get_num_expected_rows ([question_gen_llm , chosen_response_gen_llm , rejected_response_gen_llm ])
1124+ expected_rows = self .get_num_expected_rows ([question_gen_llm ])
11251125 logger .info (
11261126 f"Starting PreferenceDataset.generate() | "
11271127 f"Expected rows: { expected_rows } "
@@ -1135,28 +1135,40 @@ def generate(self,
11351135 # Process each input document
11361136 for doc in self .config .input_documents :
11371137 # Generate questions for each document
1138- questions = self ._generate_questions (doc , question_gen_llm , language_name )
1138+ try :
1139+ questions = self ._generate_questions (doc , question_gen_llm , language_name )
1140+ except Exception as e :
1141+ logger .warning (
1142+ f"Failed to generate questions for document '{ doc .get ('title' , 'unknown' )} ' | Error: { e } "
1143+ )
1144+ continue
11391145
11401146 # For each question, generate chosen and rejected responses
11411147 for question in questions :
1142- # Track preference pair generation start time
1143- pair_start_time = time . time ()
1144-
1145- # Generate chosen response
1146- chosen_response = self ._generate_chosen_response (
1147- doc ,
1148- question ,
1149- chosen_response_gen_llm ,
1150- language_name
1151- )
1148+ try :
1149+ # Track preference pair generation start time
1150+ pair_start_time = time . time ()
1151+ # Generate chosen response
1152+ chosen_response = self ._generate_chosen_response (
1153+ doc ,
1154+ question ,
1155+ chosen_response_gen_llm ,
1156+ language_name
1157+ )
11521158
1153- # Generate rejected response
1154- rejected_response = self ._generate_rejected_response (
1155- doc ,
1156- question ,
1157- rejected_response_gen_llm ,
1158- language_name
1159- )
1159+ # Generate rejected response
1160+ rejected_response = self ._generate_rejected_response (
1161+ doc ,
1162+ question ,
1163+ rejected_response_gen_llm ,
1164+ language_name
1165+ )
1166+
1167+ except Exception as e :
1168+ logger .warning (
1169+ f"Failed to generate responses for question '{ question } ' | Error: { e } "
1170+ )
1171+ continue
11601172
11611173 # If evolutionary instruction is enabled, refine the instruction and response
11621174 if self .config .evol_instruct and evolution_llm :
@@ -1181,31 +1193,38 @@ def generate(self,
11811193
11821194 # If LLM as judge is enabled, use the judge LLM to evaluate the preference pair
11831195 if self .config .llm_as_judge and judge_llm :
1184- # Get judge scores for chosen response
1185- chosen_response_result = self ._judge_scoring (
1186- doc , question , chosen_response , judge_llm
1187- )
1188- chosen_response_score = chosen_response_result .score
1189- chosen_response_assessment = chosen_response_result .assessment
1196+ try :
1197+ # Get judge scores for chosen response
1198+ chosen_response_result = self ._judge_scoring (
1199+ doc , question , chosen_response , judge_llm
1200+ )
1201+ chosen_response_score = chosen_response_result .score
1202+ chosen_response_assessment = chosen_response_result .assessment
11901203
1191- # Get judge scores for rejected response
1192- rejected_response_result = self ._judge_scoring (
1193- doc , question , rejected_response , judge_llm
1194- )
1195- rejected_response_score = rejected_response_result .score
1196- rejected_response_assessment = rejected_response_result .assessment
1197-
1198- # Swap chosen and rejected responses based on scores if needed
1199- # This ensures the higher-scored response is always the chosen one
1200- if rejected_response_score > chosen_response_score :
1201- # Swap responses
1202- chosen_response , rejected_response = rejected_response , chosen_response
1203- # Swap scores
1204- chosen_response_score , rejected_response_score = rejected_response_score , chosen_response_score
1205- # Swap assessments
1206- chosen_response_assessment , rejected_response_assessment = rejected_response_assessment , chosen_response_assessment
1207- # Swap model IDs
1208- chosen_model_id , rejected_model_id = rejected_model_id , chosen_model_id
1204+ # Get judge scores for rejected response
1205+ rejected_response_result = self ._judge_scoring (
1206+ doc , question , rejected_response , judge_llm
1207+ )
1208+ rejected_response_score = rejected_response_result .score
1209+ rejected_response_assessment = rejected_response_result .assessment
1210+
1211+ # Swap chosen and rejected responses based on scores if needed
1212+ # This ensures the higher-scored response is always the chosen one
1213+ if rejected_response_score > chosen_response_score :
1214+ # Swap responses
1215+ chosen_response , rejected_response = rejected_response , chosen_response
1216+ # Swap scores
1217+ chosen_response_score , rejected_response_score = rejected_response_score , chosen_response_score
1218+ # Swap assessments
1219+ chosen_response_assessment , rejected_response_assessment = rejected_response_assessment , chosen_response_assessment
1220+ # Swap model IDs
1221+ chosen_model_id , rejected_model_id = rejected_model_id , chosen_model_id
1222+ except Exception as e :
1223+ question_preview = question [:100 ] + "..." if len (question ) > 100 else question
1224+ logger .warning (
1225+ f"Failed to score responses with judge for question '{ question_preview } ' | Error: { e } "
1226+ )
1227+ # Continue without judge scores - the row will be created with None values
12091228
12101229 # Create and store the preference row
12111230 row_data = {
0 commit comments