diff --git a/wolai-backend/.data/openai-agents-sessions.sqlite3 b/wolai-backend/.data/openai-agents-sessions.sqlite3 deleted file mode 100644 index d3e4bb84..00000000 Binary files a/wolai-backend/.data/openai-agents-sessions.sqlite3 and /dev/null differ diff --git a/wolai-backend/README.md b/wolai-backend/README.md index 9ac33ace..22a3d85e 100644 --- a/wolai-backend/README.md +++ b/wolai-backend/README.md @@ -1,10 +1,12 @@ -# wolai-backend(stage0 骨架) +# wolai-backend -本目录是 design3.0 指南下的 FastAPI + Celery 阶段 0 脚手架。当前目标: +本目录现在只保留轻量 FastAPI 辅助后端。OpenAI Agents 文档代理、Celery/Redis 队列和旧 OCR 占位链路已退役到仓库 `recycle/`,当前 AI 主链统一走 Hermes / Reasonix。 -1. 暴露健康检查与占位 API(`/api/v1/tasks/ocr`、`/api/v1/chat`),供前端联调。 -2. 预留 Celery 队列、LightRAG、MinerU 集成点,但将重计算逻辑延后到阶段 1。 -3. 依赖全部维护在 `requirements.txt`,其中 LightRAG 与 MinerU 通过本地源码安装,使用项目根目录已经下载好的仓库。 +当前保留: + +1. 健康检查:`GET /health` +2. CORS 配置:读取仓库根目录 `.env.all` 与环境变量 +3. 依赖列表:`requirements.txt` ## 环境初始化 @@ -18,7 +20,7 @@ python -m venv venv # set ALL_PROXY= # set NO_PROXY=* -# 安装 PyPI 依赖 + 本地 LightRAG (项目根目录已放置源码) +# 安装 PyPI 依赖 pip install -r requirements.txt ``` @@ -29,31 +31,13 @@ pip install -r requirements.txt ```powershell # FastAPI uvicorn app.main:app --reload --port 8000 - -# Celery worker(后续阶段会真正处理 MinerU / LightRAG 作业) -celery -A app.workers.celery_app worker --loglevel=info ``` ## 目录速览 ``` app/ -├── config.py # Pydantic 设置,统一读取 .env -├── deps.py # Supabase JWT / 客户端依赖 +├── config.py # Pydantic 设置,统一读取仓库根目录 .env.all ├── routers/ │ ├── health.py # GET /health -│ ├── tasks.py # POST /api/v1/tasks/ocr、GET /api/v1/tasks/{id} -│ └── chat.py # GET /api/v1/chat(SSE 占位) -├── schemas/ # Pydantic 请求/响应模型 -├── services/ # LightRAG、MinerU、Storage 等服务占位 -└── workers/ - ├── celery_app.py # Celery 配置 - └── tasks.py # 后台任务入口(当前返回占位日志) ``` - -阶段 0 完成后,stage1 将在此基础上补充: - -- MinerU OCR 实装(下载 Supabase Storage 文件 → 解析 → 更新 `documents`) -- LightRAG 的增量索引 / 查询 -- SSE 流式回答 + 来源引用 -- Redis/APScheduler 任务状态回传 diff --git a/wolai-backend/app/config.py b/wolai-backend/app/config.py index ceceb97d..bd9d7209 100644 --- a/wolai-backend/app/config.py +++ b/wolai-backend/app/config.py @@ -15,21 +15,10 @@ class Settings(BaseSettings): env_file=str(ENV_ALL_PATH), env_file_encoding="utf-8", extra="ignore" ) - # 说明:项目迁移到 Convex 的过程中,后端可能暂时不依赖 Supabase。 - # 因此这里给出空字符串默认值,避免本地未配置 .env 时无法启动开发服务器。 - supabase_url: str = "" - supabase_service_role_key: str = "" - redis_url: str = "redis://localhost:6379/0" frontend_url: str = "http://localhost:3000" - openai_api_key: str = "" - mnote_ai_default_model: str = "" - mnote_ai_orchestrator_api_key: str = "" - openai_agents_session_db_path: str = "" - lightrag_db_url: str = "" - lightrag_collection: str = "wolai-docs" - - -@lru_cache + + +@lru_cache def get_settings() -> Settings: """惰性实例化设置,避免重复读取文件。""" return Settings() diff --git a/wolai-backend/app/deps.py b/wolai-backend/app/deps.py deleted file mode 100644 index f4e7ee11..00000000 --- a/wolai-backend/app/deps.py +++ /dev/null @@ -1,58 +0,0 @@ -from __future__ import annotations - -from dataclasses import dataclass - -from typing import Optional - -try: # Python 3.9+ - from typing import Annotated # type: ignore[attr-defined] -except ImportError: # Python 3.8 fallback - from typing_extensions import Annotated - -import httpx -from fastapi import Depends, Header, HTTPException, status - -from app.config import settings - - -@dataclass -class AuthContext: - user_id: str - access_token: str - - -async def get_current_user( - authorization: Annotated[Optional[str], Header(convert_underscores=False)] = None, -) -> AuthContext: - """ - 验证 Supabase JWT,stage0 直接依赖 service_role 解析 token。 - 生产环境应通过 API Gateway 注入 user。 - """ - if not authorization or not authorization.startswith("Bearer "): - raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Missing bearer token") - - token = authorization.replace("Bearer ", "", 1).strip() - if not token: - raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Empty token") - - auth_url = f"{settings.supabase_url.rstrip('/')}/auth/v1/user" - headers = { - "Authorization": f"Bearer {token}", - "apikey": settings.supabase_service_role_key, - } - async with httpx.AsyncClient(timeout=10.0) as client: - try: - response = await client.get(auth_url, headers=headers) - response.raise_for_status() - except httpx.HTTPError as exc: # pragma: no cover - 网络异常 - raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid Supabase token") from exc - - data = response.json() - user_id = data.get("id") or data.get("user", {}).get("id") - if not user_id: - raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid Supabase token") - - return AuthContext(user_id=str(user_id), access_token=token) - - -AuthDep = Annotated[AuthContext, Depends(get_current_user)] diff --git a/wolai-backend/app/routers/__init__.py b/wolai-backend/app/routers/__init__.py index 883e310f..b4a756a5 100644 --- a/wolai-backend/app/routers/__init__.py +++ b/wolai-backend/app/routers/__init__.py @@ -1,12 +1,8 @@ -from fastapi import APIRouter - -from . import ai_agent, chat, health, luckysheet_ws, tasks +from fastapi import APIRouter + +from . import health api_router = APIRouter(prefix="/api/v1") -api_router.include_router(tasks.router, tags=["tasks"]) -api_router.include_router(chat.router, tags=["chat"]) -api_router.include_router(ai_agent.router, tags=["ai-agent"]) - -root_router = APIRouter() -root_router.include_router(health.router, tags=["health"]) -root_router.include_router(luckysheet_ws.router) + +root_router = APIRouter() +root_router.include_router(health.router, tags=["health"]) diff --git a/wolai-backend/app/routers/ai_agent.py b/wolai-backend/app/routers/ai_agent.py deleted file mode 100644 index 3e971452..00000000 --- a/wolai-backend/app/routers/ai_agent.py +++ /dev/null @@ -1,64 +0,0 @@ -from __future__ import annotations - -from typing import Annotated - -from fastapi import APIRouter, Depends, Header, HTTPException, Request, status -from fastapi.responses import JSONResponse, StreamingResponse - -from app.config import settings -from app.services.ai_document_agent import ( - DocumentAiRunRequest, - build_document_ai_config_payload, - has_configured_openai_api_key, - run_document_agent_stream, - sdk_available, -) - -router = APIRouter(prefix="/ai-agent") - - -def verify_internal_key( - x_mnote_ai_key: Annotated[str | None, Header()] = None, -) -> None: - expected = settings.mnote_ai_orchestrator_api_key.strip() - if not expected: - return - if x_mnote_ai_key == expected: - return - raise HTTPException( - status_code=status.HTTP_401_UNAUTHORIZED, - detail="Invalid orchestrator key", - ) - - -@router.get("/health") -async def health() -> JSONResponse: - return JSONResponse( - { - "ok": True, - "bridge": "openai_agents_python", - "sdkAvailable": sdk_available(), - "openaiConfigured": has_configured_openai_api_key(), - "bridgeRuntimeMode": "local_runtime", - } - ) - - -@router.post("/document/run") -async def run_document( - request: Request, - payload: DocumentAiRunRequest, - _: None = Depends(verify_internal_key), -) -> StreamingResponse: - stream = run_document_agent_stream( - payload, - source_headers={key.lower(): value for key, value in request.headers.items()}, - ) - return StreamingResponse(stream, media_type="text/event-stream") - - -@router.get("/document/config") -async def get_document_config( - _: None = Depends(verify_internal_key), -) -> JSONResponse: - return JSONResponse(build_document_ai_config_payload()) diff --git a/wolai-backend/app/routers/chat.py b/wolai-backend/app/routers/chat.py deleted file mode 100644 index 07f79112..00000000 --- a/wolai-backend/app/routers/chat.py +++ /dev/null @@ -1,26 +0,0 @@ -import asyncio -from fastapi import APIRouter -from fastapi.responses import StreamingResponse - -from app.deps import AuthDep -from app.services.lightrag_service import lightrag_service - -router = APIRouter(prefix="/chat") - - -@router.get("") -async def chat(query: str, document_id: str, auth: AuthDep) -> StreamingResponse: # noqa: ARG001 - """ - SSE 流式占位。后续会调用 LightRAG + OpenAI。 - 当前直接返回 mock 文字,确保前端链路可用。 - """ - - async def event_stream() -> asyncio.AsyncGenerator[str, None]: - reply = await lightrag_service.query(query_text=query, user_id="placeholder-user") - chunks = [reply[: len(reply) // 2 or 1], reply[len(reply) // 2 or 1 :]] - for chunk in chunks: - yield f"data: {chunk}\n\n" - await asyncio.sleep(0.1) - yield "data: [DONE]\n\n" - - return StreamingResponse(event_stream(), media_type="text/event-stream") diff --git a/wolai-backend/app/routers/luckysheet_ws.py b/wolai-backend/app/routers/luckysheet_ws.py deleted file mode 100644 index 8dabe1da..00000000 --- a/wolai-backend/app/routers/luckysheet_ws.py +++ /dev/null @@ -1,195 +0,0 @@ -from __future__ import annotations - -import asyncio -import json -import logging -import urllib.parse -import zlib -from dataclasses import dataclass -from typing import Dict, List, Optional - -import httpx -from fastapi import APIRouter, WebSocket, WebSocketDisconnect, status -from starlette.concurrency import run_in_threadpool - -from app.config import settings -from app.services.supabase_rest import supabase_rest - -logger = logging.getLogger(__name__) - -router = APIRouter(prefix="/ws", tags=["luckysheet"]) - - -@dataclass -class LuckysheetClient: - websocket: WebSocket - user_id: str - username: str - - -class LuckysheetConnectionManager: - def __init__(self) -> None: - self._clients: Dict[str, List[LuckysheetClient]] = {} - self._lock = asyncio.Lock() - - async def add(self, grid_key: str, client: LuckysheetClient) -> None: - async with self._lock: - self._clients.setdefault(grid_key, []).append(client) - logger.debug("Luckysheet client %s joined grid %s", client.user_id, grid_key) - - async def remove(self, grid_key: str, websocket: WebSocket) -> None: - async with self._lock: - clients = self._clients.get(grid_key) - if not clients: - return - self._clients[grid_key] = [client for client in clients if client.websocket is not websocket] - if not self._clients[grid_key]: - self._clients.pop(grid_key, None) - logger.debug("Luckysheet connection removed from grid %s", grid_key) - - async def broadcast_payload( - self, - grid_key: str, - sender: LuckysheetClient, - payload: str, - event_type: int, - ) -> None: - clients = self._clients.get(grid_key, []) - if not clients: - return - message = json.dumps( - { - "data": payload, - "id": sender.user_id, - "username": sender.username, - "type": event_type, - }, - ensure_ascii=False, - ) - for client in clients: - if client.websocket is sender.websocket: - continue - try: - await client.websocket.send_text(message) - except Exception as exc: - logger.warning("Failed to forward message to %s: %s", client.user_id, exc) - - async def broadcast_exit(self, grid_key: str, user_id: str) -> None: - clients = self._clients.get(grid_key, []) - if not clients: - return - message = json.dumps({"message": "用户退出", "id": user_id}, ensure_ascii=False) - for client in clients: - try: - await client.websocket.send_text(message) - except Exception as exc: - logger.warning("Failed to notify client exit: %s", exc) - - -manager = LuckysheetConnectionManager() - - -def _decode_ws_payload(raw_message: str) -> Optional[dict]: - try: - compressed = raw_message.encode("latin1") - inflated = zlib.decompress(compressed) - decoded = urllib.parse.unquote(inflated.decode("utf-8")) - return json.loads(decoded) - except Exception as exc: - logger.debug("Failed to decode luckysheet payload: %s", exc) - return None - - -async def _fetch_supabase_user(access_token: str) -> Optional[dict]: - base_url = settings.supabase_url.rstrip("/") - headers = { - "apikey": settings.supabase_service_role_key, - "Authorization": f"Bearer {access_token}", - } - try: - async with httpx.AsyncClient(timeout=5.0) as client: - response = await client.get(f"{base_url}/auth/v1/user", headers=headers) - response.raise_for_status() - return response.json() - except httpx.HTTPError as exc: - logger.warning("Supabase auth verification failed: %s", exc) - return None - - -async def _fetch_table_by_grid_key(grid_key: str) -> Optional[dict]: - try: - return await run_in_threadpool(lambda: supabase_rest.select_one("document_tables", {"grid_key": grid_key})) - except Exception as exc: - logger.error("Failed to query document_tables: %s", exc) - return None - - -async def _is_workspace_member(workspace_id: str, user_id: str) -> bool: - try: - result = await run_in_threadpool( - lambda: supabase_rest.select_one("workspace_members", {"workspace_id": workspace_id, "user_id": user_id}), - ) - return bool(result) - except Exception as exc: - logger.error("Failed to verify workspace membership: %s", exc) - return False - - -@router.websocket("/luckysheet") -async def luckysheet_collaboration(websocket: WebSocket) -> None: - params = websocket.query_params - grid_key = params.get("gridKey") - token = params.get("token") - raw_user_id = params.get("userid") or params.get("userId") - requested_type = params.get("type") or "luckysheet" - username = params.get("username") or "" - - if requested_type != "luckysheet" or not grid_key or not token or not raw_user_id: - await websocket.close(code=status.WS_1008_POLICY_VIOLATION, reason="缺少协同参数") - return - - supabase_user = await _fetch_supabase_user(token) - if not supabase_user or supabase_user.get("id") != raw_user_id: - await websocket.close(code=status.WS_1008_POLICY_VIOLATION, reason="身份验证失败") - return - - table_row = await _fetch_table_by_grid_key(grid_key) - if not table_row or not table_row.get("workspace_id"): - await websocket.close(code=status.WS_1008_POLICY_VIOLATION, reason="gridKey 无效") - return - - workspace_id = table_row["workspace_id"] - if not await _is_workspace_member(workspace_id, raw_user_id): - await websocket.close(code=status.WS_1008_POLICY_VIOLATION, reason="无权访问该表格") - return - - fallback_name = ( - username - or supabase_user.get("user_metadata", {}).get("full_name") - or supabase_user.get("email") - or f"用户-{raw_user_id[:6]}" - ) - client = LuckysheetClient(websocket=websocket, user_id=raw_user_id, username=fallback_name) - - await websocket.accept() - await manager.add(grid_key, client) - logger.info("Luckysheet client %s connected to %s", raw_user_id, grid_key) - - try: - while True: - message = await websocket.receive_text() - if message == "rub": - continue - decoded = _decode_ws_payload(message) - if not decoded: - continue - op_type = decoded.get("t") - event_type = 3 if op_type == "mv" else 2 - await manager.broadcast_payload(grid_key, client, message, event_type) - except WebSocketDisconnect: - logger.info("Luckysheet client %s disconnected", raw_user_id) - except Exception as exc: - logger.error("Luckysheet websocket error: %s", exc) - finally: - await manager.remove(grid_key, websocket) - await manager.broadcast_exit(grid_key, raw_user_id) diff --git a/wolai-backend/app/routers/tasks.py b/wolai-backend/app/routers/tasks.py deleted file mode 100644 index b11bea46..00000000 --- a/wolai-backend/app/routers/tasks.py +++ /dev/null @@ -1,29 +0,0 @@ -from fastapi import APIRouter, HTTPException, status - -from app.deps import AuthDep -from app.schemas.tasks import OcrTaskRequest, TaskStatusResponse -from app.services.task_tracker import task_tracker -from app.workers.tasks import ocr_pipeline - -router = APIRouter(prefix="/tasks") - - -@router.post("/ocr", response_model=TaskStatusResponse) -async def enqueue_ocr_task(payload: OcrTaskRequest, auth: AuthDep) -> TaskStatusResponse: - """记录任务并投递 Celery,阶段 0 返回占位任务。""" - task = task_tracker.create_task(user_id=auth.user_id, document_id=payload.document_id, task_type="ocr") - ocr_pipeline.delay( - task_id=task.task_id, - document_id=payload.document_id, - file_url=str(payload.file_url), - user_id=auth.user_id, - ) - return task - - -@router.get("/{task_id}", response_model=TaskStatusResponse) -async def get_task_status(task_id: str, auth: AuthDep) -> TaskStatusResponse: - task = task_tracker.get_task(task_id=task_id, user_id=auth.user_id) - if not task: - raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Task not found") - return task diff --git a/wolai-backend/app/schemas/tasks.py b/wolai-backend/app/schemas/tasks.py deleted file mode 100644 index 969b26a5..00000000 --- a/wolai-backend/app/schemas/tasks.py +++ /dev/null @@ -1,17 +0,0 @@ -from __future__ import annotations - -from typing import Literal, Optional - -from pydantic import AnyHttpUrl, BaseModel - - -class OcrTaskRequest(BaseModel): - document_id: str - file_url: AnyHttpUrl - - -class TaskStatusResponse(BaseModel): - task_id: str - status: Literal["pending", "processing", "completed", "failed"] - progress: int = 0 - message: Optional[str] = None diff --git a/wolai-backend/app/services/ai_document_agent.py b/wolai-backend/app/services/ai_document_agent.py deleted file mode 100644 index 40abc6a7..00000000 --- a/wolai-backend/app/services/ai_document_agent.py +++ /dev/null @@ -1,1619 +0,0 @@ -from __future__ import annotations - -import asyncio -import contextlib -import json -import os -import time -from collections import deque -from dataclasses import dataclass, field -from functools import lru_cache -from pathlib import Path -from urllib.parse import urlsplit, urlunsplit -from typing import Any, AsyncGenerator, Callable, Literal, Mapping -from uuid import uuid4 - -import httpx -from pydantic import BaseModel, Field - -from app.config import settings - -try: - from agents import ( - Agent, - ItemHelpers, - ModelResponse, - MultiProvider, - OpenAIProvider, - OpenAIResponsesModel, - RunConfig, - RunContextWrapper, - Runner, - SQLiteSession, - Usage, - function_tool, - trace, - ) - from agents.models.interface import ModelProvider - from agents.models.multi_provider import MultiProviderMap - from agents.models.openai_responses import Converter as ResponsesConverter - from agents.util._json import _to_dump_compatible -except ImportError: # pragma: no cover - 依赖缺失时走降级分支 - Agent = None - ItemHelpers = None - ModelResponse = None - MultiProvider = None - OpenAIProvider = None - OpenAIResponsesModel = None - RunConfig = None - RunContextWrapper = Any - Runner = None - SQLiteSession = None - Usage = None - function_tool = None - trace = None - MultiProviderMap = None - ModelProvider = object - ResponsesConverter = None - _to_dump_compatible = None - - -def sdk_available() -> bool: - return all( - dependency is not None - for dependency in ( - Agent, - ModelResponse, - OpenAIProvider, - OpenAIResponsesModel, - ResponsesConverter, - RunConfig, - Runner, - SQLiteSession, - Usage, - function_tool, - trace, - ) - ) - - -def has_configured_openai_api_key() -> bool: - value = get_effective_openai_api_key() - if not value: - return False - return "please-set-your-key" not in value - - -def _is_placeholder_openai_key(value: str | None) -> bool: - return "please-set-your-key" in str(value or "").strip() - - -@lru_cache(maxsize=1) -def load_codex_auth_openai_key() -> str: - auth_path = Path.home() / ".codex" / "auth.json" - try: - payload = json.loads(auth_path.read_text("utf-8")) - except Exception: - return "" - value = str(payload.get("OPENAI_API_KEY", "")).strip() if isinstance(payload, dict) else "" - if not value or _is_placeholder_openai_key(value): - return "" - return value - - -def get_effective_openai_api_key(env: Mapping[str, str] | None = None) -> str: - env_map = env if env is not None else os.environ - env_value = str(env_map.get("OPENAI_API_KEY", "")).strip() - settings_value = settings.openai_api_key.strip() - auth_value = load_codex_auth_openai_key() - - if env_value and not _is_placeholder_openai_key(env_value): - return env_value - if settings_value and not _is_placeholder_openai_key(settings_value): - return settings_value - if auth_value and not _is_placeholder_openai_key(auth_value): - return auth_value - return env_value or settings_value or auth_value - - -@lru_cache(maxsize=8) -def load_available_openai_models( - base_url: str, - api_key: str, -) -> tuple[str, ...]: - normalized_base_url = base_url.rstrip("/") - if not normalized_base_url or not api_key.strip(): - return () - - try: - with httpx.Client(timeout=10.0) as client: - response = client.get( - f"{normalized_base_url}/models", - headers={"Authorization": f"Bearer {api_key.strip()}"}, - ) - response.raise_for_status() - payload = response.json() - except Exception: - return () - - data = payload.get("data") if isinstance(payload, dict) else None - if not isinstance(data, list): - return () - - ids: list[str] = [] - for item in data: - if not isinstance(item, dict): - continue - model_id = item.get("id") - if isinstance(model_id, str) and model_id.strip(): - ids.append(model_id.strip()) - return tuple(ids) - - -@dataclass(frozen=True) -class DocumentAiModelSpec: - key: str - title: str - description: str - gateway_model: str - resolved_combo: str | None = None - resolved_runtime_model: str | None = None - status: str = "active" - is_default: bool = False - - -@dataclass(frozen=True) -class DocumentAiProfileSpec: - id: str - title: str - description: str - instructions: str - session_mode: Literal["off", "page", "workspace"] = "page" - tool_names: tuple[str, ...] = () - is_default: bool = False - status: str = "active" - - -@dataclass(frozen=True) -class DocumentAiToolSpec: - name: str - title: str - description: str - scope: Literal["document", "tree", "workspace"] = "document" - mode: Literal["read", "write"] = "read" - status: str = "active" - version: str = "v1" - - -DEFAULT_OMNIROUTE_BASE_URL = "http://localhost:20128/v1" - - -DOCUMENT_AI_MODEL_SPECS: tuple[DocumentAiModelSpec, ...] = ( - DocumentAiModelSpec( - key="gpt-5.4", - title="GPT-5.4", - description="文档页默认主写模型键,经由 OmniRoute 二次路由。", - gateway_model="gpt-5.4", - resolved_combo="slow", - resolved_runtime_model="gpt-5.4", - is_default=True, - ), - DocumentAiModelSpec( - key="gpt-5.4-mini", - title="GPT-5.4 Mini", - description="更偏快响应的轻量模型键,经由 OmniRoute 二次路由。", - gateway_model="gpt-5.4-mini", - resolved_runtime_model="gpt-5.4-mini", - ), - DocumentAiModelSpec( - key="gpt-5.3-codex", - title="GPT-5.3 Codex", - description="偏代码与结构化执行的模型键,经由 OmniRoute 二次路由。", - gateway_model="gpt-5.3-codex", - resolved_combo="codex", - resolved_runtime_model="gpt-5.3-codex", - ), - DocumentAiModelSpec( - key="gemini-3.1-pro-preview", - title="Gemini 3.1 Pro Preview", - description="偏长上下文与深推理的模型键,经由 OmniRoute 二次路由。", - gateway_model="gemini-3.1-pro-preview", - resolved_runtime_model="gemini-3.1-pro-preview", - ), - DocumentAiModelSpec( - key="third", - title="Third", - description="第三路由保底模型键,经由 OmniRoute combo 直通。", - gateway_model="third", - resolved_combo="third", - resolved_runtime_model="third", - ), -) - - -DOCUMENT_AI_TOOL_SPECS: tuple[DocumentAiToolSpec, ...] = ( - DocumentAiToolSpec( - name="doc_get", - title="读取当前页摘要", - description="读取当前页块摘要,适合先理解页面结构。", - mode="read", - ), - DocumentAiToolSpec( - name="doc_find", - title="按块查找", - description="按文本查找当前页块,适合定位待改写内容。", - mode="read", - ), - DocumentAiToolSpec( - name="doc_insert_blocks", - title="插入块", - description="向当前页插入新块,适合新增标题和段落。", - mode="write", - ), - DocumentAiToolSpec( - name="doc_replace_range", - title="改写块文本", - description="改写当前页指定块文本。", - mode="write", - ), - DocumentAiToolSpec( - name="slash_run", - title="斜杠命令", - description="执行当前页允许的斜杠命令;当前仅限重命名当前页。", - mode="write", - ), -) - - -DOCUMENT_AI_PROFILE_SPECS: tuple[DocumentAiProfileSpec, ...] = ( - DocumentAiProfileSpec( - id="page_writer_ai_first", - title="AI 主写", - description="AI 优先直接进入主编辑区起草,人负责审核和继续编辑。", - instructions=( - "当前 profile:AI 优先直接进入主编辑区起草,人负责审核和继续编辑。" - " 如果用户目标明确,优先输出可直接落入当前页的修改结果,而不是长篇空谈。" - ), - tool_names=tuple(spec.name for spec in DOCUMENT_AI_TOOL_SPECS), - is_default=True, - ), - DocumentAiProfileSpec( - id="page_writer_strict", - title="严格审慎", - description="更保守地读取、定位、改写,优先减少误写。", - instructions=( - "当前 profile:严格审慎。写入前优先读取和定位目标块;若信息不足,先解释缺口,不要冒进写入。" - ), - tool_names=tuple(spec.name for spec in DOCUMENT_AI_TOOL_SPECS), - ), - DocumentAiProfileSpec( - id="page_writer_polish", - title="润色整理", - description="更偏改写、收敛、结构整理,不主动扩写超出当前页语境的内容。", - instructions=( - "当前 profile:润色整理。优先压缩、润色、重组当前页已有内容,不主动扩写超出当前页证据范围的新事实。" - ), - tool_names=tuple(spec.name for spec in DOCUMENT_AI_TOOL_SPECS), - ), -) - - -def _document_ai_model_spec_by_key(model_key: str | None) -> DocumentAiModelSpec | None: - value = str(model_key or "").strip() - if not value: - return None - return next((spec for spec in DOCUMENT_AI_MODEL_SPECS if spec.key == value), None) - - -def _document_ai_model_spec_by_gateway_model(gateway_model: str | None) -> DocumentAiModelSpec | None: - value = str(gateway_model or "").strip() - if not value: - return None - return next((spec for spec in DOCUMENT_AI_MODEL_SPECS if spec.gateway_model == value), None) - - -def _resolve_default_document_ai_model_key( - env: Mapping[str, str] | None = None, -) -> str: - env_map = env if env is not None else os.environ - for value in _iter_candidate_model_names( - request_model=None, - configured_default_model=settings.mnote_ai_default_model, - env=env_map, - ): - spec = _document_ai_model_spec_by_key(value) or _document_ai_model_spec_by_gateway_model(value) - if spec is not None: - return spec.key - default_spec = next((spec for spec in DOCUMENT_AI_MODEL_SPECS if spec.is_default), DOCUMENT_AI_MODEL_SPECS[0]) - return default_spec.key - - -def _resolve_default_document_ai_profile_id() -> str: - default_spec = next((spec for spec in DOCUMENT_AI_PROFILE_SPECS if spec.is_default), DOCUMENT_AI_PROFILE_SPECS[0]) - return default_spec.id - - -def resolve_document_ai_profile(profile_id: str | None) -> DocumentAiProfileSpec: - value = str(profile_id or "").strip() - if value: - picked = next((spec for spec in DOCUMENT_AI_PROFILE_SPECS if spec.id == value), None) - if picked is not None: - return picked - default_id = _resolve_default_document_ai_profile_id() - return next(spec for spec in DOCUMENT_AI_PROFILE_SPECS if spec.id == default_id) - - -def build_document_ai_config_payload( - env: Mapping[str, str] | None = None, -) -> dict[str, Any]: - env_map = env if env is not None else os.environ - default_model_key = _resolve_default_document_ai_model_key(env_map) - default_profile_id = _resolve_default_document_ai_profile_id() - raw_base_url = str(env_map.get("OPENAI_BASE_URL", "")).strip() or DEFAULT_OMNIROUTE_BASE_URL - return { - "provider": "online", - "transport": "openai_responses", - "baseUrl": normalize_loopback_base_url(raw_base_url), - "sessionEnabled": True, - "defaultModelKey": default_model_key, - "defaultProfileId": default_profile_id, - "models": [ - { - "key": spec.key, - "title": spec.title, - "description": spec.description, - "gatewayModel": spec.gateway_model, - "resolvedCombo": spec.resolved_combo, - "resolvedRuntimeModel": spec.resolved_runtime_model, - "status": spec.status, - "default": spec.key == default_model_key, - } - for spec in DOCUMENT_AI_MODEL_SPECS - ], - "profiles": [ - { - "id": spec.id, - "title": spec.title, - "description": spec.description, - "sessionMode": spec.session_mode, - "toolNames": list(spec.tool_names), - "status": spec.status, - "default": spec.id == default_profile_id, - } - for spec in DOCUMENT_AI_PROFILE_SPECS - ], - "tools": [ - { - "name": spec.name, - "title": spec.title, - "description": spec.description, - "scope": spec.scope, - "mode": spec.mode, - "status": spec.status, - "version": spec.version, - } - for spec in DOCUMENT_AI_TOOL_SPECS - ], - } - - -def normalize_loopback_base_url(base_url: str) -> str: - value = str(base_url or "").strip() - if not value: - return DEFAULT_OMNIROUTE_BASE_URL - parsed = urlsplit(value) - if parsed.hostname != "127.0.0.1": - return value - netloc = parsed.netloc.replace("127.0.0.1", "localhost", 1) - return urlunsplit((parsed.scheme, netloc, parsed.path, parsed.query, parsed.fragment)) - - -def _iter_candidate_model_names( - *, - request_model: str | None, - configured_default_model: str | None, - env: Mapping[str, str], -) -> tuple[str, ...]: - values = ( - (request_model or "").strip(), - (configured_default_model or "").strip(), - str(env.get("ONLINE_AI_MODEL", "")).strip(), - str(env.get("OPENAI_MODEL", "")).strip(), - str(env.get("OPENAI_DEFAULT_MODEL", "")).strip(), - str(env.get("CLAW_DEFAULT_MODEL", "")).strip(), - ) - return tuple(value for value in values if value) - - -def _extract_model_prefix(model_name: str) -> str | None: - value = str(model_name or "").strip() - if "/" not in value: - return None - prefix, _ = value.split("/", 1) - return prefix.strip() or None - - -class GatewayPrefixedOpenAIProvider(ModelProvider): - def __init__( - self, - prefix: str, - *, - api_key: str | None, - base_url: str | None, - use_responses: bool = True, - ) -> None: - self._prefix = prefix - self._api_key = api_key or "" - self._base_url = base_url or "" - self._use_responses = use_responses - - def get_model(self, model_name: str | None): - full_model_name = f"{self._prefix}/{model_name}" if model_name else self._prefix - return CompatOpenAIResponsesModel( - model=full_model_name, - openai_client=None, - model_is_explicit=True, - base_url=self._base_url, - api_key=self._api_key, - use_responses=self._use_responses, - ) - - -class DocumentAiModelProvider(ModelProvider): - def __init__( - self, - *, - provider_map: Mapping[str, ModelProvider], - api_key: str | None, - base_url: str | None, - use_responses: bool = True, - ) -> None: - self._provider_map = dict(provider_map) - self._api_key = api_key or "" - self._base_url = base_url or "" - self._use_responses = use_responses - - def get_model(self, model_name: str | None): - value = str(model_name or "").strip() - if "/" in value: - prefix, suffix = value.split("/", 1) - provider = self._provider_map.get(prefix) - if provider is None: - provider = GatewayPrefixedOpenAIProvider( - prefix, - api_key=self._api_key, - base_url=self._base_url, - use_responses=self._use_responses, - ) - return provider.get_model(suffix) - - return CompatOpenAIResponsesModel( - model=value or None, - openai_client=None, - model_is_explicit=bool(value), - base_url=self._base_url, - api_key=self._api_key, - use_responses=self._use_responses, - ) - - -def build_agent_usage_from_response_usage(response_usage: Any): - if response_usage is None: - return Usage() - - def pick(name: str, default: Any = None) -> Any: - if isinstance(response_usage, Mapping): - return response_usage.get(name, default) - return getattr(response_usage, name, default) - - input_tokens = int(pick("input_tokens", 0) or 0) - output_tokens = int(pick("output_tokens", 0) or 0) - total_tokens_raw = pick("total_tokens", None) - total_tokens = input_tokens + output_tokens - if total_tokens_raw not in (None, ""): - try: - total_tokens = int(total_tokens_raw) - except (TypeError, ValueError): - total_tokens = input_tokens + output_tokens - return Usage( - requests=1, - input_tokens=input_tokens, - output_tokens=output_tokens, - total_tokens=total_tokens, - input_tokens_details=pick("input_tokens_details", None), - output_tokens_details=pick("output_tokens_details", None), - ) - - -def _is_openai_omit(value: Any) -> bool: - return value is None or value.__class__.__name__ == "Omit" - - -def parse_gateway_raw_response_text(raw_text: str) -> dict[str, Any]: - text = raw_text.strip() - if not text: - raise RuntimeError("网关未返回有效响应体") - - if text.startswith("{"): - payload = json.loads(text) - if not isinstance(payload, dict): - raise RuntimeError("网关响应不是对象") - return payload - - parsed_payload: dict[str, Any] | None = None - for block in text.split("\n\n"): - lines = [ - line[len("data:") :].strip() - for line in block.splitlines() - if line.startswith("data:") - ] - if not lines: - continue - try: - data = json.loads("\n".join(lines)) - except json.JSONDecodeError: - continue - if isinstance(data, dict) and isinstance(data.get("response"), dict): - parsed_payload = data["response"] - continue - if isinstance(data, dict): - parsed_payload = data - - if parsed_payload is None: - raise RuntimeError(f"无法解析网关 Responses 返回:{text[:200]}") - return parsed_payload - - -class CompatOpenAIResponsesModel(OpenAIResponsesModel): - def __init__( - self, - model, - openai_client, - *, - model_is_explicit: bool = True, - base_url: str, - api_key: str, - use_responses: bool = True, - ) -> None: - super().__init__(model=model, openai_client=openai_client, model_is_explicit=model_is_explicit) - self._gateway_base_url = base_url.rstrip("/") - self._gateway_api_key = api_key - self._gateway_use_responses = use_responses - - async def get_response( - self, - system_instructions, - input, - model_settings, - tools, - output_schema, - handoffs, - tracing, - previous_response_id: str | None = None, - conversation_id: str | None = None, - prompt=None, - ): - list_input = ItemHelpers.input_to_new_input_list(input) - list_input = _to_dump_compatible(list_input) - list_input = self._remove_openai_responses_api_incompatible_fields(list_input) - - if model_settings.parallel_tool_calls and tools: - parallel_tool_calls = True - elif model_settings.parallel_tool_calls is False: - parallel_tool_calls = False - else: - parallel_tool_calls = None - - tool_choice = ResponsesConverter.convert_tool_choice(model_settings.tool_choice) - converted_tools = ResponsesConverter.convert_tools(tools, handoffs) - converted_tools_payload = _to_dump_compatible(converted_tools.tools) - response_format = ResponsesConverter.get_response_format(output_schema) - should_omit_model = prompt is not None and not self._model_is_explicit - should_omit_tools = prompt is not None and len(converted_tools_payload) == 0 - - include_set: set[str] = set(converted_tools.includes) - if model_settings.response_include is not None: - include_set.update(model_settings.response_include) - if model_settings.top_logprobs is not None: - include_set.add("message.output_text.logprobs") - include = list(include_set) - - payload: dict[str, Any] = { - "previous_response_id": previous_response_id, - "conversation": conversation_id, - "instructions": system_instructions, - "model": None if should_omit_model else self.model, - "input": list_input, - "include": include or None, - "tools": None if should_omit_tools else converted_tools_payload, - "prompt": prompt, - "temperature": model_settings.temperature, - "top_p": model_settings.top_p, - "truncation": model_settings.truncation, - "max_output_tokens": model_settings.max_tokens, - "tool_choice": tool_choice, - "parallel_tool_calls": parallel_tool_calls, - "text": response_format, - "store": model_settings.store, - "prompt_cache_retention": model_settings.prompt_cache_retention, - "reasoning": model_settings.reasoning, - "metadata": model_settings.metadata, - } - if model_settings.top_logprobs is not None: - payload["top_logprobs"] = model_settings.top_logprobs - if model_settings.verbosity is not None: - if isinstance(payload.get("text"), dict): - payload["text"]["verbosity"] = model_settings.verbosity - else: - payload["text"] = {"verbosity": model_settings.verbosity} - if model_settings.extra_body: - payload.update(dict(model_settings.extra_body)) - - payload = { - key: value - for key, value in payload.items() - if not _is_openai_omit(value) - } - headers = { - "Authorization": f"Bearer {self._gateway_api_key}", - "Content-Type": "application/json", - } - if isinstance(model_settings.extra_headers, Mapping): - headers.update({str(k): str(v) for k, v in model_settings.extra_headers.items()}) - - async with httpx.AsyncClient(timeout=60.0) as client: - raw_response = await client.post( - f"{self._gateway_base_url}/responses", - headers=headers, - json=payload, - params=model_settings.extra_query, - ) - raw_response.raise_for_status() - parsed_payload = parse_gateway_raw_response_text(raw_response.text) - - if isinstance(parsed_payload.get("error"), dict): - raise RuntimeError( - str(parsed_payload["error"].get("message") or "Responses API 返回错误") - ) - - return ModelResponse( - output=parsed_payload.get("output") or [], - usage=build_agent_usage_from_response_usage(parsed_payload.get("usage")), - response_id=str(parsed_payload.get("id") or "") or None, - ) - - -def wrap_openai_model_for_gateway_compat(model: Any): - if OpenAIResponsesModel is not None and isinstance(model, OpenAIResponsesModel): - return CompatOpenAIResponsesModel( - model=model.model, - openai_client=model._client, - model_is_explicit=getattr(model, "_model_is_explicit", True), - base_url=getattr(getattr(model, "_client", None), "base_url", ""), - api_key="", - ) - return model - - -def build_document_model_provider( - *, - request_model: str | None, - configured_default_model: str | None, - env: Mapping[str, str] | None = None, - available_models_loader: Callable[[str, str], list[str] | tuple[str, ...]] | None = None, -): - if not sdk_available(): - raise RuntimeError("openai-agents 未安装,无法构建文档页 model provider") - - env_map = env if env is not None else os.environ - base_url = str(env_map.get("OPENAI_BASE_URL", "")).strip() - api_key = get_effective_openai_api_key(env_map) - loader = available_models_loader or load_available_openai_models - available_models = list(loader(base_url, api_key)) if base_url and api_key else [] - - prefixes: set[str] = set() - for model_name in _iter_candidate_model_names( - request_model=request_model, - configured_default_model=configured_default_model, - env=env_map, - ): - prefix = _extract_model_prefix(model_name) - if prefix: - prefixes.add(prefix) - for model_name in available_models: - prefix = _extract_model_prefix(str(model_name)) - if prefix: - prefixes.add(prefix) - provider_map: dict[str, ModelProvider] = {} - for prefix in sorted(prefixes): - if prefix in {"openai", "litellm"}: - continue - provider_map[prefix] = GatewayPrefixedOpenAIProvider( - prefix, - api_key=api_key, - base_url=base_url, - use_responses=True, - ) - - return DocumentAiModelProvider( - provider_map=provider_map, - api_key=api_key, - base_url=base_url, - use_responses=True, - ) - - -def resolve_document_agent_model( - *, - request_model: str | None, - configured_default_model: str | None, - env: Mapping[str, str] | None = None, - available_models_loader: Callable[[str, str], list[str] | tuple[str, ...]] | None = None, -) -> str: - env_map = env if env is not None else os.environ - candidates = _iter_candidate_model_names( - request_model=request_model, - configured_default_model=configured_default_model, - env=env_map, - ) - raw_model = candidates[0] if candidates else "" - - if not raw_model: - raise RuntimeError( - "未配置文档页 AI model;请设置 MNOTE_AI_DEFAULT_MODEL 或在请求中显式传入 provider/model" - ) - - if "/" in raw_model: - return raw_model - - base_url = str(env_map.get("OPENAI_BASE_URL", "")).strip() - api_key = get_effective_openai_api_key(env_map) - if not base_url or not api_key: - raise RuntimeError( - f"文档页 AI model '{raw_model}' 缺少 provider 前缀,且当前无法查询可用模型;请显式设置 provider/model" - ) - - loader = available_models_loader or load_available_openai_models - available_models = [model.strip() for model in loader(base_url, api_key) if str(model).strip()] - if not available_models: - raise RuntimeError( - f"文档页 AI model '{raw_model}' 缺少 provider 前缀,且当前无法查询可用模型;请显式设置 provider/model" - ) - - # 当前 sidecar 走 Responses API,优先选择网关上可用的 responses provider 前缀。 - responses_model = f"ju/{raw_model}" - if responses_model in available_models: - return responses_model - - suffix_matches = sorted( - { - model - for model in available_models - if model.endswith(f"/{raw_model}") - } - ) - if len(suffix_matches) == 1: - return suffix_matches[0] - if len(suffix_matches) > 1: - raise RuntimeError( - f"文档页 AI model '{raw_model}' 存在多个候选,请使用 provider/model 显式指定" - ) - - raise RuntimeError( - f"未找到可用的文档页 AI model '{raw_model}';请设置 MNOTE_AI_DEFAULT_MODEL 或在请求中显式传入 provider/model" - ) - - -def resolve_document_agent_request_model( - *, - request_model: str | None, - request_model_key: str | None, - configured_default_model: str | None, - env: Mapping[str, str] | None = None, - available_models_loader: Callable[[str, str], list[str] | tuple[str, ...]] | None = None, -) -> str: - direct_model_key = str(request_model_key or "").strip() - if direct_model_key: - spec = _document_ai_model_spec_by_key(direct_model_key) - if spec is not None: - return spec.gateway_model - return direct_model_key - - direct_request_model = str(request_model or "").strip() - if direct_request_model: - spec = _document_ai_model_spec_by_key(direct_request_model) - if spec is not None: - return spec.gateway_model - - return resolve_document_agent_model( - request_model=request_model, - configured_default_model=configured_default_model, - env=env, - available_models_loader=available_models_loader, - ) - - -def make_id(prefix: str) -> str: - return f"{prefix}_{uuid4().hex}" - - -def to_sse_frame(event: str, data: Any) -> str: - return f"event: {event}\ndata: {json.dumps(data, ensure_ascii=False)}\n\n" - - -class DocumentAiMessage(BaseModel): - role: Literal["user", "assistant"] - content: str - - -class DocumentAiContextPayload(BaseModel): - document_id: str | None = Field(default=None, alias="documentId") - document_blocks: Any = Field(default=None, alias="documentBlocks") - node: Any = None - subtree: Any = None - outline: Any = None - evidence: Any = None - page_options: Any = Field(default=None, alias="pageOptions") - editor_runtime_page_options: Any = Field( - default=None, - alias="editorRuntimePageOptions", - ) - - model_config = { - "populate_by_name": True, - } - - -class DocumentAiRunRequest(BaseModel): - user_id: str = Field(alias="userId") - session_id: str | None = Field(default=None, alias="sessionId") - model: str | None = None - model_key: str | None = Field(default=None, alias="modelKey") - profile_id: str | None = Field(default=None, alias="profileId") - max_steps: int = Field(default=10, alias="maxSteps") - messages: list[DocumentAiMessage] - context: DocumentAiContextPayload - - model_config = { - "populate_by_name": True, - } - - -class InsertBlockSpec(BaseModel): - block_type: Literal["paragraph", "heading"] = Field( - default="paragraph", - alias="type", - ) - text: str = "" - level: int = 2 - - model_config = { - "populate_by_name": True, - } - - -@dataclass -class DocumentAiEmitter: - queue: asyncio.Queue[tuple[str, Any] | None] = field( - default_factory=asyncio.Queue, - ) - tool_count: int = 0 - _tool_sequence: int = 0 - - async def emit(self, event: str, data: Any) -> None: - await self.queue.put((event, data)) - - async def close(self) -> None: - await self.queue.put(None) - - def next_tool_id(self, tool: str) -> str: - self._tool_sequence += 1 - return f"agents_{tool}_{self._tool_sequence}" - - -@dataclass -class DocumentAiRunContext: - user_id: str - request_id: str - trace_id: str - session_id: str | None - workspace_id: str | None - document_id: str | None - document_blocks: Any - node: Any - subtree: Any - outline: Any - evidence: Any - page_options: Any - editor_runtime_page_options: Any - forward_headers: dict[str, str] - emitter: DocumentAiEmitter - bridge: "LocalBridgeRuntime" - - -@dataclass(frozen=True) -class BridgeRuntimeInvocation: - command: str - args: tuple[str, ...] - cwd: str - - -@lru_cache(maxsize=1) -def resolve_bridge_repo_root() -> Path: - repo_root = Path(__file__).resolve().parents[3] - manifest = repo_root / "rust" / "Cargo.toml" - if not manifest.exists(): - raise RuntimeError(f"未找到 Rust bridge manifest: {manifest}") - return repo_root - - -@lru_cache(maxsize=1) -def resolve_bridge_runtime_invocation() -> BridgeRuntimeInvocation: - repo_root = resolve_bridge_repo_root() - explicit_bin = str(os.environ.get("MNOTE_RUST_BRIDGE_BIN", "")).strip() - if explicit_bin: - return BridgeRuntimeInvocation( - command=explicit_bin, - args=(), - cwd=str(repo_root), - ) - - for candidate in ( - repo_root / "rust" / "target" / "debug" / "bridge-runtime", - repo_root / "rust" / "target" / "release" / "bridge-runtime", - ): - if candidate.exists(): - return BridgeRuntimeInvocation( - command=str(candidate), - args=(), - cwd=str(repo_root), - ) - - return BridgeRuntimeInvocation( - command="cargo", - args=( - "run", - "--quiet", - "--manifest-path", - str(repo_root / "rust" / "Cargo.toml"), - "-p", - "bridge-runtime", - "--", - ), - cwd=str(repo_root), - ) - - -async def run_bridge_runtime(input_payload: dict[str, Any]) -> dict[str, Any]: - invocation = resolve_bridge_runtime_invocation() - payload = json.dumps(input_payload, ensure_ascii=False).encode("utf-8") - - try: - process = await asyncio.create_subprocess_exec( - invocation.command, - *invocation.args, - stdin=asyncio.subprocess.PIPE, - stdout=asyncio.subprocess.PIPE, - stderr=asyncio.subprocess.PIPE, - cwd=invocation.cwd, - env={ - **os.environ, - "CARGO_TERM_COLOR": "never", - }, - ) - except Exception as error: - raise RuntimeError(f"bridge-runtime 启动失败: {error}") from error - - try: - stdout, stderr = await asyncio.wait_for( - process.communicate(payload), - timeout=30.0, - ) - except asyncio.TimeoutError as error: - process.kill() - with contextlib.suppress(ProcessLookupError): - await process.wait() - raise RuntimeError("bridge-runtime 执行超时") from error - - stdout_text = stdout.decode("utf-8", errors="replace").strip() - stderr_text = stderr.decode("utf-8", errors="replace").strip() - if not stdout_text: - raise RuntimeError(stderr_text or "bridge-runtime 未返回任何结果") - - try: - response = json.loads(stdout_text) - except json.JSONDecodeError as error: - raise RuntimeError(f"bridge-runtime 返回非法 JSON: {error}") from error - - if not isinstance(response, dict): - raise RuntimeError("bridge-runtime 返回格式非法") - - if process.returncode != 0 or not bool(response.get("ok")): - error_payload = response.get("error") - if isinstance(error_payload, dict): - message = str(error_payload.get("message", "")).strip() - if message: - raise RuntimeError(message) - raise RuntimeError( - stderr_text or f"bridge-runtime 执行失败(code={process.returncode})" - ) - - return response - - -def infer_tool_invocation_kind(tool: str) -> Literal["command", "query", "job"]: - if tool in {"doc_get", "doc_find"}: - return "query" - return "command" - - -class LocalBridgeRuntime: - async def execute_tool( - self, - *, - tool: str, - context: DocumentAiRunContext, - invocation_kind: Literal["command", "query", "job"] | None = None, - args_json: dict[str, Any], - data: Any = None, - target: dict[str, Any] | None = None, - reason: str | None = None, - refs: list[str] | None = None, - ) -> Any: - payload = { - "kind": "tool", - "context": { - "deploymentId": None, - "projectId": None, - "workspaceId": context.workspace_id, - "requestId": context.request_id, - "traceId": context.trace_id, - "actor": { - "actorType": "user", - "actorId": context.user_id, - "sessionId": context.session_id, - }, - "source": { - "channel": "ai_orchestrator", - "client": "wolai-backend", - }, - "tenantId": None, - "authToken": None, - "idempotencyKey": None, - "validateOnly": False, - "dryRun": False, - }, - "tool": { - "tool": tool, - "kind": invocation_kind or infer_tool_invocation_kind(tool), - "mode": "result", - "argsJson": args_json, - "target": { - "workspaceId": context.workspace_id, - "pageId": target.get("pageId") if target else None, - "blockId": target.get("blockId") if target else None, - } - if target - else None, - "reason": reason, - "refs": refs or [], - }, - } - if data is not None: - payload["data"] = data - - response = await run_bridge_runtime(payload) - if "result" not in response: - raise RuntimeError("bridge-runtime 未返回 result") - return response["result"] - - -def _safe_json_preview(label: str, value: Any, limit: int) -> str | None: - if value is None: - return None - try: - text = json.dumps(value, ensure_ascii=False) - except TypeError: - return f"{label}=provided" - return f"{label}={text[:limit]}" - - -def _extract_inline_text(block: Any) -> str: - if not isinstance(block, dict): - return "" - content = block.get("content") - if not isinstance(content, list): - return "" - parts: list[str] = [] - for node in content: - if isinstance(node, dict) and isinstance(node.get("text"), str): - parts.append(node["text"]) - return "".join(parts).strip() - - -def _normalize_blocks(value: Any) -> list[Any]: - if isinstance(value, list): - return value - if isinstance(value, dict) and isinstance(value.get("blocks"), list): - return value["blocks"] - return [] - - -def _summarize_blocks(value: Any, limit: int = 24) -> list[dict[str, Any]]: - root_blocks = _normalize_blocks(value) - queue: deque[tuple[Any, int]] = deque((block, 0) for block in root_blocks) - summaries: list[dict[str, Any]] = [] - while queue and len(summaries) < limit: - block, depth = queue.popleft() - if not isinstance(block, dict): - continue - block_id = str(block.get("id") or "").strip() - block_type = str(block.get("type") or "unknown").strip() - children = block.get("children") - child_list = children if isinstance(children, list) else [] - if block_id: - summaries.append( - { - "id": block_id, - "type": block_type, - "depth": depth, - "text": _extract_inline_text(block)[:120], - "childCount": len(child_list), - } - ) - for child in child_list: - queue.append((child, depth + 1)) - return summaries - - -def build_document_agent_instructions( - request: DocumentAiRunRequest, -) -> str: - profile = resolve_document_ai_profile(request.profile_id) - lines = [ - "你是 mnote 的文档页 AI 编写代理。请始终使用简体中文。", - profile.instructions, - "你的工作对象只限当前文档页,不要假设你能跨页批量操作,也不要创建新的产品契约。", - "需要理解当前页内容时,先用 doc_get 或 doc_find;需要写入时,只用 doc_insert_blocks、doc_replace_range、slash_run。", - "只有在用户明确要求改标题时,才允许用 slash_run,并且只允许对当前 documentId 生成 /rename 命令。", - "如果工具没有返回成功结果,不要声称页面已经写入完成。", - ] - - latest_user_message = next( - ( - message.content.strip() - for message in reversed(request.messages) - if message.role == "user" and message.content.strip() - ), - "", - ) - normalized_latest_user_message = latest_user_message.lower() - hard_rules: list[str] = [] - if request.context.document_id and ( - "标题" in latest_user_message or "rename" in normalized_latest_user_message - ): - hard_rules.extend( - [ - "当前请求包含标题修改意图;你必须调用一次 slash_run,不允许只返回文字说明。", - f"slash_run 的 text 必须严格使用这个格式:/rename {request.context.document_id} <新标题>。", - "只有在 slash_run 返回成功后,才能用一句简短中文确认标题已修改。", - ] - ) - if "blockid" in normalized_latest_user_message and ( - "改写" in latest_user_message or "替换" in latest_user_message - ): - hard_rules.extend( - [ - "当前请求要求按 blockId 改写正文;你必须直接调用 doc_replace_range,不要只返回文字说明。", - "如果用户消息里已经给了 blockId 和目标文本,就不要先调用 doc_find。", - "只有在 doc_replace_range 返回成功后,才能用一句简短中文确认正文已修改。", - ] - ) - if ("插入" in latest_user_message or "新增" in latest_user_message) and ( - "正文" in latest_user_message or "段" in latest_user_message - ): - hard_rules.extend( - [ - "当前请求要求新增正文;你必须调用 doc_insert_blocks,不允许只返回文字说明。", - "doc_insert_blocks 至少要插入一个 paragraph 或 heading block;除非用户明确要求,不要顺手改标题。", - "只有在 doc_insert_blocks 返回成功后,才能用一句简短中文确认正文已写入。", - ] - ) - if hard_rules: - lines.append("当前请求的强制执行规则:\n- " + "\n- ".join(hard_rules)) - - context = request.context - lines.append(f"profileId={profile.id}") - if context.document_id: - lines.append(f"documentId={context.document_id}") - lines.append( - "documentBlockSummaries=" - + json.dumps( - _summarize_blocks(context.document_blocks), - ensure_ascii=False, - ) - ) - for label, value, limit in ( - ("pageOptions", context.page_options, 1600), - ("editorRuntimePageOptions", context.editor_runtime_page_options, 1200), - ("node", context.node, 1600), - ("subtree", context.subtree, 2400), - ("outline", context.outline, 2400), - ("evidence", context.evidence, 2400), - ): - preview = _safe_json_preview(label, value, limit) - if preview: - lines.append(preview) - return "\n\n".join(lines).strip() - - -def _trim_messages(messages: list[DocumentAiMessage]) -> list[dict[str, str]]: - return [ - {"role": message.role, "content": message.content} - for message in messages[-24:] - if message.content.strip() - ] - - -async def _emit_tool_event( - ctx: DocumentAiRunContext, - tool: str, - args_json: dict[str, Any], - execute: Callable[[], Any], -) -> Any: - tool_id = ctx.emitter.next_tool_id(tool) - await ctx.emitter.emit( - "tool_call", - { - "id": tool_id, - "tool": tool, - "args": args_json, - }, - ) - - started = time.perf_counter() - try: - result = await execute() - except Exception as error: - elapsed_ms = max(0, round((time.perf_counter() - started) * 1000)) - await ctx.emitter.emit( - "tool_result", - { - "id": tool_id, - "tool": tool, - "ok": False, - "ms": elapsed_ms, - "result": {"error": str(error)}, - }, - ) - raise - - ctx.emitter.tool_count += 1 - elapsed_ms = max(0, round((time.perf_counter() - started) * 1000)) - await ctx.emitter.emit( - "tool_result", - { - "id": tool_id, - "tool": tool, - "ok": True, - "ms": elapsed_ms, - "result": result, - }, - ) - return result - - -def build_document_tools(): - if not sdk_available(): - raise RuntimeError("openai-agents 未安装,无法构建文档页 tools") - - @function_tool - async def doc_get( - wrapper: RunContextWrapper[DocumentAiRunContext], - maxBlocks: int = 80, - ) -> Any: - """读取当前页的块摘要。需要先理解页面结构时调用。""" - - ctx = wrapper.context - args_json = {"maxBlocks": max(10, min(int(maxBlocks), 240))} - return await _emit_tool_event( - ctx, - "doc_get", - args_json, - lambda: ctx.bridge.execute_tool( - tool="doc_get", - context=ctx, - invocation_kind="query", - args_json=args_json, - data=ctx.document_blocks, - target={"pageId": ctx.document_id}, - ), - ) - - @function_tool - async def doc_find( - wrapper: RunContextWrapper[DocumentAiRunContext], - query: str, - maxResults: int = 8, - ) -> Any: - """按文本查找当前页的块。准备改写某段内容前先调用。""" - - ctx = wrapper.context - query_text = str(query).strip() - if not query_text: - raise RuntimeError("doc_find 缺少 query") - args_json = { - "query": query_text, - "maxResults": max(1, min(int(maxResults), 30)), - } - return await _emit_tool_event( - ctx, - "doc_find", - args_json, - lambda: ctx.bridge.execute_tool( - tool="doc_find", - context=ctx, - invocation_kind="query", - args_json=args_json, - data=ctx.document_blocks, - target={"pageId": ctx.document_id}, - ), - ) - - @function_tool - async def doc_insert_blocks( - wrapper: RunContextWrapper[DocumentAiRunContext], - blocks: list[InsertBlockSpec], - afterBlockId: str | None = None, - beforeBlockId: str | None = None, - ) -> Any: - """在当前页插入新块。新增标题或段落时调用。""" - - ctx = wrapper.context - if not blocks: - raise RuntimeError("doc_insert_blocks 缺少 blocks") - args_json = { - "blocks": [ - { - "type": block.block_type, - "text": block.text, - "level": block.level, - } - for block in blocks[:20] - ], - } - if afterBlockId: - args_json["afterBlockId"] = afterBlockId - if beforeBlockId: - args_json["beforeBlockId"] = beforeBlockId - return await _emit_tool_event( - ctx, - "doc_insert_blocks", - args_json, - lambda: ctx.bridge.execute_tool( - tool="doc_insert_blocks", - context=ctx, - invocation_kind="command", - args_json=args_json, - data=ctx.document_blocks, - target={"pageId": ctx.document_id}, - ), - ) - - @function_tool - async def doc_replace_range( - wrapper: RunContextWrapper[DocumentAiRunContext], - blockId: str, - text: str, - mode: Literal["replace", "append", "prepend"] = "replace", - ) -> Any: - """改写当前页某个块的文本。""" - - ctx = wrapper.context - block_id = str(blockId).strip() - content = str(text).strip() - if not block_id or not content: - raise RuntimeError("doc_replace_range 缺少 blockId 或 text") - safe_mode = mode if mode in {"replace", "append", "prepend"} else "replace" - args_json = { - "blockId": block_id, - "text": content, - "mode": safe_mode, - } - return await _emit_tool_event( - ctx, - "doc_replace_range", - args_json, - lambda: ctx.bridge.execute_tool( - tool="doc_replace_range", - context=ctx, - invocation_kind="command", - args_json=args_json, - data=ctx.document_blocks, - target={"pageId": ctx.document_id, "blockId": block_id}, - ), - ) - - @function_tool - async def slash_run( - wrapper: RunContextWrapper[DocumentAiRunContext], - text: str, - ) -> Any: - """执行当前页允许的斜杠命令。当前只允许改当前页标题。""" - - ctx = wrapper.context - command_text = str(text).strip() - if not command_text.startswith("/rename "): - raise RuntimeError("当前只允许 /rename 当前页标题") - if ctx.document_id and f"/rename {ctx.document_id} " not in command_text: - raise RuntimeError("slash_run 只允许改当前文档页标题") - args_json = {"text": command_text} - return await _emit_tool_event( - ctx, - "slash_run", - args_json, - lambda: ctx.bridge.execute_tool( - tool="slash_run", - context=ctx, - invocation_kind="command", - args_json=args_json, - data={"source": "ai-orchestrator"}, - target={"pageId": ctx.document_id}, - ), - ) - - return [ - doc_get, - doc_find, - doc_insert_blocks, - doc_replace_range, - slash_run, - ] - - -def build_document_agent( - request: DocumentAiRunRequest, -): - if not sdk_available(): - raise RuntimeError("openai-agents 未安装,无法构建文档页 agent") - - kwargs: dict[str, Any] = { - "name": "mnote-document-page-writer", - "instructions": build_document_agent_instructions(request), - "tools": build_document_tools(), - } - kwargs["model"] = resolve_document_agent_request_model( - request_model=request.model, - request_model_key=request.model_key, - configured_default_model=settings.mnote_ai_default_model, - ) - return Agent[DocumentAiRunContext](**kwargs) - - -def build_forward_headers(source_headers: dict[str, str]) -> dict[str, str]: - allowed = { - "authorization", - "cookie", - "x-request-id", - "x-trace-id", - "x-session-id", - "x-mnote-workspace-id", - "x-mnote-source-channel", - "x-mnote-source-client", - "x-mnote-actor-id", - "x-mnote-actor-type", - "user-agent", - } - return { - key: value - for key, value in source_headers.items() - if key.lower() in allowed and value - } - - -def build_session(session_id: str | None): - if not sdk_available() or not session_id: - return None - - raw_path = settings.openai_agents_session_db_path.strip() - db_path = ( - Path(raw_path) - if raw_path - else Path(__file__).resolve().parents[2] / ".data" / "openai-agents-sessions.sqlite3" - ) - db_path.parent.mkdir(parents=True, exist_ok=True) - return SQLiteSession(session_id, str(db_path)) - - -async def run_document_agent_stream( - request: DocumentAiRunRequest, - *, - source_headers: dict[str, str], -) -> AsyncGenerator[str, None]: - if not sdk_available(): - raise RuntimeError("openai-agents 未安装") - if not has_configured_openai_api_key(): - raise RuntimeError("后端未配置 OPENAI_API_KEY") - effective_api_key = get_effective_openai_api_key() - if effective_api_key: - os.environ.setdefault("OPENAI_API_KEY", effective_api_key) - - emitter = DocumentAiEmitter() - run_context = DocumentAiRunContext( - user_id=request.user_id, - request_id=make_id("req"), - trace_id=make_id("trace"), - session_id=request.session_id, - workspace_id=source_headers.get("x-mnote-workspace-id") or None, - document_id=request.context.document_id, - document_blocks=request.context.document_blocks, - node=request.context.node, - subtree=request.context.subtree, - outline=request.context.outline, - evidence=request.context.evidence, - page_options=request.context.page_options, - editor_runtime_page_options=request.context.editor_runtime_page_options, - forward_headers=build_forward_headers(source_headers), - emitter=emitter, - bridge=LocalBridgeRuntime(), - ) - - async def worker() -> None: - try: - agent = build_document_agent(request) - run_config = RunConfig( - model_provider=build_document_model_provider( - request_model=request.model, - configured_default_model=settings.mnote_ai_default_model, - ) - ) - session = build_session(request.session_id) - run_input = _trim_messages(request.messages) - if not run_input: - raise RuntimeError("缺少 messages") - - max_turns = max(1, min(int(request.max_steps), 12)) - with trace("mnote-document-ai-run", group_id=run_context.trace_id): - result = await Runner.run( - agent, - input=run_input, - context=run_context, - session=session, - max_turns=max_turns, - run_config=run_config, - ) - - text = str(result.final_output or "").strip() or "(无输出)" - await emitter.emit("assistant_message", {"text": text}) - await emitter.emit( - "completion", - { - "ok": True, - "text": text, - "steps": max(1, emitter.tool_count or 1), - }, - ) - except Exception as error: - await emitter.emit( - "error", - { - "ok": False, - "message": str(error), - }, - ) - finally: - await emitter.close() - - task = asyncio.create_task(worker()) - try: - while True: - item = await emitter.queue.get() - if item is None: - break - event, data = item - yield to_sse_frame(event, data) - finally: - if not task.done(): - task.cancel() - with contextlib.suppress(asyncio.CancelledError): - await task diff --git a/wolai-backend/app/services/lightrag_service.py b/wolai-backend/app/services/lightrag_service.py deleted file mode 100644 index 19d495d2..00000000 --- a/wolai-backend/app/services/lightrag_service.py +++ /dev/null @@ -1,19 +0,0 @@ -"""LightRAG 集成占位。阶段 1 会在这里封装真正的查询与索引。""" - -from app.config import settings - - -class LightRAGService: - def __init__(self) -> None: - self.collection = settings.lightrag_collection - - async def queue_index(self, document_id: str, raw_text: str) -> None: - """预留方法:后续调用 LightRAG.update_index。""" - return None - - async def query(self, query_text: str, user_id: str) -> str: - """预留方法:后续调用 LightRAG.query,当前返回占位回答。""" - return f"[mock] {query_text}" - - -lightrag_service = LightRAGService() diff --git a/wolai-backend/app/services/mineru_service.py b/wolai-backend/app/services/mineru_service.py deleted file mode 100644 index 80e46171..00000000 --- a/wolai-backend/app/services/mineru_service.py +++ /dev/null @@ -1,13 +0,0 @@ -"""MinerU OCR 占位服务。""" - - -class MinerUService: - async def extract_markdown(self, file_url: str) -> str: - """ - 阶段 0:直接返回固定内容,保证前端流程贯通。 - 阶段 1:调用 MinerU CLI / SDK,从 Supabase Storage 下载文件后解析。 - """ - return f"# OCR Placeholder\n\n源文件:{file_url}" - - -mineru_service = MinerUService() diff --git a/wolai-backend/app/services/supabase_rest.py b/wolai-backend/app/services/supabase_rest.py deleted file mode 100644 index 0a732fe8..00000000 --- a/wolai-backend/app/services/supabase_rest.py +++ /dev/null @@ -1,57 +0,0 @@ -from __future__ import annotations - -from typing import Any, Dict, Optional - -import httpx - -from app.config import settings - - -class SupabaseRestClient: - """轻量封装 Supabase RESTful API,兼容本地 sb_secret 密钥。""" - - def __init__(self) -> None: - base_url = settings.supabase_url.rstrip("/") - self.client = httpx.Client( - base_url=f"{base_url}/rest/v1", - headers={ - "apikey": settings.supabase_service_role_key, - "Authorization": f"Bearer {settings.supabase_service_role_key}", - }, - timeout=10.0, - ) - - def insert(self, table: str, payload: Dict[str, Any]) -> Dict[str, Any]: - response = self.client.post( - f"/{table}", - json=payload, - headers={"Prefer": "return=representation"}, - ) - response.raise_for_status() - data = response.json() - if isinstance(data, list): - return data[0] - return data - - def select_one(self, table: str, filters: Dict[str, Any]) -> Optional[Dict[str, Any]]: - params = {key: f"eq.{value}" for key, value in filters.items()} - params["select"] = "*" - response = self.client.get(f"/{table}", params=params) - response.raise_for_status() - data = response.json() - if isinstance(data, list) and data: - return data[0] - return None - - def update(self, table: str, filters: Dict[str, Any], payload: Dict[str, Any]) -> None: - params = {key: f"eq.{value}" for key, value in filters.items()} - response = self.client.patch( - f"/{table}", - params=params, - json=payload, - headers={"Prefer": "return=minimal"}, - ) - response.raise_for_status() - - -supabase_rest = SupabaseRestClient() diff --git a/wolai-backend/app/services/task_tracker.py b/wolai-backend/app/services/task_tracker.py deleted file mode 100644 index becffcbe..00000000 --- a/wolai-backend/app/services/task_tracker.py +++ /dev/null @@ -1,43 +0,0 @@ -from __future__ import annotations - -from typing import Any, Dict, Optional - -from app.schemas.tasks import TaskStatusResponse -from app.services.supabase_rest import supabase_rest - - -class SupabaseTaskTracker: - """利用 Supabase background_tasks 表追踪进度。""" - - def create_task(self, *, user_id: str, document_id: str, task_type: str = "ocr") -> TaskStatusResponse: - payload = { - "user_id": user_id, - "document_id": document_id, - "task_type": task_type, - "status": "pending", - "progress": 0, - } - record = supabase_rest.insert("background_tasks", payload) - return self._to_response(record) - - def get_task(self, *, task_id: str, user_id: str) -> Optional[TaskStatusResponse]: - record = supabase_rest.select_one("background_tasks", {"id": task_id, "user_id": user_id}) - if not record: - return None - return self._to_response(record) - - def update_task(self, *, task_id: str, **kwargs: Any) -> None: - supabase_rest.update("background_tasks", {"id": task_id}, kwargs) - - def _to_response(self, record: Optional[Dict[str, Any]]) -> TaskStatusResponse: - if not record: - raise ValueError("Task record missing") - return TaskStatusResponse( - task_id=str(record["id"]), - status=record.get("status", "pending"), - progress=record.get("progress", 0), - message=record.get("message"), - ) - - -task_tracker = SupabaseTaskTracker() diff --git a/wolai-backend/app/workers/celery_app.py b/wolai-backend/app/workers/celery_app.py deleted file mode 100644 index 849791d4..00000000 --- a/wolai-backend/app/workers/celery_app.py +++ /dev/null @@ -1,15 +0,0 @@ -from celery import Celery - -from app.config import settings - - -def create_celery_app() -> Celery: - app = Celery("wolai-backend") - app.conf.broker_url = settings.redis_url - app.conf.result_backend = settings.redis_url - app.conf.task_routes = {"app.workers.tasks.*": {"queue": "wolai-tasks"}} - app.autodiscover_tasks(["app.workers"]) - return app - - -celery_app = create_celery_app() diff --git a/wolai-backend/app/workers/tasks.py b/wolai-backend/app/workers/tasks.py deleted file mode 100644 index a540ab9b..00000000 --- a/wolai-backend/app/workers/tasks.py +++ /dev/null @@ -1,51 +0,0 @@ -from __future__ import annotations - -from typing import Dict - -from celery import shared_task - -from app.services.supabase_rest import supabase_rest - - -@shared_task(name="app.workers.tasks.ocr_pipeline") -def ocr_pipeline(task_id: str, document_id: str, file_url: str, user_id: str) -> Dict[str, str]: - """ - 阶段 0 Celery 任务:模拟 OCR,向 documents+background_tasks 回写占位结果。 - 阶段 1 将在此处串联 MinerU OCR 与 LightRAG 索引。 - """ - supabase_rest.update("background_tasks", {"id": task_id}, {"status": "processing", "progress": 30}) - - markdown = f"# OCR 结果占位\\n\\n文件地址:{file_url}\\n\\n> 阶段 1 将替换为 MinerU 输出。" - supabase_rest.update( - "documents", - {"id": document_id, "user_id": user_id}, - { - "content": { - "blocks": [ - { - "type": "paragraph", - "text": markdown, - } - ] - }, - "raw_text": markdown, - "index_status": "completed", - }, - ) - - supabase_rest.update( - "background_tasks", - {"id": task_id}, - { - "status": "completed", - "progress": 100, - "message": "OCR 模拟完成", - }, - ) - - return { - "task_id": task_id, - "document_id": document_id, - "file_url": file_url, - "status": "completed", - } diff --git a/wolai-backend/backend-dev-codex.err b/wolai-backend/backend-dev-codex.err deleted file mode 100644 index 87d235b7..00000000 --- a/wolai-backend/backend-dev-codex.err +++ /dev/null @@ -1,17 +0,0 @@ -INFO: Will watch for changes in these directories: ['/mnt/Data1T/mnote/wolai-backend'] -INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) -INFO: Started reloader process [1431406] using WatchFiles -INFO: Started server process [1431452] -INFO: Waiting for application startup. -INFO: Application startup complete. -INFO: 127.0.0.1:47792 - "HEAD / HTTP/1.1" 405 Method Not Allowed -INFO: 127.0.0.1:37784 - "GET /health HTTP/1.1" 200 OK -INFO: 127.0.0.1:36884 - "GET /health HTTP/1.1" 200 OK -INFO: 127.0.0.1:48348 - "GET /health HTTP/1.1" 200 OK -INFO: 127.0.0.1:53220 - "GET /health HTTP/1.1" 200 OK -INFO: 127.0.0.1:48870 - "GET /health HTTP/1.1" 200 OK -INFO: 127.0.0.1:49756 - "GET /health HTTP/1.1" 200 OK -INFO: 127.0.0.1:49756 - "GET /health HTTP/1.1" 200 OK -INFO: 127.0.0.1:49732 - "GET /health HTTP/1.1" 200 OK -INFO: 127.0.0.1:49732 - "GET /health HTTP/1.1" 200 OK -INFO: 127.0.0.1:49732 - "GET /health HTTP/1.1" 200 OK diff --git a/wolai-backend/backend-dev-codex.out b/wolai-backend/backend-dev-codex.out deleted file mode 100644 index e69de29b..00000000 diff --git a/wolai-backend/celery.err b/wolai-backend/celery.err deleted file mode 100644 index babb4d5d..00000000 --- a/wolai-backend/celery.err +++ /dev/null @@ -1,3025 +0,0 @@ -[2025-11-18 18:34:36,739: WARNING/MainProcess] F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\celery\worker\consumer\consumer.py:508: CPendingDeprecationWarning: The broker_connection_retry configuration setting will no longer determine -whether broker connection retries are made during startup in Celery 6.0 and above. -If you wish to retain the existing behavior for retrying connections on startup, -you should set broker_connection_retry_on_startup to True. - warnings.warn( - -[2025-11-18 18:34:38,911: INFO/SpawnPoolWorker-1] child process 18016 calling self.run() -[2025-11-18 18:34:39,008: INFO/SpawnPoolWorker-2] child process 17448 calling self.run() -[2025-11-18 18:34:39,055: INFO/SpawnPoolWorker-4] child process 10656 calling self.run() -[2025-11-18 18:34:39,095: INFO/SpawnPoolWorker-5] child process 5484 calling self.run() -[2025-11-18 18:34:39,116: INFO/SpawnPoolWorker-6] child process 22880 calling self.run() -[2025-11-18 18:34:39,116: INFO/SpawnPoolWorker-3] child process 3244 calling self.run() -[2025-11-18 18:34:39,154: INFO/SpawnPoolWorker-7] child process 28272 calling self.run() -[2025-11-18 18:34:39,174: INFO/SpawnPoolWorker-8] child process 20268 calling self.run() -[2025-11-18 18:34:39,225: INFO/SpawnPoolWorker-10] child process 16596 calling self.run() -[2025-11-18 18:34:39,226: INFO/SpawnPoolWorker-9] child process 35236 calling self.run() -[2025-11-18 18:34:39,303: INFO/SpawnPoolWorker-13] child process 26956 calling self.run() -[2025-11-18 18:34:39,303: INFO/SpawnPoolWorker-11] child process 38232 calling self.run() -[2025-11-18 18:34:39,304: INFO/SpawnPoolWorker-12] child process 14728 calling self.run() -[2025-11-18 18:34:39,314: INFO/SpawnPoolWorker-14] child process 48196 calling self.run() -[2025-11-18 18:34:39,332: INFO/SpawnPoolWorker-15] child process 29452 calling self.run() -[2025-11-18 18:34:39,338: ERROR/SpawnPoolWorker-11] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 115, in __enter__ - return self._semlock.__enter__() - ^^^^^^^^^^^^^^^^^^^^^^^^^ -PermissionError: [WinError 5] ܾʡ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:39,338: ERROR/SpawnPoolWorker-11] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 115, in __enter__ - return self._semlock.__enter__() - ^^^^^^^^^^^^^^^^^^^^^^^^^ -PermissionError: [WinError 5] ܾʡ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:39,345: INFO/SpawnPoolWorker-17] child process 22576 calling self.run() -[2025-11-18 18:34:39,343: ERROR/SpawnPoolWorker-14] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 115, in __enter__ - return self._semlock.__enter__() - ^^^^^^^^^^^^^^^^^^^^^^^^^ -PermissionError: [WinError 5] ܾʡ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:39,343: ERROR/SpawnPoolWorker-14] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 115, in __enter__ - return self._semlock.__enter__() - ^^^^^^^^^^^^^^^^^^^^^^^^^ -PermissionError: [WinError 5] ܾʡ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:39,366: INFO/SpawnPoolWorker-16] child process 6576 calling self.run() -[2025-11-18 18:34:39,376: INFO/SpawnPoolWorker-18] child process 2892 calling self.run() -[2025-11-18 18:34:39,391: INFO/SpawnPoolWorker-19] child process 47988 calling self.run() -[2025-11-18 18:34:39,399: INFO/SpawnPoolWorker-20] child process 48420 calling self.run() -[2025-11-18 18:34:39,404: INFO/SpawnPoolWorker-21] child process 4716 calling self.run() -[2025-11-18 18:34:39,404: ERROR/SpawnPoolWorker-19] Pool process error: OSError(9, 'Ч', None, 6, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 115, in __enter__ - return self._semlock.__enter__() - ^^^^^^^^^^^^^^^^^^^^^^^^^ -PermissionError: [WinError 5] ܾʡ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 7, in getvalue -OSError: [WinError 6] Ч -[2025-11-18 18:34:39,408: INFO/SpawnPoolWorker-23] child process 38928 calling self.run() -[2025-11-18 18:34:39,404: ERROR/SpawnPoolWorker-19] Pool process error: OSError(9, 'Ч', None, 6, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 115, in __enter__ - return self._semlock.__enter__() - ^^^^^^^^^^^^^^^^^^^^^^^^^ -PermissionError: [WinError 5] ܾʡ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 7, in getvalue -OSError: [WinError 6] Ч -[2025-11-18 18:34:39,416: INFO/SpawnPoolWorker-22] child process 21168 calling self.run() -[2025-11-18 18:34:39,417: INFO/SpawnPoolWorker-24] child process 32452 calling self.run() -[2025-11-18 18:34:39,421: ERROR/SpawnPoolWorker-23] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 115, in __enter__ - return self._semlock.__enter__() - ^^^^^^^^^^^^^^^^^^^^^^^^^ -PermissionError: [WinError 5] ܾʡ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:39,421: ERROR/SpawnPoolWorker-23] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 115, in __enter__ - return self._semlock.__enter__() - ^^^^^^^^^^^^^^^^^^^^^^^^^ -PermissionError: [WinError 5] ܾʡ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:39,430: ERROR/SpawnPoolWorker-24] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 115, in __enter__ - return self._semlock.__enter__() - ^^^^^^^^^^^^^^^^^^^^^^^^^ -PermissionError: [WinError 5] ܾʡ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:39,430: ERROR/SpawnPoolWorker-24] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 115, in __enter__ - return self._semlock.__enter__() - ^^^^^^^^^^^^^^^^^^^^^^^^^ -PermissionError: [WinError 5] ܾʡ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:40,144: ERROR/MainProcess] Process 'SpawnPoolWorker-24' pid:28996 exited with 'exitcode 1' -[2025-11-18 18:34:40,144: ERROR/MainProcess] Process 'SpawnPoolWorker-23' pid:28116 exited with 'exitcode 1' -[2025-11-18 18:34:40,144: ERROR/MainProcess] Process 'SpawnPoolWorker-19' pid:31832 exited with 'exitcode 1' -[2025-11-18 18:34:40,144: ERROR/MainProcess] Process 'SpawnPoolWorker-14' pid:43956 exited with 'exitcode 1' -[2025-11-18 18:34:40,146: ERROR/MainProcess] Process 'SpawnPoolWorker-11' pid:33932 exited with 'exitcode 1' -[2025-11-18 18:34:40,873: INFO/SpawnPoolWorker-26] child process 17276 calling self.run() -[2025-11-18 18:34:40,873: INFO/SpawnPoolWorker-25] child process 17468 calling self.run() -[2025-11-18 18:34:40,880: ERROR/MainProcess] consumer: Cannot connect to redis://localhost:6379/0: Error 10061 connecting to localhost:6379. Ŀܾ޷ӡ.. -Trying again in 2.00 seconds... (1/100) - -[2025-11-18 18:34:40,882: INFO/SpawnPoolWorker-28] child process 8160 calling self.run() -[2025-11-18 18:34:40,890: INFO/SpawnPoolWorker-27] child process 6956 calling self.run() -[2025-11-18 18:34:40,891: INFO/SpawnPoolWorker-29] child process 4368 calling self.run() -[2025-11-18 18:34:46,976: ERROR/MainProcess] consumer: Cannot connect to redis://localhost:6379/0: Error 10061 connecting to localhost:6379. Ŀܾ޷ӡ.. -Trying again in 4.00 seconds... (2/100) - -[2025-11-18 18:34:55,065: ERROR/MainProcess] consumer: Cannot connect to redis://localhost:6379/0: Error 10061 connecting to localhost:6379. Ŀܾ޷ӡ.. -Trying again in 6.00 seconds... (3/100) - -[2025-11-18 18:34:57,627: ERROR/SpawnPoolWorker-1] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 345, in _recv_bytes - nread, err = ov.GetOverlappedResult(True) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:57,627: ERROR/SpawnPoolWorker-1] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 345, in _recv_bytes - nread, err = ov.GetOverlappedResult(True) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:57,627: ERROR/SpawnPoolWorker-13] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 345, in _recv_bytes - nread, err = ov.GetOverlappedResult(True) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:57,627: ERROR/SpawnPoolWorker-13] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 345, in _recv_bytes - nread, err = ov.GetOverlappedResult(True) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:57,627: ERROR/SpawnPoolWorker-12] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 345, in _recv_bytes - nread, err = ov.GetOverlappedResult(True) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:57,627: ERROR/SpawnPoolWorker-12] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 345, in _recv_bytes - nread, err = ov.GetOverlappedResult(True) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:57,627: ERROR/SpawnPoolWorker-6] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 345, in _recv_bytes - nread, err = ov.GetOverlappedResult(True) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:57,627: ERROR/SpawnPoolWorker-9] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 345, in _recv_bytes - nread, err = ov.GetOverlappedResult(True) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:57,627: ERROR/SpawnPoolWorker-18] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 345, in _recv_bytes - nread, err = ov.GetOverlappedResult(True) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:57,627: ERROR/SpawnPoolWorker-3] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 345, in _recv_bytes - nread, err = ov.GetOverlappedResult(True) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:57,627: ERROR/SpawnPoolWorker-6] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 345, in _recv_bytes - nread, err = ov.GetOverlappedResult(True) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:57,627: ERROR/SpawnPoolWorker-27] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 345, in _recv_bytes - nread, err = ov.GetOverlappedResult(True) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:57,627: ERROR/SpawnPoolWorker-2] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 345, in _recv_bytes - nread, err = ov.GetOverlappedResult(True) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:57,627: ERROR/SpawnPoolWorker-5] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 345, in _recv_bytes - nread, err = ov.GetOverlappedResult(True) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:57,628: ERROR/SpawnPoolWorker-29] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 345, in _recv_bytes - nread, err = ov.GetOverlappedResult(True) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:57,627: ERROR/SpawnPoolWorker-9] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 345, in _recv_bytes - nread, err = ov.GetOverlappedResult(True) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:57,627: ERROR/SpawnPoolWorker-4] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 345, in _recv_bytes - nread, err = ov.GetOverlappedResult(True) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:57,627: ERROR/SpawnPoolWorker-18] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 345, in _recv_bytes - nread, err = ov.GetOverlappedResult(True) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:57,627: ERROR/SpawnPoolWorker-8] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 345, in _recv_bytes - nread, err = ov.GetOverlappedResult(True) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:57,627: ERROR/SpawnPoolWorker-16] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 345, in _recv_bytes - nread, err = ov.GetOverlappedResult(True) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:57,627: ERROR/SpawnPoolWorker-28] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 345, in _recv_bytes - nread, err = ov.GetOverlappedResult(True) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:57,627: ERROR/SpawnPoolWorker-26] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 345, in _recv_bytes - nread, err = ov.GetOverlappedResult(True) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:57,627: ERROR/SpawnPoolWorker-25] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 345, in _recv_bytes - nread, err = ov.GetOverlappedResult(True) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:57,627: ERROR/SpawnPoolWorker-3] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 345, in _recv_bytes - nread, err = ov.GetOverlappedResult(True) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:57,627: ERROR/SpawnPoolWorker-21] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 345, in _recv_bytes - nread, err = ov.GetOverlappedResult(True) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:57,627: ERROR/SpawnPoolWorker-27] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 345, in _recv_bytes - nread, err = ov.GetOverlappedResult(True) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:57,627: ERROR/SpawnPoolWorker-2] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 345, in _recv_bytes - nread, err = ov.GetOverlappedResult(True) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:57,627: ERROR/SpawnPoolWorker-5] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 345, in _recv_bytes - nread, err = ov.GetOverlappedResult(True) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:57,628: ERROR/SpawnPoolWorker-29] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 345, in _recv_bytes - nread, err = ov.GetOverlappedResult(True) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:57,627: ERROR/SpawnPoolWorker-4] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 345, in _recv_bytes - nread, err = ov.GetOverlappedResult(True) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:57,627: ERROR/SpawnPoolWorker-8] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 345, in _recv_bytes - nread, err = ov.GetOverlappedResult(True) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:57,627: ERROR/SpawnPoolWorker-16] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 345, in _recv_bytes - nread, err = ov.GetOverlappedResult(True) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:57,627: ERROR/SpawnPoolWorker-28] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 345, in _recv_bytes - nread, err = ov.GetOverlappedResult(True) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:57,627: ERROR/SpawnPoolWorker-26] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 345, in _recv_bytes - nread, err = ov.GetOverlappedResult(True) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:57,627: ERROR/SpawnPoolWorker-25] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 345, in _recv_bytes - nread, err = ov.GetOverlappedResult(True) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:34:57,627: ERROR/SpawnPoolWorker-21] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 345, in _recv_bytes - nread, err = ov.GetOverlappedResult(True) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:39:36,488: ERROR/SpawnPoolWorker-7] Pool process error: OSError(9, 'Ч', None, 6, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 333, in _recv_bytes - ov, err = _winapi.ReadFile( - ^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 7, in getvalue -OSError: [WinError 6] Ч -[2025-11-18 18:39:36,488: ERROR/SpawnPoolWorker-7] Pool process error: OSError(9, 'Ч', None, 6, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 333, in _recv_bytes - ov, err = _winapi.ReadFile( - ^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 7, in getvalue -OSError: [WinError 6] Ч -[2025-11-18 18:39:36,754: ERROR/SpawnPoolWorker-20] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 333, in _recv_bytes - ov, err = _winapi.ReadFile( - ^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-18 18:39:36,754: ERROR/SpawnPoolWorker-20] Pool process error: PermissionError(13, 'ܾʡ', None, 5, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 333, in _recv_bytes - ov, err = _winapi.ReadFile( - ^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 3, in getvalue -PermissionError: [WinError 5] ܾʡ -[2025-11-19 01:14:55,307: ERROR/SpawnPoolWorker-22] Pool process error: OSError(9, 'Ч', None, 6, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 333, in _recv_bytes - ov, err = _winapi.ReadFile( - ^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 7, in getvalue -OSError: [WinError 6] Ч -[2025-11-19 01:14:55,308: ERROR/SpawnPoolWorker-15] Pool process error: OSError(9, 'Ч', None, 6, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 333, in _recv_bytes - ov, err = _winapi.ReadFile( - ^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 7, in getvalue -OSError: [WinError 6] Ч -[2025-11-19 01:14:55,307: ERROR/SpawnPoolWorker-22] Pool process error: OSError(9, 'Ч', None, 6, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 333, in _recv_bytes - ov, err = _winapi.ReadFile( - ^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 7, in getvalue -OSError: [WinError 6] Ч -[2025-11-19 01:14:55,308: ERROR/SpawnPoolWorker-15] Pool process error: OSError(9, 'Ч', None, 6, None) -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 333, in _recv_bytes - ov, err = _winapi.ReadFile( - ^^^^^^^^^^^^^^^^^ -BrokenPipeError: [WinError 109] ܵѽ - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 395, in get_payload - return self._reader.recv_bytes() - ^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 240, in recv_bytes - buf = self._recv_bytes(maxlength) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\connection.py", line 354, in _recv_bytes - raise EOFError -EOFError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 473, in receive - ready, req = _receive(1.0) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 445, in _recv - return True, loads(get_payload()) - ^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\queues.py", line 394, in get_payload - with self._rlock: - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\synchronize.py", line 118, in __exit__ - return self._semlock.__exit__(*args) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -OSError: [WinError 6] Ч - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 351, in workloop - req = wait_for_job() - ^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 480, in receive - raise SystemExit(EX_FAILURE) -SystemExit: 1 - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 292, in __call__ - sys.exit(self.workloop(pid=pid)) - ^^^^^^^^^^^^^^^^^^^^^^ - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 396, in workloop - self._ensure_messages_consumed(completed=completed) - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\billiard\pool.py", line 406, in _ensure_messages_consumed - if self.on_ready_counter.value >= completed: - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "", line 7, in getvalue -OSError: [WinError 6] Ч diff --git a/wolai-backend/celery.out b/wolai-backend/celery.out deleted file mode 100644 index 30e6e9b1..00000000 --- a/wolai-backend/celery.out +++ /dev/null @@ -1,19 +0,0 @@ - - -------------- celery@LIX v5.4.0 (opalescent) ---- ***** ----- --- ******* ---- Windows-10-10.0.26100-SP0 2025-11-18 18:34:36 -- *** --- * --- -- ** ---------- [config] -- ** ---------- .> app: wolai-backend:0x2b6d01c47d0 -- ** ---------- .> transport: redis://localhost:6379/0 -- ** ---------- .> results: redis://localhost:6379/0 -- *** --- * --- .> concurrency: 24 (prefork) --- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker) ---- ***** ----- - -------------- [queues] - .> celery exchange=celery(direct) key=celery - - -[tasks] - . app.workers.tasks.ocr_pipeline - diff --git a/wolai-backend/requirements.txt b/wolai-backend/requirements.txt index 57626157..40a874c9 100644 --- a/wolai-backend/requirements.txt +++ b/wolai-backend/requirements.txt @@ -1,12 +1,4 @@ -fastapi==0.115.5 -uvicorn[standard]==0.33.0 -celery[redis]==5.4.0 -redis==5.1.1 -httpx==0.27.2 -python-dotenv==1.0.1 -pgvector==0.3.5 -openai==2.11.0 -openai-agents==0.7.0 -python-multipart==0.0.17 +fastapi==0.115.5 +uvicorn[standard]==0.33.0 +python-dotenv==1.0.1 pydantic-settings==2.6.1 -typing_extensions==4.15.0 diff --git a/wolai-backend/tests/test_ai_document_agent.py b/wolai-backend/tests/test_ai_document_agent.py deleted file mode 100644 index a6166630..00000000 --- a/wolai-backend/tests/test_ai_document_agent.py +++ /dev/null @@ -1,362 +0,0 @@ -import contextlib -import unittest -from types import SimpleNamespace -from unittest.mock import AsyncMock, patch - -from app.services.ai_document_agent import ( - DocumentAiEmitter, - DocumentAiContextPayload, - DocumentAiRunContext, - DocumentAiMessage, - DocumentAiRunRequest, - LocalBridgeRuntime, - build_agent_usage_from_response_usage, - build_document_ai_config_payload, - build_document_model_provider, - build_document_agent_instructions, - build_forward_headers, - run_document_agent_stream, - resolve_document_agent_request_model, - resolve_document_agent_model, -) - - -class AiDocumentAgentTests(unittest.TestCase): - def test_build_document_agent_instructions_includes_core_context(self): - request = DocumentAiRunRequest( - userId="user-1", - messages=[DocumentAiMessage(role="user", content="帮我改写第一段")], - context=DocumentAiContextPayload( - documentId="doc-1", - documentBlocks=[ - { - "id": "block-1", - "type": "paragraph", - "content": [{"text": "第一段正文"}], - "children": [], - } - ], - pageOptions={"wideLayout": True}, - outline={"items": ["第一段"]}, - ), - ) - - instructions = build_document_agent_instructions(request) - - self.assertIn("documentId=doc-1", instructions) - self.assertIn("documentBlockSummaries=", instructions) - self.assertIn("第一段正文", instructions) - self.assertIn("pageOptions=", instructions) - self.assertIn("outline=", instructions) - - def test_build_document_agent_instructions_includes_profile_policy(self): - request = DocumentAiRunRequest( - userId="user-1", - profileId="page_writer_ai_first", - messages=[DocumentAiMessage(role="user", content="帮我补一段总结")], - context=DocumentAiContextPayload( - documentId="doc-1", - documentBlocks=[], - ), - ) - - instructions = build_document_agent_instructions(request) - - self.assertIn("AI 优先直接进入主编辑区起草", instructions) - self.assertIn("documentId=doc-1", instructions) - - def test_build_document_agent_instructions_includes_title_write_hard_rules(self): - request = DocumentAiRunRequest( - userId="user-1", - messages=[DocumentAiMessage(role="user", content="请把当前页面标题改成“新标题”。")], - context=DocumentAiContextPayload( - documentId="doc-1", - documentBlocks=[], - ), - ) - - instructions = build_document_agent_instructions(request) - - self.assertIn("你必须调用一次 slash_run", instructions) - self.assertIn("/rename doc-1 <新标题>", instructions) - - def test_build_forward_headers_only_keeps_allowed_headers(self): - forwarded = build_forward_headers( - { - "authorization": "Bearer token", - "cookie": "a=1", - "x-request-id": "req-1", - "x-trace-id": "trace-1", - "x-mnote-source-channel": "next_route", - "user-agent": "Vitest", - "x-ignore-me": "nope", - } - ) - - self.assertEqual(forwarded["authorization"], "Bearer token") - self.assertEqual(forwarded["cookie"], "a=1") - self.assertEqual(forwarded["x-request-id"], "req-1") - self.assertNotIn("x-ignore-me", forwarded) - - def test_resolve_document_agent_model_uses_prefixed_request_model_first(self): - resolved = resolve_document_agent_model( - request_model="gh/gpt-4.1", - configured_default_model="ju/gpt-5.4", - env={}, - available_models_loader=lambda _base_url, _api_key: [], - ) - - self.assertEqual(resolved, "gh/gpt-4.1") - - def test_resolve_document_agent_request_model_prefers_model_key_semantic_name(self): - resolved = resolve_document_agent_request_model( - request_model=None, - request_model_key="gpt-5.3-codex", - configured_default_model="ju/gpt-5.4", - env={ - "OPENAI_BASE_URL": "http://127.0.0.1:20128/v1", - "OPENAI_API_KEY": "sk-test", - }, - available_models_loader=lambda _base_url, _api_key: [ - "slow", - "fast", - "codex", - "ju/gpt-5.4", - ], - ) - - self.assertEqual(resolved, "gpt-5.3-codex") - - def test_resolve_document_agent_model_prefers_responses_provider_for_bare_default(self): - resolved = resolve_document_agent_model( - request_model=None, - configured_default_model="", - env={ - "CLAW_DEFAULT_MODEL": "gpt-5.4", - "OPENAI_BASE_URL": "http://127.0.0.1:20128/v1", - "OPENAI_API_KEY": "sk-test", - }, - available_models_loader=lambda _base_url, _api_key: [ - "gh/gpt-5.4", - "ju/gpt-5.4", - "gmn/gpt-5.4", - ], - ) - - self.assertEqual(resolved, "ju/gpt-5.4") - - def test_resolve_document_agent_model_requires_explicit_prefix_when_bare_model_still_ambiguous(self): - with self.assertRaisesRegex(RuntimeError, "provider/model"): - resolve_document_agent_model( - request_model=None, - configured_default_model="", - env={ - "CLAW_DEFAULT_MODEL": "gpt-5.4", - "OPENAI_BASE_URL": "http://127.0.0.1:20128/v1", - "OPENAI_API_KEY": "sk-test", - }, - available_models_loader=lambda _base_url, _api_key: [ - "gh/gpt-5.4", - "gmn/gpt-5.4", - ], - ) - - def test_resolve_document_agent_model_fails_when_no_model_is_configured(self): - with self.assertRaisesRegex(RuntimeError, "未配置文档页 AI model"): - resolve_document_agent_model( - request_model=None, - configured_default_model="", - env={}, - available_models_loader=lambda _base_url, _api_key: [], - ) - - def test_build_document_model_provider_supports_gateway_prefixed_models(self): - provider = build_document_model_provider( - request_model="ju/gpt-5.4", - configured_default_model="", - env={ - "OPENAI_BASE_URL": "http://127.0.0.1:20128/v1", - "OPENAI_API_KEY": "sk-test", - }, - available_models_loader=lambda _base_url, _api_key: [ - "ju/gpt-5.4", - "gh/gpt-4.1", - ], - ) - - ju_model = provider.get_model("ju/gpt-5.4") - gh_model = provider.get_model("gh/gpt-4.1") - - self.assertEqual(getattr(ju_model, "model", None), "ju/gpt-5.4") - self.assertEqual(getattr(gh_model, "model", None), "gh/gpt-4.1") - - def test_build_agent_usage_from_response_usage_falls_back_to_input_plus_output(self): - class FakeUsage: - input_tokens = 12 - output_tokens = 5 - total_tokens = None - input_tokens_details = None - output_tokens_details = None - - usage = build_agent_usage_from_response_usage(FakeUsage()) - - self.assertEqual(usage.input_tokens, 12) - self.assertEqual(usage.output_tokens, 5) - self.assertEqual(usage.total_tokens, 17) - - def test_build_agent_usage_from_response_usage_ignores_invalid_total_tokens(self): - class FakeUsage: - input_tokens = 8 - output_tokens = 3 - total_tokens = "not-a-number" - input_tokens_details = None - output_tokens_details = None - - usage = build_agent_usage_from_response_usage(FakeUsage()) - - self.assertEqual(usage.input_tokens, 8) - self.assertEqual(usage.output_tokens, 3) - self.assertEqual(usage.total_tokens, 11) - - def test_build_document_ai_config_payload_exposes_model_keys_profiles_and_tools(self): - payload = build_document_ai_config_payload( - env={ - "OPENAI_BASE_URL": "http://127.0.0.1:20128/v1", - "CLAW_DEFAULT_MODEL": "gpt-5.4", - } - ) - - self.assertEqual(payload["provider"], "online") - self.assertEqual(payload["baseUrl"], "http://localhost:20128/v1") - self.assertEqual(payload["defaultModelKey"], "gpt-5.4") - self.assertEqual(payload["defaultProfileId"], "page_writer_ai_first") - self.assertTrue(payload["sessionEnabled"]) - self.assertTrue(any(item["key"] == "gpt-5.4" for item in payload["models"])) - self.assertTrue( - any( - item["key"] == "gpt-5.4" - and item["resolvedCombo"] == "slow" - and item["resolvedRuntimeModel"] == "gpt-5.4" - for item in payload["models"] - ) - ) - self.assertTrue(any(item["id"] == "page_writer_ai_first" for item in payload["profiles"])) - self.assertTrue(any(item["name"] == "doc_get" for item in payload["tools"])) - - -class AiDocumentAgentBridgeRuntimeTests(unittest.IsolatedAsyncioTestCase): - async def test_local_bridge_runtime_execute_tool_uses_local_runtime_result_mode(self): - bridge = LocalBridgeRuntime() - ctx = DocumentAiRunContext( - user_id="user-1", - request_id="req-1", - trace_id="trace-1", - session_id=None, - workspace_id="ws-1", - document_id="doc-1", - document_blocks=[], - node=None, - subtree=None, - outline=None, - evidence=None, - page_options=None, - editor_runtime_page_options=None, - forward_headers={}, - emitter=DocumentAiEmitter(), - bridge=bridge, - ) - - mock_run_bridge_runtime = AsyncMock( - return_value={ - "ok": True, - "result": { - "ok": True, - "parsed": { - "command": "rename_doc", - }, - }, - } - ) - with patch( - "app.services.ai_document_agent.run_bridge_runtime", - new=mock_run_bridge_runtime, - ): - result = await bridge.execute_tool( - tool="slash_run", - invocation_kind="command", - context=ctx, - args_json={"text": "/rename doc-1 新标题"}, - data={"source": "ai-orchestrator"}, - target={"pageId": "doc-1"}, - ) - - self.assertTrue(result["ok"]) - self.assertEqual(result["parsed"]["command"], "rename_doc") - payload = mock_run_bridge_runtime.await_args.args[0] - self.assertEqual(payload["kind"], "tool") - self.assertEqual(payload["tool"]["tool"], "slash_run") - self.assertEqual(payload["tool"]["kind"], "command") - self.assertEqual(payload["tool"]["mode"], "result") - self.assertEqual(payload["tool"]["target"]["pageId"], "doc-1") - self.assertEqual(payload["context"]["source"]["channel"], "ai_orchestrator") - self.assertEqual(payload["context"]["source"]["client"], "wolai-backend") - - async def test_run_document_agent_stream_does_not_require_legacy_mnote_web_config(self): - request = DocumentAiRunRequest( - userId="user-1", - maxSteps=1, - messages=[DocumentAiMessage(role="user", content="请总结当前页面")], - context=DocumentAiContextPayload( - documentId="doc-1", - documentBlocks=[], - ), - ) - - class FakeRunner: - @staticmethod - async def run(*_args, **_kwargs): - return SimpleNamespace(final_output="已完成") - - with ( - patch("app.services.ai_document_agent.sdk_available", return_value=True), - patch( - "app.services.ai_document_agent.has_configured_openai_api_key", - return_value=True, - ), - patch( - "app.services.ai_document_agent.build_document_agent", - return_value=object(), - ), - patch( - "app.services.ai_document_agent.build_document_model_provider", - return_value=object(), - ), - patch( - "app.services.ai_document_agent.build_session", - return_value=None, - ), - patch( - "app.services.ai_document_agent.RunConfig", - side_effect=lambda **kwargs: kwargs, - ), - patch( - "app.services.ai_document_agent.Runner", - new=FakeRunner, - ), - patch( - "app.services.ai_document_agent.trace", - new=lambda *_args, **_kwargs: contextlib.nullcontext(), - ), - ): - chunks: list[str] = [] - async for chunk in run_document_agent_stream(request, source_headers={}): - chunks.append(chunk) - - text = "".join(chunks) - self.assertIn("event: assistant_message", text) - self.assertIn("event: completion", text) - self.assertIn("已完成", text) - - -if __name__ == "__main__": - unittest.main() diff --git a/wolai-backend/uvicorn-dev.err b/wolai-backend/uvicorn-dev.err deleted file mode 100644 index c15c5ab2..00000000 --- a/wolai-backend/uvicorn-dev.err +++ /dev/null @@ -1,4 +0,0 @@ -INFO: Started server process [27148] -INFO: Waiting for application startup. -INFO: Application startup complete. -INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit) diff --git a/wolai-backend/uvicorn-dev.out b/wolai-backend/uvicorn-dev.out deleted file mode 100644 index e69de29b..00000000 diff --git a/wolai-backend/uvicorn-prod.err b/wolai-backend/uvicorn-prod.err deleted file mode 100644 index 35850194..00000000 --- a/wolai-backend/uvicorn-prod.err +++ /dev/null @@ -1,4 +0,0 @@ -INFO: Started server process [10528] -INFO: Waiting for application startup. -INFO: Application startup complete. -INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) diff --git a/wolai-backend/uvicorn-prod.out b/wolai-backend/uvicorn-prod.out deleted file mode 100644 index 57a9349b..00000000 --- a/wolai-backend/uvicorn-prod.out +++ /dev/null @@ -1,30 +0,0 @@ -INFO: 127.0.0.1:56337 - "GET / HTTP/1.1" 200 OK -INFO: 2409:8a62:e45:7c51::16f3:0 - "GET /health HTTP/1.1" 200 OK -INFO: 2409:8a62:e45:7c51::16f3:0 - "GET /health HTTP/1.1" 200 OK -INFO: 2409:8a62:e45:7c51::16f3:0 - "GET /health HTTP/1.1" 200 OK -INFO: 2409:8a62:e45:7c51::16f3:0 - "GET /health HTTP/1.1" 200 OK -INFO: 2409:8a62:e45:7c51::16f3:0 - "GET /health HTTP/1.1" 200 OK -INFO: 183.221.18.13:0 - "GET /health HTTP/1.1" 200 OK -INFO: 183.221.18.13:0 - "GET /health HTTP/1.1" 200 OK -INFO: 2409:8a62:e45:7c51::16f3:0 - "GET /health HTTP/1.1" 200 OK -INFO: 2409:8a62:e45:7c51::16f3:0 - "GET /health HTTP/1.1" 200 OK -INFO: 2409:8a62:e45:7c51::16f3:0 - "GET /health HTTP/1.1" 200 OK -INFO: 2409:8a62:e45:7c51::16f3:0 - "GET /health HTTP/1.1" 200 OK -INFO: 2409:8a62:e45:7c51::16f3:0 - "GET /health HTTP/1.1" 200 OK -INFO: 2409:8a62:e45:7c51::16f3:0 - "GET /health HTTP/1.1" 200 OK -INFO: 2409:8a62:e45:7c51::16f3:0 - "GET /health HTTP/1.1" 200 OK -INFO: 2409:8a62:e45:7c51::16f3:0 - "GET /health HTTP/1.1" 200 OK -INFO: 2409:8a62:e45:7c51::16f3:0 - "GET /health HTTP/1.1" 200 OK -INFO: 2409:8a62:e45:7c51::16f3:0 - "GET /health HTTP/1.1" 200 OK -INFO: 2409:8a62:e45:7c51::16f3:0 - "GET /health HTTP/1.1" 200 OK -INFO: 2409:8a62:e45:7c51::16f3:0 - "GET /health HTTP/1.1" 200 OK -INFO: 2409:8a62:e45:7c51::16f3:0 - "GET /health HTTP/1.1" 200 OK -INFO: 2409:8a62:e45:7c51::16f3:0 - "GET /health HTTP/1.1" 200 OK -INFO: 2409:8a62:e45:7c51::16f3:0 - "GET /health HTTP/1.1" 200 OK -INFO: 2409:8a62:e45:7c51::16f3:0 - "GET /health HTTP/1.1" 200 OK -INFO: 2409:8a62:e45:7c51::16f3:0 - "GET /health HTTP/1.1" 200 OK -INFO: 2409:8a62:e45:7c51::16f3:0 - "GET /health HTTP/1.1" 200 OK -INFO: 2409:8a62:e45:7c51::16f3:0 - "GET /health HTTP/1.1" 200 OK -INFO: 183.221.18.13:0 - "GET /health HTTP/1.1" 200 OK -INFO: 2409:8a62:e45:7c51::16f3:0 - "GET /health HTTP/1.1" 200 OK -INFO: 2409:8a62:e45:7c51::16f3:0 - "GET /health HTTP/1.1" 200 OK diff --git a/wolai-backend/uvicorn-run.err b/wolai-backend/uvicorn-run.err deleted file mode 100644 index e69de29b..00000000 diff --git a/wolai-backend/uvicorn-run.out b/wolai-backend/uvicorn-run.out deleted file mode 100644 index e69de29b..00000000 diff --git a/wolai-backend/uvicorn.err b/wolai-backend/uvicorn.err deleted file mode 100644 index 31b24005..00000000 --- a/wolai-backend/uvicorn.err +++ /dev/null @@ -1,57 +0,0 @@ -INFO: Will watch for changes in these directories: ['F:\\SOFT\\MNOTE\\wolai-backend'] -INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) -INFO: Started reloader process [20384] using WatchFiles -INFO: Started server process [6920] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: WatchFiles detected changes in 'app\main.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [6920] -INFO: Started server process [5608] -INFO: Waiting for application startup. -INFO: Application startup complete. -WARNING: WatchFiles detected changes in 'app\deps.py'. Reloading... -INFO: Shutting down -INFO: Waiting for application shutdown. -INFO: Application shutdown complete. -INFO: Finished server process [5608] -WARNING: WatchFiles detected changes in 'app\deps.py', 'app\routers\tasks.py', 'app\workers\tasks.py', 'app\services\task_tracker.py'. Reloading... -INFO: Started server process [33148] -INFO: Waiting for application startup. -INFO: Application startup complete. -ERROR: Traceback (most recent call last): - File "C:\Users\liaib\AppData\Local\Programs\Python\Python311\Lib\asyncio\runners.py", line 118, in run - return self._loop.run_until_complete(task) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\Users\liaib\AppData\Local\Programs\Python\Python311\Lib\asyncio\base_events.py", line 654, in run_until_complete - return future.result() - ^^^^^^^^^^^^^^^ -asyncio.exceptions.CancelledError - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "C:\Users\liaib\AppData\Local\Programs\Python\Python311\Lib\asyncio\runners.py", line 190, in run - return runner.run(main) - ^^^^^^^^^^^^^^^^ - File "C:\Users\liaib\AppData\Local\Programs\Python\Python311\Lib\asyncio\runners.py", line 123, in run - raise KeyboardInterrupt() -KeyboardInterrupt - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\starlette\routing.py", line 700, in lifespan - await receive() - File "F:\SOFT\MNOTE\wolai-backend\venv\Lib\site-packages\uvicorn\lifespan\on.py", line 137, in receive - return await self.receive_queue.get() - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - File "C:\Users\liaib\AppData\Local\Programs\Python\Python311\Lib\asyncio\queues.py", line 158, in get - await getter -asyncio.exceptions.CancelledError - -INFO: Started server process [12156] -INFO: Waiting for application startup. -INFO: Application startup complete. diff --git a/wolai-backend/uvicorn.out b/wolai-backend/uvicorn.out deleted file mode 100644 index f053a8b1..00000000 --- a/wolai-backend/uvicorn.out +++ /dev/null @@ -1 +0,0 @@ -INFO: 127.0.0.1:57108 - "GET /health HTTP/1.1" 200 OK