Skip to content

Commit 5ffac3d

Browse files
committed
fix(ch06): guard against IndexError on empty LLM choices list
Nine example scripts in chapter 06 access choices[0] without checking whether the API returned any choices. Content-policy filters, token limits, and non-standard responses can all return choices=[]. - aoai-app.py, aoai-history-bot.py, aoai-study-buddy.py: wrap print in `if completion.choices` - oai-app.py, oai-history-bot.py, oai-study-buddy.py: same - githubmodels-app.py: wrap print in `if response.choices` - aoai-app-recipe.py, oai-app-recipe.py: guard both choices accesses and skip the dependent shopping-list call when first response is empty
1 parent 7ea589a commit 5ffac3d

9 files changed

Lines changed: 44 additions & 31 deletions

File tree

06-text-generation-apps/python/aoai-app-recipe.py

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -69,16 +69,19 @@ def validate_text_input(value: str, max_length: int = 500) -> str:
6969

7070
# print response
7171
print("Recipes:")
72-
print(completion.choices[0].message.content)
73-
74-
old_prompt_result = completion.choices[0].message.content
75-
prompt_shopping = "Produce a shopping list, and please don't include ingredients that I already have at home: "
76-
77-
new_prompt = f"Given ingredients at home {ingredients} and these generated recipes: {old_prompt_result}, {prompt_shopping}"
78-
messages = [{"role": "user", "content": new_prompt}]
79-
completion = client.chat.completions.create(model=deployment, messages=messages, max_tokens=600, temperature=0)
80-
81-
# print response
82-
print("\n=====Shopping list ======= \n")
83-
print(completion.choices[0].message.content)
72+
if not completion.choices:
73+
print("No response received.")
74+
else:
75+
old_prompt_result = completion.choices[0].message.content
76+
print(old_prompt_result)
77+
78+
prompt_shopping = "Produce a shopping list, and please don't include ingredients that I already have at home: "
79+
new_prompt = f"Given ingredients at home {ingredients} and these generated recipes: {old_prompt_result}, {prompt_shopping}"
80+
messages = [{"role": "user", "content": new_prompt}]
81+
completion = client.chat.completions.create(model=deployment, messages=messages, max_tokens=600, temperature=0)
82+
83+
# print response
84+
print("\n=====Shopping list ======= \n")
85+
if completion.choices:
86+
print(completion.choices[0].message.content)
8487

06-text-generation-apps/python/aoai-app.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@
2323
completion = client.chat.completions.create(model=deployment, messages=messages)
2424

2525
# print response
26-
print(completion.choices[0].message.content)
26+
if completion.choices:
27+
print(completion.choices[0].message.content)
2728

2829
# very unhappy _____.
2930

06-text-generation-apps/python/aoai-history-bot.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@
2929
completion = client.chat.completions.create(model=deployment, messages=messages, temperature=0)
3030

3131
# print response
32-
print(completion.choices[0].message.content)
32+
if completion.choices:
33+
print(completion.choices[0].message.content)
3334

3435
# very unhappy _____.
3536

06-text-generation-apps/python/aoai-study-buddy.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@
3232
completion = client.chat.completions.create(model=deployment, messages=messages)
3333

3434
# print response
35-
print(completion.choices[0].message.content)
35+
if completion.choices:
36+
print(completion.choices[0].message.content)
3637

3738
# very unhappy _____.
3839

06-text-generation-apps/python/githubmodels-app.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,5 @@
3333
top_p=1.
3434
)
3535

36-
print(response.choices[0].message.content)
36+
if response.choices:
37+
print(response.choices[0].message.content)

06-text-generation-apps/python/oai-app-recipe.py

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,19 @@
2424

2525
# print response
2626
print("Recipes:")
27-
print(completion.choices[0].message.content)
28-
29-
old_prompt_result = completion.choices[0].message.content
30-
prompt_shopping = "Produce a shopping list, and please don't include ingredients that I already have at home: "
31-
32-
new_prompt = f"Given ingredients at home {ingredients} and these generated recipes: {old_prompt_result}, {prompt_shopping}"
33-
messages = [{"role": "user", "content": new_prompt}]
34-
completion = client.chat.completions.create(model=deployment, messages=messages, max_tokens=600, temperature=0)
35-
36-
# print response
37-
print("\n=====Shopping list ======= \n")
38-
print(completion.choices[0].message.content)
27+
if not completion.choices:
28+
print("No response received.")
29+
else:
30+
old_prompt_result = completion.choices[0].message.content
31+
print(old_prompt_result)
32+
33+
prompt_shopping = "Produce a shopping list, and please don't include ingredients that I already have at home: "
34+
new_prompt = f"Given ingredients at home {ingredients} and these generated recipes: {old_prompt_result}, {prompt_shopping}"
35+
messages = [{"role": "user", "content": new_prompt}]
36+
completion = client.chat.completions.create(model=deployment, messages=messages, max_tokens=600, temperature=0)
37+
38+
# print response
39+
print("\n=====Shopping list ======= \n")
40+
if completion.choices:
41+
print(completion.choices[0].message.content)
3942

06-text-generation-apps/python/oai-app.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616
completion = client.chat.completions.create(model=deployment, messages=messages)
1717

1818
# print response
19-
print(completion.choices[0].message.content)
19+
if completion.choices:
20+
print(completion.choices[0].message.content)
2021

2122
# very unhappy _____.
2223

06-text-generation-apps/python/oai-history-bot.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@
2424
completion = client.chat.completions.create(model=deployment, messages=messages, temperature=0)
2525

2626
# print response
27-
print(completion.choices[0].message.content)
27+
if completion.choices:
28+
print(completion.choices[0].message.content)
2829

2930
# very unhappy _____.
3031

06-text-generation-apps/python/oai-study-buddy.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@
2727
completion = client.chat.completions.create(model=deployment, messages=messages)
2828

2929
# print response
30-
print(completion.choices[0].message.content)
30+
if completion.choices:
31+
print(completion.choices[0].message.content)
3132

3233
# very unhappy _____.
3334

0 commit comments

Comments
 (0)