diff --git a/backend/open_webui/utils/middleware.py b/backend/open_webui/utils/middleware.py index 754b90c0c0..5407085707 100644 --- a/backend/open_webui/utils/middleware.py +++ b/backend/open_webui/utils/middleware.py @@ -933,6 +933,9 @@ def handle_responses_streaming_event( error = data.get('response', {}).get('error', {}) return current_output, {'error': error} + elif event_type == 'error': + return current_output, {'error': data} + else: return current_output, None @@ -5113,8 +5116,8 @@ async def streaming_chat_response_handler(response, ctx): 'data': data, } ) - # Check for Responses API events (type field starts with "response.") - elif data.get('type', '').startswith('response.'): + # Check for Responses API events + elif data.get('type', '').startswith('response.') or data.get('type', '') == 'error': response_data_type = data.get('type', '') response_data_is_delta = response_data_type.endswith('.delta') output, response_metadata = handle_responses_streaming_event(data, output) @@ -5173,6 +5176,20 @@ async def streaming_chat_response_handler(response, ctx): response_metadata['usage'] = usage if response_metadata.get('error'): + log.error( + 'Provider returned error (streaming): %s', response_metadata['error'] + ) + if save_to_chat: + try: + await Chats.upsert_message_to_chat_by_id_and_message_id( + metadata['chat_id'], + metadata['message_id'], + { + 'error': {'content': response_metadata['error']}, + }, + ) + except Exception: + pass await event_emitter( { 'type': 'chat:completion',