Commit History
-
[KM-652] refactor(db): align analysis-family models to the dedorch schema
Rifqi Hafizuddin +1: Claude Opus 4.8Repoint our SQLAlchemy models to the Go-owned dedorch tables (Go owns migrations; we are consumer-only). Base tables already matched; only the analysis family differed. - analysis_states -> `analysis`: table rename; id/report_id -> Postgres uuid. - analysis_data_sources -> `data_sources`: richer shape (id, type, name, reference_id, bound_by, bound_at, metadata, created_at). binding_store reads `reference_id`; /analysis/create snapshots each source's type+name from the catalog (fail-open). `metadata` mapped as `source_metadata` (reserved name). - analysis_reports -> `reports`: flatten to title + content (rendered markdown) + generated_at + version; drop user_id/jsonb data. ReportStore writes title+content and rebuilds a minimal AnalysisReport on read (rendered_markdown = content; structured fields empty — markdown-only per the 2026-06-23 checkpoint). Deferred (pending lead): analysis_records has no dedorch table, so the report generator / record persistence / readiness flo…4f0ff12 -
[NOTICKET] fix(api): un-break Swagger /docs (OpenAPI schema generation)
analysis.py had 'from __future__ import annotations', which turned the CreateAnalysisRequest body annotation into a string forward-ref. FastAPI then mis-classified it as a query param and OpenAPI schema generation raised PydanticUserError, 500-ing /openapi.json and bricking the whole Swagger UI. Removed the future import (all annotations here are native py312); /docs, /openapi.json, /redoc now return 200. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>e7f2703 -
[NOTICKET] feat(api): add list_tools endpoint (GET /api/v1/tools)
Static slash-command catalog (10 commands) for the Golang backend to cache and surface on the FE without calling the agent per request. Each command maps 1:1 to a real internal intent/tool name (the dispatch key); display command names follow Harry's verb-first kebab-case convention. Mirrors the 15/06 list; deferred analytics tools excluded. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>4b7010a
-
[KM-652] fix(report,chat): align report gate with readiness + cleanup
Rifqi Hafizuddin +1: Claude Opus 4.8- T-D: generate_report only 409'd on zero records — it ignored problem_validated and whether any analysis actually succeeded, so the button could 201 a findings-empty report while Help said "not ready". Extract report_floor() (validated goal + >=1 substantive analyze_* success) as the single source of truth; is_report_ready composes it (+ its delta-check), and the report API gates on it (no delta — a new version is always allowed, decision 4A). - T-E: document that reports require ENABLE_SLOW_PATH=on (only the slow path persists AnalysisRecords; no records => 409 by design), and return a clear "still needs ..." 409 instead of a bare "no analyses recorded". - T-F: drop the dead source_hint derivation + _intent_to_source_hint — the intent event is consumed by the endpoint's cache gate and never forwarded to the frontend; fix the misleading comment. - T-G: document the history-blind chat cache key (message-only) limitation; history-aware key deferred to the endpoint…9c06bea -
[KM-652] fix(orchestrator): un-brick sessions + enforce data-source binding
Rifqi Hafizuddin +1: Claude Opus 4.8Three critical fixes found tracing the request lifecycle: - T-A: rooms from /room/create have no analysis_states row, so with the gate on the turn redirect-looped (gate fail-closed + a silent no-op on the problem_validated write) and gate-off it spammed duplicate report versions (report_id write-back no-op'd). AnalysisStateStore.update now warns instead of silently no-op'ing; new idempotent ensure() (INSERT ON CONFLICT DO NOTHING) get-or-creates the row; ChatHandler ensures it once per turn and the gate reuses that state (also drops the gate/help double-read). - T-B: #10 binding only scoped the Planner's catalog; the data-access tools re-read the full catalog themselves, so binding was a hint, not a boundary. Scope at the reader (_ScopedCatalogReader) so the Planner AND the tools share one scoped view. Fast path was already correct. - T-C: _scope_to_binding failed CLOSED on a disjoint binding (empty catalog -> hard fail). The scoped reader fails open (scoped or w…236d991 -
[NOTICKET] fix(chat): cache only the stateless 'chat' intent
The response cache was keyed on (room_id, user_id, message) with no analysis- state/data version and checked before the gate, so a repeated message replayed a stale answer and could bypass the gate (e.g. the same analytical question asked pre- and post-validation returned the cached 'define your goal' redirect). Now the write is gated on the intent the handler already emits: only 'chat' (stateless) is cached; help/problem_statement/check/structured/unstructured are never cached, so they always reflect current state/data. Read path unchanged (safe by construction — only 'chat' is ever stored). Caching analysis answers needs proper invalidation on data/state change — deferred. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>e58cc23
-
[KM-665] feat(help): dedupe suggested questions against chat_history
Help no longer re-suggests a question already asked/answered (e2e showed it proposing the just-answered 'top categories by revenue' as next-step #1). Branch B + a global Constraints rule make it read chat_history and only propose follow-ups that add fresh evidence (trend, breakdown, comparison). Prompt-only, still v1. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>da89c53 -
[KM-652] feat(query): single-level FK joins in QueryIR (T4)
Rifqi Hafizuddin +1: Claude Opus 4.8The e2e "revenue by category" failed because the measure (order_items.line_total) and the dimension (products.category) live in different tables and QueryIR was single-table — the planner couldn't combine them and picked wrong tables. - QueryIR gains `joins: [{target_table_id, left_column_id, right_column_id, type}]`. select/group_by/filters/order_by may now reference columns from joined tables. - SqlCompiler resolves each column_id to its owning table and emits table-qualified refs + INNER/LEFT JOIN. Output is byte-identical to before when joins=[]. - IRValidator: joins are database-only and each column pair must match a foreign key declared in the catalog; joined columns are added to the resolvable set. - PandasCompiler rejects joins (cross-file merge deferred) — DB sources only in v1. - retrieve_data spec + planner.md + query_planner.md teach the join pattern with a revenue-by-category few-shot; prefer existing measure cols + single table when possible. Co-Authored-By: Cla…7d36567 -
[KM-652] fix(readiness,ps): substantive = successful analysis; PS needs explicit goal
Rifqi Hafizuddin +1: Claude Opus 4.8T1 (is_report_ready): a record is "substantive" only when an analysis task (analyze_*) SUCCEEDED — not when it merely has findings. A failed run still writes findings (narrating the failure) and its data-access tasks succeed, so the old "has findings" check marked failed analyses as report-ready. Fixes the e2e case where analyze_aggregate failed yet the floor would have said ready. T3a (problem_statement): require an explicitly-stated objective + metric before validating. New `missing` field on the draft; is_valid = statement present AND nothing missing. Prompt hardened ("explicitly stated", not "implied") with a negative few-shot: a bare data question yields missing=[objective,metric] and does NOT validate, so the gate stops being a formality. The robust gate (user confirmation) is T3b, with the frontend. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>2218f33 -
[KM-652] feat(analysis): GET /analysis/{id} + GET /analysis (read endpoints)
Rifqi Hafizuddin +1: Claude Opus 4.8The FE workspace + sidebar need to read analysis state back; only create existed. Add: - GET /analysis/{id} — full state (8 fields) + bound data_source_ids; 404 if absent - GET /analysis?user_id= — a user's analyses, most-recently-updated first (summary) Extract _serialize_state so create + detail share one payload shape. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>4c5cff8 -
[KM-652] feat(analysis): #10 data-source binding (analysis-owned join table)
Rifqi Hafizuddin +1: Claude Opus 4.8Persist which catalog sources an analysis is scoped to, and consume it: - New analysis_data_sources(analysis_id, source_id) join table (Option A: analysis-owned, leaves the 8-field state contract untouched). Written atomically with state + room in /analysis/create. - AnalysisDataSourceStore read seam. structured_flow scopes its catalog to the bound sources (chat_handler._scope_to_binding); the report's data appendix scopes _build_data_sources to them. Both fail-open: no binding / legacy room / read error -> whole catalog, so nothing breaks until the FE sends ids. - /analysis/create dedupes + returns data_source_ids. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>4c143c4 -
[KM-652] fix(report): connect record->report->state loop + readiness refinement
Rifqi Hafizuddin +1: Claude Opus 4.8Three subsystems were built in parallel and never wired together: - Stamp analysis_id (+ user_id) onto the persisted AnalysisRecord in the slow path. Without it records were orphaned (analysis_id NULL) so list_for_analysis found nothing — the report API and is_report_ready were both silently blind. - Report API now loads the validated problem statement from analysis_states (was an empty stub) and writes report_id back onto the state after persist (feeds Help's has_report + the readiness delta-check). Both never-throw. - is_report_ready: count *substantive* records (>=1 finding, not raw turns) and add delta-since-report (a prior report + no newer analysis -> not ready). Also fix stale docstrings made false by this change: get_analysis_state (no longer a stub — reads the real store), the slow-path AnalysisStore seam (no longer a no-op), and SlowPathCoordinator (now wired behind ENABLE_SLOW_PATH). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>53d197f
-
[KM-652] feat(report): is_report_ready signal + wire into help dispatch
Rifqi Hafizuddin +1: Claude Opus 4.8Deterministic report-readiness (seam #5): validated problem statement + >=1 persisted AnalysisRecord, mirroring the report API's own 409 gate. Never-throws (fails closed to not-ready). Wired into the help dispatch so HelpAgent's consistency guard only offers generate_report when actually ready. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>ec1e341 -
[KM-667] feat(help): wire help dispatch in chat_handler
Replace the help placeholder with the real handler. _load_analysis_state fail-closes to a not-validated stub (legacy room / read error); help_agent injectable; streams chunk/done with masked callbacks. Remove dead _stub_message (help was the last unwired intent). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>66fbce0 -
[KM-666] feat(help): HelpAgent handler + consistency guard
LLM streaming call (mirrors ChatbotAgent) reading gate.AnalysisState + chat history + report_ready. Guard: _derive_available_actions mirrors the gate policy (no analysis/report until validated; report only when ready) and is fed to the prompt, so the model cannot suggest disallowed actions. report_ready is a stub seam (is_report_ready pending) defaulting to not-ready. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>d31c608 -
[KM-665] feat(help): state-tiered guidance prompt (help.md)
Help skill playbook (v1). State-tiered guidance over problem_validated + report_ready, two-layer answer (where/next + how-to), never-misguide rule keyed to deterministic signals, degrade-gracefully UI how-to, bilingual, few-shot. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>cb20b06 -
[KM-652] feat(orchestrator): analysis state + gate wiring + problem_statement skill
Rifqi Hafizuddin +1: Claude Opus 4.8Wire the gated analysis flow end-to-end. The gate is OFF by default (ENABLE_GATE) so live structured_flow is unchanged until the frontend creates analyses. - Analysis State: `analysis_states` table (shared id with `rooms` — analysis_id == room_id), `AnalysisStateStore` (get/create/update), `get_analysis_state` seam (fails closed to not-validated). 8-field contract: id, analysis_title, problem_statement, problem_validated, owner_id, report_id, created_at, updated_at. - POST /api/v1/analysis/create — creates Room + analysis_states atomically with a shared id; data-first check. - gate.py: rule keys on `problem_validated`; stub fixtures for build/test. - problem_statement skill: LLM drafts/refines, deterministic validator decides the pass, writes problem_statement + problem_validated to the store. - chat_handler: thread `analysis_id` (= room_id); apply gate before dispatch behind `enable_gate` (redirect structured_flow -> problem_statement until validated). - settings: ENABL…adcc635
-
[NOTICKET] fix context description
Rifqi Hafizuddin47f10d6
-
[KM-643] feat(check): drill into named source schema(s) on check_data
When the user names one or more structured sources, resolve each to its source_id against the inventory (whole-word match, no LLM) and return that source's column schema. Multiple named sources render as one labelled section each; naming none falls back to the source listing. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>b4b230b -
[KM-643] feat(check): add helicopter view for broad inventory queries
Broad queries (no specific cue) now call check_data + check_knowledge concurrently and stitch a combined inventory. Specific cues still route to a single tool (knowledge cues → check_knowledge, data cues → check_data). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>96c8a35 -
[NOTICKET] feat(orchestrator): flat 6-intent router + gate + check skill
Rifqi Hafizuddin +1: Claude Opus 4.8Rework the intent router from the 3-way source_hint classifier to a flat 6-intent handler router (chat, help, problem_statement, check, unstructured_flow, structured_flow). Structured/unstructured data modality on the slow path stays the Planner's job, not the router's. - orchestration.py: RouterDecision { intent, rewritten_query, confidence }; kept GPT-4o + the classify() seam. - intent_router.md: v2 prompt (labels, disambiguation, per-intent few-shots). - chat_handler.py: dispatch on intent; chat/unstructured_flow/structured_flow/ check wired; problem_statement/help stubbed; back-compat source_hint on the SSE intent event. - gate.py: deterministic gate (structured_flow requires interview pass) + AnalysisState stub contract (pending the lead's table). - handlers/check.py: check_data/check_knowledge tool-pick + table render. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>c1e4608
-
[KM-644] feat(report): button-triggered report generator + API
Rifqi Hafizuddin +1: Claude Opus 4.8A dedicated report service (not a chat skill/agent): reads a session's persisted AnalysisRecords + Problem Statement, makes ONE LLM call (the executive summary only), assembles everything else verbatim from records (INV-4), renders markdown, and persists an immutable versioned artifact. - src/agents/report/: schemas (AnalysisReport, DataSourceRef, ReportFinding + AttributedNote with plural record_ids, ProblemStatement stub), errors, ReportGenerator (deterministic assembly + 1 LLM call w/ fallback on failure), ReportStore (per-analysis advisory-lock versioning; unique(analysis_id,version)). - analysis_reports table (jsonb, one immutable row per version) + init_db register. - API: POST /report (generate), GET /report/{analysis_id} (list versions), GET /report/{analysis_id}/{version} (fetch); models/api/report.py; main.py wiring. - prompt: config/prompts/report_summary.md (synthesis-only exec summary). - record hygiene: Assembler caps raw retrieve_data table rows (kind="table") i…1570c5d -
[NOTICKET] Adopt verb-first skill naming
2d6406d -
[NOTICKET] feat(slow-path): persist AnalysisRecord via PostgresAnalysisStore
Rifqi Hafizuddin +1: Claude Opus 4.8Groundwork for generate_report - the slow path now persists a real, citable record that the report (next) renders from. Contract gaps (schemas.py): - stage: CrispStage added to TaskResult + TaskSummary, populated at all 3 TaskResult build sites (task_runner) + copied in assembler._build_record, so the report can group its method appendix by CRISP-DM phase. - AnalysisRecord gained identity: record_id (auto uuid), analysis_id/user_id (optional; stamped at persist time). Persistence: - PostgresAnalysisStore (store.py): save() never-throw idempotent upsert + list_for_analysis() oldest-first (the report render order). NullAnalysisStore kept for tests. AnalysisStore Protocol gained list_for_analysis. - analysis_records jsonb table (models.py), indexed by analysis_id + user_id; registered in init_db, created by create_all on startup (no migration). - chat_handler default store -> PostgresAnalysisStore; user_id stamped at save. Open: analysis_id is NULL until the Analysis State …09f8451
-
[NOTICKET] fix(chat): scope response cache by user_id + drop TTL to 1h (R5)
Rifqi Hafizuddin +1: Claude Fable 5Cache key was chat:{room_id}:{message} with a 24h TTL - no user in the key, so one user's cached answer could be replayed to another. Urgent now that Redis is a shared Cloud instance across the team. - key -> chat:{room_id}:{user_id}:{message} via _chat_cache_key() helper (room_id stays first so the room-wide clear pattern is unchanged) - TTL 86400 -> 3600 per the 2026-06-11 checkpoint decision - DELETE /chat/cache now requires user_id (frontend heads-up) - still open from R5: catalog-version in key / invalidate-on-ingest Docs: checkpoint plan + PROGRESS updated - Redis Cloud done, planner tool list verified, R3 closed as won't-do (team decision: tests stay local), Rifqi owns analysis_records/AnalysisStore + generate_report. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>b701e95 -
[KM-643] feat(tools): merge data sources into data_check + add knowledge_check
Replace list_sources + describe_source with a single parameterized data_check (no source_id -> list structured sources; with source_id -> that source's tables/columns) and add knowledge_check for unstructured/document sources. This splits the data/knowledge paths per the 2026-06-11 checkpoint: data_check serves the structured catalog slice (schema + tabular), knowledge_check the unstructured slice. DATA_ACCESS_TOOLS, the planner stub specs, and the few-shots updated in lockstep; reader/registry docstrings refreshed. Tests green (206 passed); changed files pass ruff, data_access.py clean under mypy. Planner stub + examples touched (rename/merge only) — flag for Rifqi. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>4bd5f1e -
[KM-642] refactor(tools): rename data-access tools to data/knowledge naming
Mechanical rename across the tool layer, the planner stub/validator/prompt/ few-shots, and docstrings: query_structured -> data_retrieve and retrieve_documents -> knowledge_retrieve (data/knowledge taxonomy from the 2026-06-11 checkpoint). No behavior change; the data_check/knowledge_check merge lands in a follow-up. Tests green (206 passed); all changed files pass ruff, data_access.py clean under mypy. Touches the planner area (prompt, validator, examples) — rename only, wording preserved. Flagged for Rifqi review. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>c38c0c2 -
[KM-641] refactor(tools): trim analytics registry to 4 active tools
Checkpoint 2026-06-11 (Harry) narrowed analytics focus to descriptive, aggregate, correlation, trend. Split ANALYTICS_TOOLS into ACTIVE_ANALYTICS_TOOLS (exposed to the Planner) and DEFERRED_ANALYTICS_TOOLS (comparison, contribution, profile, segment): specs and compute fns kept intact, only registry exposure withheld. Sync planner few-shot (cross-ref KM-626): Example A switched analyze_contribution -> analyze_aggregate so examples no longer reference a deferred tool; narrative updated to match aggregate output. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>66e2e4d
-
/fix redis connection code for general redis connection
Rifqi Hafizuddin0810be5 -
feat/Planner Agent (#2)
- [KM-567][AI] Planner agent: contracts, schemas, inputs, registry (be96601ad46c00e8e789768dd6e89c2db827bde4) - [KM-567][AI] Planner agent: prompt + few-shot examples (83ba6b1743370145454d9315224eeb7b2d12ac18) - [KM-567][AI] Planner agent: validator + service (72306d0ce92c76d60117a20c701c7f8185bcfeef) - [KM-567] docs: record Phase 3 Planner agent in PROGRESS.md (ba2fa8892392028c8d13646c09d1155bbf34e703) - [KM-567][AI] Planner agent: fix PII leak + placeholder/retry robustness (6b3637dda097f16cd98d4b9ad6094fdaed6d1346) - [KM-624] Implement Compute Functions Tools (78c598c22d2f2a14229a83c3f43fa98c5d520ae7) - [KM-624][AI] Planner: realign stub registry + examples to composite analyze_* tools (93a24dabf48d8121e981cc470c835cb10badb62a) - [KM-624] docs: record tool taxonomy + ownership revision in PROGRESS (f3461142542f6216aff23b30a1321dfb4654afdc) - [KM-626][AI] Slow-path agent: seam contracts + TaskRunner (ac310de551d0888ccfef31e981e22d88f54c6a38) - [KM-626][AI] Slow-path agent: Assembler…81e5fe7
-
[KM-582][DED][AI] Fix Retrieval in Agentic Service
ticket: https://bukittechnology.atlassian.net/browse/KM-582 fix: replace LangChain ORM retrieval with raw SQL and fix pgvector collection name - Rewrite DocumentRetriever.retrieve() using raw SQL cosine/manhattan queries instead of LangChain PGVector ORM, bypassing asyncpg type-mapping issues (id String vs UUID column, jsonb_path_match binding quirks) - Fix _COLLECTION_NAME from "document_embeddings" to "documents" to match the collection name set by the Golang ingestion service - Fix collection_name in vector_store.py to match consistently - Fix Redis chat cache to store {response, sources} dict so cached replies also populate message_sources table - Add cache management endpoints: DELETE /chat/cache, /chat/cache/room/{id}, /retrieval/cache/{user_id} - Invalidate retrieval cache automatically after document processing - Update intent_router prompt: route topical/knowledge questions to unstructured even without explicit document mention; prefer unstructured when ambiguous…61c746f
-
fix build error in importing packages langchain_postgres
0e9263a -
Fix schema table langchain_pg_embedding
079dea0
-
[NOTICKET] fix: add SKIP_INIT_DB flag and remove pymongo dependency
- Add SKIP_INIT_DB env variable to skip database initialization on startup, useful for local dev when DB is not available - Remove pymongo dependency (unused, replaced by PostgreSQL-based user storage) - Comment out unused MongoDB settings in Settings class - Update .gitignore: add API_CONTRACT_AGENT*.md and migratego/ - Remove .vscode/launch.json (superseded by uv run fastapi dev)19bd037
-
feat/Catalog Retrieval System (#1)
- initial commit (8557a2045ca2c0873e07efdf6227064b83e4a1e5) - initial structure (efc0c0a8b2444014cbe74f04617c3c974d9915be) - [KM-553] initialize shared contract (f31f6731692b0199d8cb5c5d29dffa466d6d4ca0) - [KM-553] migrate retrieval layer and remove obsolete rag/tools modules (df220ea47c96eb8a1efa07c6eebef4604fc308d6) - [NOTICKET] catalog enricher + structured pipeline + on_db_registered (77ea82d29d86400c5ed30ac154be8df6a7e897eb) - Merge commit 'refs/pr/1' of https://huggingface.co/spaces/DataEyond/Agentic-Service-Data-Eyond-Catalog into pr/1 (0ae8717c7efce2cda14fe4b8caecd774459b1f6e) - [NOTICKET] SqlCompiler (Postgres) + DbExecutor (212dad360714508c1aa607995039e6818fa40f78) - Merge commit 'refs/pr/1' of https://huggingface.co/spaces/DataEyond/Agentic-Service-Data-Eyond-Catalog into pr/1 (faf8a4f6d7e06ccf1ce84c2e7f4990c79f27f843) - TabularIntrospector + on_tabular_uploaded trigger + 31 tests (ca425208969b72a20ed76f86ef0faa1a0e912339) - [KM 556] add columns field to QueryResult + update…6bff5d9
-
[KM-438][KM-439] Improve Retrieval and Querying feature (#15)
- [noticket] add gitignore (c87f27f458854787102eebc110b178c2572ef8a6) - [NOTICKET]: add document pipeline, simplify document API (fb871f3d7db9c5a9c95a012761c4180a432e7e4b) - [NOTICKET]: update folder document_pipelines after pipelines (a4cf97ab3890e35831c0043a1d411c17d84f374b) - [NOTICKET][DB] refactor code to new repo (7f3bb9782bb9b6ace69e6be35377c12757a2f81d) - [KM-441] add mean and median (9b5933420821187e73bb72a896e28d7adf6d6137) - [NOTICKET] new metadata format for cleaner code (6b590d94c398ac4966a0e376f2809aa52c5ba022) - update document (5a69e0eecf80dd807565dbc369374e41450c37fc) - delete duplicate file (3848d7b262745b758069e3ab8089437ced42a45f) - edit document for new pipeline (425e021053c4de65e2598b0f5554b7c1044a904c) - [NOTICKET]: add CSV and XLSX file type (31920c3bc6f9faf9e07095a02fc1faf08adc246e) - [DB] fix/rename db_pipeline.py (d913315c356d741cc7a5a5b1f8e36ba41397f2ab) - [NOTICKET][DB] menyesuaikan format struktur db_pipeline sesuai dengan file lain (e13a9017e0f7fd26ef9b8a…c93ec90
-
Make a query for tabular (XLSX and CSV) (#14)
- [NOTICKET] add software to gitignore (d43ecb180036339cf287e93f1d9116bd6eff9b9d) - [NOTICKET] add pyarrow (e50eadc82e160012e3319267f5bfe084cd9034d4) - [KM-515][document] Make Query for Tabular Type (XLSX & CSV) (695ca0a154a68077c51499ed83b7507b988be065) - [KM-455][document] decided methods retrieval for document (8c9cc79223eb1d96c8622d129219a83a4ba2500b) Co-authored-by: Sofhia Az-Zahra <sofhiaazzhr@users.noreply.huggingface.co>8802920
-
Merge dev_new to main (improve retriever and add querying) (#13)
- [noticket] add gitignore (c87f27f458854787102eebc110b178c2572ef8a6) - [NOTICKET]: add document pipeline, simplify document API (fb871f3d7db9c5a9c95a012761c4180a432e7e4b) - [NOTICKET]: update folder document_pipelines after pipelines (a4cf97ab3890e35831c0043a1d411c17d84f374b) - [NOTICKET][DB] refactor code to new repo (7f3bb9782bb9b6ace69e6be35377c12757a2f81d) - [KM-441] add mean and median (9b5933420821187e73bb72a896e28d7adf6d6137) - [NOTICKET] new metadata format for cleaner code (6b590d94c398ac4966a0e376f2809aa52c5ba022) - update document (5a69e0eecf80dd807565dbc369374e41450c37fc) - delete duplicate file (3848d7b262745b758069e3ab8089437ced42a45f) - edit document for new pipeline (425e021053c4de65e2598b0f5554b7c1044a904c) - [NOTICKET]: add CSV and XLSX file type (31920c3bc6f9faf9e07095a02fc1faf08adc246e) - [DB] fix/rename db_pipeline.py (d913315c356d741cc7a5a5b1f8e36ba41397f2ab) - [NOTICKET][DB] menyesuaikan format struktur db_pipeline sesuai dengan file lain (e13a9017e0f7fd26ef9b8a…52999bc
-
[NOTICKET] fixed single source into multiple sources (#12)
- [NOTICKET] fixed single source into multiple sources (9d826225424dd8fb0044ce6f4a010ab8eac1075b) - [NOTICKET] remove source_hint line (d1f034edff5a6a78c0a7b9f3402ca2a46baa4f43) Co-authored-by: Sofhia Az-Zahra <sofhiaazzhr@users.noreply.huggingface.co>c8e3046 -
[NOTICKET] add updated_at metadata & prevent duplicate while adding new embedding (#10)
- [NOTICKET] add updated_at & delete old embedding before adding new embedding ingestion (da83e0111d3fd220fcfdd717018ce4794415e020)bd0029e
-
[NOTICKET] add total token logging (#9)
- [NOTICKET] add token logging (34eb194ed4c3f31ccd968390d1c05ca9547edafe)d973099
-
[KM-496] [DED][AI] Fix Response data structure for field sources (db flow)
5c4067e -
[NOTICKET] [document]: add doctypes endpoint (#7)
- [NOTIKCET][document]: add doctypes endpoint and 10MB file size limit (9694cc0635e4b59a0d6291e613d83262ee3277f3) Co-authored-by: Sofhia Az-Zahra <sofhiaazzhr@users.noreply.huggingface.co>b1f1ccd -
[NOTICKET][DB] add endpoints for dbtypes (#6)
- [noticket] add gitignore (c87f27f458854787102eebc110b178c2572ef8a6) - [NOTICKET]: add document pipeline, simplify document API (fb871f3d7db9c5a9c95a012761c4180a432e7e4b) - [NOTICKET]: update folder document_pipelines after pipelines (a4cf97ab3890e35831c0043a1d411c17d84f374b) - [NOTICKET][DB] refactor code to new repo (7f3bb9782bb9b6ace69e6be35377c12757a2f81d) - [KM-441] add mean and median (9b5933420821187e73bb72a896e28d7adf6d6137) - [NOTICKET] new metadata format for cleaner code (6b590d94c398ac4966a0e376f2809aa52c5ba022) - update document (5a69e0eecf80dd807565dbc369374e41450c37fc) - delete duplicate file (3848d7b262745b758069e3ab8089437ced42a45f) - edit document for new pipeline (425e021053c4de65e2598b0f5554b7c1044a904c) - [NOTICKET]: add CSV and XLSX file type (31920c3bc6f9faf9e07095a02fc1faf08adc246e) - [DB] fix/rename db_pipeline.py (d913315c356d741cc7a5a5b1f8e36ba41397f2ab) - [NOTICKET][DB] menyesuaikan format struktur db_pipeline sesuai dengan file lain (e13a9017e0f7fd26ef9b8a…c7d59cf
-
[KM-493] [DED][AI] Fix source extraction in chat
changes: - Add .vscode/launch.json with debugpy config for FastAPI via uvicorn on port 7860 - Fix _extract_sources in chat.py to read metadata from nested `data` key - Add debug log for extracted sources tikcet: https://bukittechnology.atlassian.net/browse/KM-4937da6db5 -
[KM-436][KM-437] add and modify for database and document pipeline (#3)
- [noticket] add gitignore (c87f27f458854787102eebc110b178c2572ef8a6) - [NOTICKET]: add document pipeline, simplify document API (fb871f3d7db9c5a9c95a012761c4180a432e7e4b) - [NOTICKET]: update folder document_pipelines after pipelines (a4cf97ab3890e35831c0043a1d411c17d84f374b) - [NOTICKET][DB] refactor code to new repo (7f3bb9782bb9b6ace69e6be35377c12757a2f81d) - [KM-441] add mean and median (9b5933420821187e73bb72a896e28d7adf6d6137) - [NOTICKET] new metadata format for cleaner code (6b590d94c398ac4966a0e376f2809aa52c5ba022) - update document (5a69e0eecf80dd807565dbc369374e41450c37fc) - delete duplicate file (3848d7b262745b758069e3ab8089437ced42a45f) - edit document for new pipeline (425e021053c4de65e2598b0f5554b7c1044a904c) - [NOTICKET]: add CSV and XLSX file type (31920c3bc6f9faf9e07095a02fc1faf08adc246e) - [DB] fix/rename db_pipeline.py (d913315c356d741cc7a5a5b1f8e36ba41397f2ab) - [NOTICKET][DB] menyesuaikan format struktur db_pipeline sesuai dengan file lain (e13a9017e0f7fd26ef9b8a…2ba0613
-
[NOTICKET] Init db_client endpoint
a7d8798 -
[KM-467] [DED][AI] Orchestration Agent - Init
- https://bukittechnology.atlassian.net/browse/KM-467027123c