diff --git a/libs/partners/openai/langchain_openai/chat_models/base.py b/libs/partners/openai/langchain_openai/chat_models/base.py index 90b7c9c8fd577..fcabe5c99a701 100644 --- a/libs/partners/openai/langchain_openai/chat_models/base.py +++ b/libs/partners/openai/langchain_openai/chat_models/base.py @@ -522,6 +522,14 @@ def _create_chat_result( generations = [] if not isinstance(response, dict): response = response.model_dump() + + # Sometimes the AI Model calling will get error, we should raise it. + # Otherwise, the next code 'choices.extend(response["choices"])' + # will throw a "TypeError: 'NoneType' object is not iterable" error + # to mask the true error. Because 'response["choices"]' is None. + if response.get("error"): + raise ValueError(response.get("error")) + for res in response["choices"]: message = _convert_dict_to_message(res["message"]) generation_info = dict(finish_reason=res.get("finish_reason")) diff --git a/libs/partners/openai/langchain_openai/llms/base.py b/libs/partners/openai/langchain_openai/llms/base.py index 59e5faf69c6b8..f5602a816baf9 100644 --- a/libs/partners/openai/langchain_openai/llms/base.py +++ b/libs/partners/openai/langchain_openai/llms/base.py @@ -371,6 +371,13 @@ def _generate( # dict. For the transition period, we deep convert it to dict. response = response.model_dump() + # Sometimes the AI Model calling will get error, we should raise it. + # Otherwise, the next code 'choices.extend(response["choices"])' + # will throw a "TypeError: 'NoneType' object is not iterable" error + # to mask the true error. Because 'response["choices"]' is None. + if response.get("error"): + raise ValueError(response.get("error")) + choices.extend(response["choices"]) _update_token_usage(_keys, response, token_usage) if not system_fingerprint: