diff --git a/backend/open_webui/models/files.py b/backend/open_webui/models/files.py index f734ea62d..937a11768 100644 --- a/backend/open_webui/models/files.py +++ b/backend/open_webui/models/files.py @@ -257,7 +257,7 @@ class FilesTable: return None def update_file_hash_by_id( - self, id: str, hash: str, db: Optional[Session] = None + self, id: str, hash: Optional[str], db: Optional[Session] = None ) -> Optional[FileModel]: with get_db_context(db) as db: try: diff --git a/backend/open_webui/routers/retrieval.py b/backend/open_webui/routers/retrieval.py index 379cf4da0..246855368 100644 --- a/backend/open_webui/routers/retrieval.py +++ b/backend/open_webui/routers/retrieval.py @@ -1794,6 +1794,8 @@ def process_file( {"status": "failed"}, db=db, ) + # Clear the hash so the file can be re-uploaded after fixing the issue + Files.update_file_hash_by_id(file.id, None, db=db) if "No pandoc was found" in str(e): raise HTTPException( diff --git a/backend/open_webui/utils/middleware.py b/backend/open_webui/utils/middleware.py index 15414aa00..07b5a4b5e 100644 --- a/backend/open_webui/utils/middleware.py +++ b/backend/open_webui/utils/middleware.py @@ -2721,6 +2721,26 @@ async def process_chat_response( "arguments" ] += delta_arguments + # Emit pending tool calls in real-time + if response_tool_calls: + pending_content_blocks = content_blocks + [ + { + "type": "tool_calls", + "content": response_tool_calls, + "pending": True, + } + ] + await event_emitter( + { + "type": "chat:completion", + "data": { + "content": serialize_content_blocks( + pending_content_blocks + ), + }, + } + ) + image_urls = get_image_urls( delta.get("images", []), request, metadata, user )