Skip to content

Commit ae0cbf9

Browse files
committed
Add checks for empty completions in sampling methods
Added explicit checks to ensure that valid completions are generated in both best_of_n_sampling and mixture_of_agents functions. If no completions are available, the functions now raise exceptions or return error messages, improving robustness against provider failures.
1 parent 6c57d8b commit ae0cbf9

File tree

2 files changed

+23
-5
lines changed

2 files changed

+23
-5
lines changed

optillm/bon.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,11 @@ def best_of_n_sampling(system_prompt: str, initial_query: str, client, model: st
3535
completions = [choice.message.content for choice in response.choices if choice.message.content is not None]
3636
logger.info(f"Generated {len(completions)} initial completions using n parameter. Tokens used: {response.usage.completion_tokens}")
3737
bon_completion_tokens += response.usage.completion_tokens
38-
38+
39+
# Check if any valid completions were generated
40+
if not completions:
41+
raise Exception("No valid completions generated (all were None)")
42+
3943
except Exception as e:
4044
logger.warning(f"n parameter not supported by provider: {str(e)}")
4145
logger.info(f"Falling back to generating {n} completions one by one")
@@ -77,11 +81,16 @@ def best_of_n_sampling(system_prompt: str, initial_query: str, client, model: st
7781
return "Error: Could not generate any completions", 0
7882

7983
logger.info(f"Generated {len(completions)} completions using fallback method. Total tokens used: {bon_completion_tokens}")
80-
84+
85+
# Double-check we have completions before rating
86+
if not completions:
87+
logger.error("No completions available for rating")
88+
return "Error: Could not generate any completions", bon_completion_tokens
89+
8190
# Rate the completions
8291
rating_messages = messages.copy()
8392
rating_messages.append({"role": "system", "content": "Rate the following responses on a scale from 0 to 10, where 0 is poor and 10 is excellent. Consider factors such as relevance, coherence, and helpfulness. Respond with only a number."})
84-
93+
8594
ratings = []
8695
for completion in completions:
8796
rating_messages.append({"role": "assistant", "content": completion})

optillm/moa.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,11 @@ def mixture_of_agents(system_prompt: str, initial_query: str, client, model: str
4040
completions = [choice.message.content for choice in response.choices if choice.message.content is not None]
4141
moa_completion_tokens += response.usage.completion_tokens
4242
logger.info(f"Generated {len(completions)} initial completions using n parameter. Tokens used: {response.usage.completion_tokens}")
43-
43+
44+
# Check if any valid completions were generated
45+
if not completions:
46+
raise Exception("No valid completions generated (all were None)")
47+
4448
except Exception as e:
4549
logger.warning(f"n parameter not supported by provider: {str(e)}")
4650
logger.info("Falling back to generating 3 completions one by one")
@@ -89,7 +93,12 @@ def mixture_of_agents(system_prompt: str, initial_query: str, client, model: str
8993
return "Error: Could not generate any completions", 0
9094

9195
logger.info(f"Generated {len(completions)} completions using fallback method. Total tokens used: {moa_completion_tokens}")
92-
96+
97+
# Double-check we have at least one completion
98+
if not completions:
99+
logger.error("No completions available for processing")
100+
return "Error: Could not generate any completions", moa_completion_tokens
101+
93102
# Handle case where fewer than 3 completions were generated
94103
if len(completions) < 3:
95104
original_count = len(completions)

0 commit comments

Comments
 (0)