c4f0c7ad49
- Introduce async priority queue service in ai-service; all /chat calls now route through it - Refactor chat router to separate execute_chat (core logic) from the HTTP handler - Add /queue endpoints (status, pause, resume, cancel) for queue management - Update ai-service config to use Pydantic v2 model_config style - Add STATUS.md files for backend, ai-service, doc-service, and frontend - Document STATUS.md workflow in CLAUDE.md - Update doc-service documents router and schemas; frontend DocumentsPage and API client Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
6.4 KiB
6.4 KiB
2026-04-14 — PDF Document Service
Timestamp: 2026-04-14T00:00:00+00:00
Summary
Added features/doc-service — a FastAPI microservice that accepts PDF uploads, extracts text with pdfplumber, and uses a pluggable AI provider (Anthropic, Ollama, or LM Studio) to classify and extract structured data. Integrated it into the main backend via httpx proxy routers. Added an admin settings UI at /apps/documents/settings/admin. Updated the frontend route tree, Nav, and AppsPage.
Files Added
features/doc-service/Dockerfile— UID 1001, pre-creates/data/documentsand/configfeatures/doc-service/pyproject.toml— service dependenciesfeatures/doc-service/alembic.ini— separatealembic_version_doc_servicetablefeatures/doc-service/.env.examplefeatures/doc-service/scripts/start.sh— migrations + uvicornfeatures/doc-service/scripts/start_dev.sh— migrations + uvicorn --reloadfeatures/doc-service/alembic/env.py— async migrations, VERSION_TABLE isolationfeatures/doc-service/alembic/versions/0001_create_doc_tables.py— documents, document_categories, document_category_assignmentsfeatures/doc-service/app/main.py— no CORS (internal service)features/doc-service/app/core/config.py— DATABASE_URL, DATA_DIR, CONFIG_PATH settingsfeatures/doc-service/app/database.py— async engine, AsyncSessionLocal, Basefeatures/doc-service/app/deps.py— get_user_id from X-User-Id headerfeatures/doc-service/app/models/document.py— Document ORM modelfeatures/doc-service/app/models/category.py— DocumentCategory ORM modelfeatures/doc-service/app/models/category_assignment.py— CategoryAssignment composite PKfeatures/doc-service/app/models/__init__.pyfeatures/doc-service/app/schemas/document.py— DocumentOut, DocumentStatusOut, DocumentTypeUpdate, CategoryOutfeatures/doc-service/app/schemas/category.py— CategoryCreate, CategoryOut, CategoryUpdatefeatures/doc-service/app/routers/documents.py— upload, list, get, status, patch type, delete, file download, category assignmentfeatures/doc-service/app/routers/categories.py— CRUD for DocumentCategoryfeatures/doc-service/app/services/storage.py— aiofiles write, path helpers, deletefeatures/doc-service/app/services/config_reader.py— load_doc_config() with 30s TTL cachefeatures/doc-service/app/services/ai/__init__.py— get_provider() factoryfeatures/doc-service/app/services/ai/base.py— AIProvider ABC, shared promptsfeatures/doc-service/app/services/ai/anthropic_provider.py— AnthropicProviderfeatures/doc-service/app/services/ai/openai_compat.py— OpenAICompatProvider (Ollama + LM Studio)backend/app/core/app_config.py— DocServiceConfig Pydantic model, load/save with atomic write, api_key maskingbackend/app/routers/settings.py— GET/PATCH /api/settings/documents/*, admin onlybackend/app/routers/documents_proxy.py— httpx proxy to doc-service /documents/*backend/app/routers/categories_proxy.py— httpx proxy to doc-service /categories/*frontend/src/pages/DocumentsPage.tsx— upload, list, status polling, categories, file downloadfrontend/src/pages/DocumentAdminSettingsPage.tsx— AI provider config, connection test, upload limits
Files Modified
backend/app/main.py— registered settings_router, categories_proxy (before!), documents_proxybackend/pyproject.toml— moved httpx to main deps, added anthropic>=0.28, openai>=1.0frontend/src/App.tsx— added /apps/documents and /apps/documents/settings/admin routes, removed /settingsfrontend/src/components/Nav.tsx— removed Settings link, added Profile link, logo links to /frontend/src/pages/AppsPage.tsx— replaced stub with app launcher card gridfrontend/src/api/client.ts— added documents, categories, and settings API functionsdocker-compose.yml— added doc-service service, doc_data + app_config volumes, removed internal:true from backend-net, added app_config volume to backenddocker-compose.dev.yml— added doc-service dev override with --reloadTODO.md— added PDF Documents app section
Files Deleted
frontend/src/pages/SettingsPage.tsx— stub replaced by per-app settings pages
2026-04-14 — Server-side pagination and filter bar
Timestamp: 2026-04-14T12:00:00+00:00
Summary
Added server-side pagination and a filter bar to the Documents feature.
Files Added / Modified / Deleted
- Modified
features/doc-service/app/schemas/document.py— AddedDocumentPageschema (items,total,page,pages) - Modified
features/doc-service/app/routers/documents.py—GET /documentsnow acceptspage,per_page,sort,order,status,document_type,searchquery params; returnsDocumentPage - Modified
frontend/src/api/client.ts—listDocumentsacceptsDocumentListParams; addedDocumentPageandDocumentListParamsinterfaces - Modified
frontend/src/pages/DocumentsPage.tsx— AddedFilterBar(search, status, type, sort, order) andPaginationcontrols; query key includes params for cache isolation
2026-04-14 — AI Service priority queue + model config update
Timestamp: 2026-04-14T15:00:00+00:00
Summary
Added a priority queue system to ai-service with start/pause/resume/stop controls. Updated LM Studio model to gemma-4-e4b-it.
Files Added / Modified / Deleted
- Created
features/ai-service/app/services/queue.py— in-memoryasyncio.PriorityQueuewith HIGH/NORMAL/LOW priorities, FIFO within same level, single async worker with pause/resume/stop - Created
features/ai-service/app/schemas/queue.py—QueueRequest,JobStatus,QueueStatusPydantic models - Created
features/ai-service/app/routers/queue.py—POST /queue/jobs,GET /queue/jobs/{id},DELETE /queue/jobs/{id},GET /queue/status,POST /queue/pause|resume|start|stop - Modified
features/ai-service/app/routers/chat.py— extractedexecute_chat()(called by queue worker);POST /chatnow submits to queue at NORMAL priority and awaits result - Modified
features/ai-service/app/main.py— start/stop queue worker in lifespan; mount queue router - Modified
features/ai-service/app/services/config_reader.py— default model updated togemma-4-e4b-it - Modified
features/ai-service/pyproject.toml—httpxmoved to runtime deps - Modified
features/ai-service/.env— model updated togemma-4-e4b-it