Commit History
-
[KM-564] fix source, now shows name instead of id. added diff retrieval vs catalog
Rifqi Hafizuddin96598f8 -
add source to stream output
Rifqi Hafizuddin277f7e2 -
[KM-565] fix catalog timestamps, count_distinct logic, and query debug logging
- generated_at set once on first insert, never overwritten on upsert - updated_at only changes when catalog data jsonb actually differs - query_planner prompt: disambiguate count vs count_distinct - tabular executor: add _render_query helper for debug logging - query service: log select/filters/group_by on each IR attempt Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>887c1c4
-
[KM-564] fix render and sql error
Rifqi Hafizuddin2e601ec
-
[KM-556] move parquet_service from knowledge/ to storage/
cd06c0f -
Merge DB bundle (PR2b/4/5/6/7) into pr/1 + reconcile PROGRESS.md
efc301b -
[NOTICKET] IntentRouter + planner + dispatcher + QueryService + AnswerAgent + ChatHandler
Rifqi Hafizuddin +1: Claude Opus 4.7Bundles every Both-PR work item that doesn't require teammate's tabular modules. Phase 1 endpoints and chatbot.py are intentionally NOT touched -- cleanup PR will rewire /chat/stream and rename answer_agent.py -> chatbot.py. - IntentRouter: classify chat / unstructured / structured; history-aware rewritten_query via Pydantic structured output. Prompt with full ruleset + few-shot in config/prompts/intent_router.md. - Planner prompt: build_planner_prompt(question, catalog, previous_error) reuses catalog.enricher.render_source so DB and tabular sources render identically across enricher and planner. System prompt has hard constraints + DB and tabular few-shot in config/prompts/query_planner.md. - QueryPlannerService: Azure OpenAI structured output -> QueryIR. Injectable chain. Supports retry via previous_error arg. - ExecutorDispatcher: pick(ir) routes by source.source_type. Lazy executor imports keep module import-safe. Caches per source_type. Tests inject factories. - Q…f65aee0 -
detect XLSX by filename, not table count
307a7b1
-
eat(query): PandasCompiler + TabularExecutor (PR3-TAB)
c749544 -
[KM 556] add columns field to QueryResult + update DbExecutor
04e5c48 -
[NOTICKET] SqlCompiler (Postgres) + DbExecutor
Rifqi Hafizuddin +1: Claude Opus 4.7- SqlCompiler: deterministic IR -> (sql, params dict) for Postgres dialect (Supabase reuses). Double-quoted identifiers from catalog, named parameters for values. Supports all 12 whitelisted filter ops, 6 aggs (count/count_distinct/sum/avg/min/max), count(*), alias-aware order_by. CompiledSql.params changed from list to dict[str, Any]. - DbExecutor: layered safety -- source_type check + dbclient:// parse + client owner match + sqlglot SELECT/no-DML guard + Postgres session default_transaction_read_only + statement_timeout=30s + asyncio.wait_for backstop + 10k row cap. Runs sync engine via db_pipeline_service.engine_scope inside asyncio.to_thread. Never raises -- populates QueryResult.error. - pandas.py compiler stub: fixed pre-existing UP035 (Callable import). - pyproject.toml: added S608 to tests/** ruff ignore (test assertions on literal SQL strings are a false positive). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>212dad3 -
initial structure
efc0c0a -
initial commit
8557a20