fix: prevent infinite loop in extract_toc_content

The while loop exit condition used len(chat_history), but chat_history
was rebuilt every iteration with exactly 2 elements, making the check
len(chat_history) > 5 never true.

Replace with explicit attempt counter and max_attempts limit.
This commit is contained in:
luojiyin 2026-01-19 12:34:39 +08:00
parent 823c11e642
commit ac9ceaf2ee
No known key found for this signature in database
GPG key ID: 9F5399380CCFD0B3

View file

@ -180,19 +180,22 @@ def extract_toc_content(content, model=None):
response = response + new_response
if_complete = check_if_toc_transformation_is_complete(content, response, model)
attempt = 0
max_attempts = 5
while not (if_complete == "yes" and finish_reason == "finished"):
attempt += 1
if attempt > max_attempts:
raise Exception('Failed to complete table of contents after maximum retries')
chat_history = [
{"role": "user", "content": prompt},
{"role": "assistant", "content": response},
{"role": "user", "content": prompt},
{"role": "assistant", "content": response},
]
prompt = f"""please continue the generation of table of contents , directly output the remaining part of the structure"""
new_response, finish_reason = ChatGPT_API_with_finish_reason(model=model, prompt=prompt, chat_history=chat_history)
response = response + new_response
if_complete = check_if_toc_transformation_is_complete(content, response, model)
# Optional: Add a maximum retry limit to prevent infinite loops
if len(chat_history) > 5: # Arbitrary limit of 10 attempts
raise Exception('Failed to complete table of contents after maximum retries')
return response