Woody
74cb8b83d5
feat(backend): migrate LLM client to OpenAI SDK with thinking control
...
- Replace httpx with openai.AsyncOpenAI
- Add llm_enable_thinking config (default False)
- Add _build_extra_body() for Qwen3.5 thinking mode control
- Use chat_template_kwargs for vLLM/SGLang compatibility
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-23 14:10:26 +08:00
Woody
2f896052a1
docs: add logging anti-patterns to AGENTS.md
...
- Log to console only (must use backend/app/log/)
- Commit log files to git (must be .gitignored)
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-23 14:10:09 +08:00
Woody
e83a4708b5
feat(backend): add rotating file logging to backend/app/log/
...
- Configure RotatingFileHandler in main.py (10MB per file, 5 backups)
- Log directory auto-created on startup
- Add backend/app/log/ to .gitignore
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-23 14:09:48 +08:00
Woody
2b68888838
test: add sample documents for manual testing
...
- NEC4 ACC.docx, .pdf for upload testing
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-23 13:28:13 +08:00
Woody
12f4705b72
docs: update development plans with Phase 1 completion status
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-23 13:27:52 +08:00
Woody
351950f512
test(backend): update Phase 1 test suite
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-23 13:27:40 +08:00
Woody
4cf930dc59
feat(backend): add dependency injection and update main entry point
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-23 13:27:30 +08:00
Woody
44028ebd6e
refactor(backend): update document parsers for DOCX and PDF
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-23 13:27:08 +08:00
Woody
f4d78b0b77
refactor(backend): update query decomposer, relevance filter, and RAG service
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-23 13:26:56 +08:00
Woody
38f4c70762
feat(backend): add embedding client and update LLM client
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-23 13:26:43 +08:00
Woody
4a22b906e4
refactor(backend): update ingest and query routers
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-23 13:26:32 +08:00
Woody
09f8cb7e6d
refactor(backend): update Pydantic models for ingestion and query
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-23 13:26:20 +08:00
Woody
b93fc2e05b
chore(backend): update config, env template, and pytest settings
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-23 13:26:08 +08:00
Woody
95ef502bfa
docs: add debug logs for upload 500 error investigation
...
- Document root causes: missing python-docx, ChromaDB version mismatch, NumPy 2.x incompatibility
- Document fixes: venv setup, embedding wrapper rewrite, DB clear
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-23 13:25:23 +08:00
Woody
c9f330d57e
fix(backend): wrap embedding function for ChromaDB 0.4.22 compatibility
...
- Add _EmbeddingFunctionWrapper class with __call__(self, input) signature
- Use ThreadPoolExecutor to run async embed in isolated thread with fresh event loop
- Fixes asyncio.run() cannot be called from a running event loop
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-23 13:25:08 +08:00
Woody
4b633d86f7
fix(backend): resolve pytest dependency conflict and remove sentence-transformers
...
- Change pytest==8.0.0 to pytest==7.4.4 (conflict with pytest-asyncio<8)
- Remove sentence-transformers (not used with API-based embeddings)
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-23 13:24:54 +08:00
Woody
e927e5fc60
feat(frontend): polish styling, spacing, and add e2e integration tests for Phase 1.3
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-23 11:46:53 +08:00
Woody
f6618fd57e
feat(frontend): polish ResponsePanel with collapsible sources, copy button, and enhanced skeletons
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-23 11:46:40 +08:00
Woody
864b684d32
feat(frontend): add PipelineProgress component with 4-stage stepper and tests
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-23 11:46:23 +08:00
Woody
6b544808de
feat(frontend): wire Phase 1.2 components into App layout
...
Replaces placeholder areas with QueryInput, KeywordsDisplay, ResponsePanel, IngestPanel, and ErrorBoundary. App.tsx now holds TanStack Query mutation state and passes props to all components.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-23 11:24:46 +08:00
Woody
a7d5dc610a
feat(frontend): add IngestPanel and ErrorBoundary components with tests
...
IngestPanel: file upload for PDF/DOCX/TXT with progress and success/error feedback.
ErrorBoundary: React error boundary with fallback UI and reload button.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-23 11:24:29 +08:00
Woody
3d76b894cb
feat(frontend): add ResponsePanel component with bullet-point rendering and tests
...
Displays bullet-point answer with source metadata cards. Handles empty, loading, error, and success states.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-23 11:23:54 +08:00
Woody
fa94b7c9a3
feat(frontend): add QueryInput and KeywordsDisplay components with tests
...
QueryInput: textarea with submit button, loading state, Enter-to-submit, clears on submit.
KeywordsDisplay: keyword chips with loading skeletons, animated entrance.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-23 11:23:08 +08:00
Woody
3923e20d8a
feat(frontend): Phase 1.1 grid layout with Phase 2 pre-allocation and tests
...
App layout uses CSS Grid with Top-Left video placeholder (Film icon), Top-Right empty container for Phase 1.2 input, and Bottom full-width container for Phase 1.2 response. Includes Layout test verifying Phase 2 placeholder text and API client tests verifying baseURL and mocked endpoint calls.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-23 10:58:03 +08:00
Woody
d3bf13142b
feat(frontend): Phase 1.1 project scaffold with Vite, Tailwind, and API client
...
Set up Vite + React 18 + TypeScript project with Tailwind CSS, Axios API client matching backend Pydantic schemas (QueryRequest, QueryResponse, IngestResponse, SourceMetadata), and TanStack Query mutation hooks for /query and /ingest endpoints.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-23 10:57:20 +08:00
Woody
02e401740a
chore: update .gitignore for frontend lib/ and Vite cache
...
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent )
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-04-23 10:56:35 +08:00
Woody
7493b3aaf6
feat: Phase 1.4 acceptance tests, error handling, and polish
...
- Implement acceptance tests for ingest (real ChromaDB) and query (real LLM)
- Full 3-step RAG pipeline verified: decompose → retrieve → filter → generate
- Add logging to ingest and query routers
- Improve error handling: empty doc detection, proper HTTPException re-raising
- Add .txt file support to ingest endpoint
- Fix query router: strip distance from retrieve tuples before relevance filter
- Update plan: Phase 1 backend complete (all acceptance criteria met)
- Tests: 41 unit passed, 5 acceptance passed (real OpenRouter calls)
2026-04-22 17:45:50 +08:00
Woody
181f4eca5b
feat: Phase 1.3 query pipeline with decomposition, relevance filter, and response
...
- Add QueryDecomposer: extracts keywords from question via LLM JSON response
- Add RelevanceFilter: batch scores chunks 0-10, filters by threshold
- Add POST /api/v1/query endpoint with full 3-step pipeline:
1. QueryDecomposer.decompose() → keywords
2. RAGService.retrieve() → chunks from ChromaDB
3. RelevanceFilter.filter() → score and filter chunks
4. RAGService.generate_response() → bullet-point answer
- Fix SourceMetadata.upload_date type from datetime to str for flexibility
- Test-first: 13 new tests pass (5 decomposer, 5 relevance filter, 3 query endpoint)
- All Phase 1 tests: 41 passed, 2 skipped
2026-04-22 17:19:21 +08:00
Woody
4d346dc1c6
docs: Update Phase 1 backend plan with completion status
...
- Mark Phase 1.1 and 1.2 as complete with test results
- Update acceptance criteria checklist
- Add Services Status table showing implemented/pending components
- Mark Phase 1.3 tasks that are already done (LLM client, retrieval, response gen)
2026-04-22 16:55:17 +08:00
Woody
d94abaac77
feat: Phase 1.2 ingestion pipeline with chunking and metadata
...
- Add document parsers (DOCX, PDF) with lazy imports
- Add TokenChunkingStrategy with ABC for future replacement
- Add metadata extraction (filename, upload_date, content_summary)
- Add RAGService for ChromaDB ingestion/retrieval/response generation
- Add POST /api/v1/ingest endpoint with file validation
- Test-first: 20 passed, 2 skipped (python-docx not installed)
2026-04-22 16:49:52 +08:00
Woody
3712397d64
feat: Phase 1.1 project setup with config, database, and models
...
- Add requirements.txt with all dependencies
- Add .env.example with required environment variables
- Add Pydantic Settings (config.py) with .env loading
- Add ChromaDB persistent client (database.py)
- Add Pydantic schemas (ingest.py) for request/response
- Add FastAPI main.py with CORS middleware
- Add package __init__.py files
- Add tests: test_phase1_config.py, test_phase1_database.py
- All 5 tests pass
2026-04-22 16:13:52 +08:00
Woody
abffc9cf1d
docs: add PDF support alongside DOCX in all plans
2026-04-22 15:59:55 +08:00
Woody
1518b72969
chore: add .gitignore with Python, Node, env, and ChromaDB exclusions
2026-04-22 15:57:04 +08:00
Woody
eeb464528a
docs: add test-first and Phase X.Y sub-phase naming to AGENTS.md and plans
2026-04-22 15:54:34 +08:00
Woody
1f4e3a2572
docs: add Phase 1 backend and frontend development plans
2026-04-22 15:47:27 +08:00
Woody
be48b1d8c7
docs: add sub-phase development rules and acceptance test structure
2026-04-22 15:27:31 +08:00
Woody
3c2d647943
init: project setup with AGENTS.md, test structure, and plan directory
2026-04-22 15:22:29 +08:00