This commit is contained in:
Tim Baek
2026-02-08 06:22:56 +04:00
parent 59b98ab730
commit 4852227158
8 changed files with 119 additions and 8 deletions

View File

@@ -1804,6 +1804,16 @@ async def chat_completion(
except Exception as e:
log.debug(f"Error cleaning up: {e}")
pass
# Emit chat:active=false when task completes
try:
if metadata.get("chat_id"):
event_emitter = get_event_emitter(metadata, update_db=False)
if event_emitter:
await event_emitter(
{"type": "chat:active", "data": {"active": False}}
)
except Exception as e:
log.debug(f"Error emitting chat:active: {e}")
if (
metadata.get("session_id")
@@ -1816,6 +1826,12 @@ async def chat_completion(
process_chat(request, form_data, user, metadata, model),
id=metadata["chat_id"],
)
# Emit chat:active=true when task starts
event_emitter = get_event_emitter(metadata, update_db=False)
if event_emitter:
await event_emitter(
{"type": "chat:active", "data": {"active": True}}
)
return {"status": True, "task_id": task_id}
else:
return await process_chat(request, form_data, user, metadata, model)

View File

@@ -49,6 +49,21 @@ router = APIRouter()
##################################
class ActiveChatsForm(BaseModel):
chat_ids: list[str]
@router.post("/active/chats")
async def check_active_chats(
request: Request, form_data: ActiveChatsForm, user=Depends(get_verified_user)
):
"""Check which chat IDs have active tasks."""
from open_webui.tasks import get_active_chat_ids
active = await get_active_chat_ids(request.app.state.redis, form_data.chat_ids)
return {"active_chat_ids": active}
@router.get("/config")
async def get_task_config(request: Request, user=Depends(get_verified_user)):
return {

View File

@@ -183,3 +183,18 @@ async def stop_item_tasks(redis: Redis, item_id: str):
return result # Return the first failure
return {"status": True, "message": f"All tasks for item {item_id} stopped."}
async def has_active_tasks(redis, chat_id: str) -> bool:
"""Check if a chat has any active tasks."""
task_ids = await list_task_ids_by_item_id(redis, chat_id)
return len(task_ids) > 0
async def get_active_chat_ids(redis, chat_ids: List[str]) -> List[str]:
"""Filter a list of chat_ids to only those with active tasks."""
active = []
for chat_id in chat_ids:
if await has_active_tasks(redis, chat_id):
active.append(chat_id)
return active