feat(chat): multi-turn Chat Session with Conversation history sidebar

Grounded Ask owns the product chat UI: persistent thread_id across a
Chat Session, New chat / Continue conversation, and a sidebar that lists
Conversations from the Conversation Record with formatted run metadata
(timing, tokens, evidence chunks).

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-08 17:00:33 +03:30
commit e693b9bbfc
14 changed files with 2510 additions and 0 deletions

36
README.md Normal file
View File

@@ -0,0 +1,36 @@
# Grounded Ask
Upload docs, ask one question, read the answer plus the passages it used.
Domain language: [`CONTEXT.md`](CONTEXT.md) · product ADR: [`docs/adr/0001-separate-app-tenant-profiles.md`](docs/adr/0001-separate-app-tenant-profiles.md) · API Sources: `tamasino-ai-api` ADR-0023
## Prerequisites
1. `tamasino-ai-api` running
2. A tenant API key with upload scopes **and** `threads:run`:
```bash
cd ../tamasino-ai-api
uv run python -m src.cli.provision_tenant --slug acme --domain fire \
--scopes files:write,domains:read,domains:write,points:read,points:write,retrieval:read,threads:run
```
## How to use (local)
1. Open the app (usually `http://localhost:8502`).
2. **Connect** — paste an API key that includes `files:write`, `domains:read`, `domains:write`, and `threads:run` (Hybrid Console’s key is fine if it has those).
3. **Add documents** — create or pick a topic (domain), upload CSV / Excel / Word, wait for “chunks indexed”.
4. **Ask** — type a question → read the answer and **Passages used**.
Each ask is single-turn (no chat history). Questions search the whole tenant corpus.
## Setup
```bash
cd tamasino-ai-grounded-ask
cp .env.example .env
uv sync
uv run streamlit run app.py
```
Connections are stored locally in `data/tenant_profiles.json` (gitignored).