Files
odysseus/docs/discovery/domains/chat.md
T
2026-07-26 12:44:34 +01:00

198 lines
8.1 KiB
Markdown

# Chat
Features in this document are generated from [`../feature-catalog.json`](../feature-catalog.json), the canonical inventory.
## CHAT-001 — Core Chat Streaming & SSE Message Generation
- **Domain**: `chat`
- **Status**: `verified`
- **Evidence Maturity**: `E2`
- **Commit Verified**: `d8a2059df8e53bc7275c45339849d14c8651e73c`
- **Runtime Validation**: pending — Requires access to a live LLM provider endpoint (OpenAI API key or local Ollama server).
### Purpose
Handles real-time Server-Sent Events (SSE) chat streaming, token rendering, and model response generation.
### Evidence summary
- `routes/chat_routes.py``chat_stream` — POST /api/chat_stream SSE endpoint; builds the shared chat context, then dispatches to the chat-mode or agent-mode streaming path.
- `routes/chat_helpers.py``build_chat_context` — Shared context builder invoked by chat_stream; runs message preprocessing and assembles the memory/RAG/web context preface.
- `src/chat_handler.py``ChatHandler.preprocess_message` — Message preprocessing (attachments, URLs, tool preprocessing) reached from build_chat_context via routes/chat_helpers.py:preprocess.
- `src/chat_processor.py``ChatProcessor.build_context_preface` — Builds the retrieval and web-source context preface injected into the streamed request.
- `src/llm_core.py``stream_llm_with_fallback` — Chat-mode streaming dispatcher called from chat_stream; wraps stream_llm with an ordered provider fallback chain.
- `src/llm_core.py``stream_llm` — Per-request streaming entry wrapped by stream_llm_with_fallback; acquires the local model slot and delegates to _stream_llm_inner.
- `src/agent_loop.py``stream_agent_loop` — Agent-mode streaming path called from chat_stream when the request selects agent mode.
- `tests/test_chat_metrics.py``test_stream_llm_passes_through_llamacpp_timings` — Inspected unit test asserting stream_llm forwards backend generation timings into the emitted metrics chunk.
- `tests/test_resend_message_nondestructive.py``test_resend_message_does_not_truncate_by_default` — Inspected unit test asserting the frontend resend path does not truncate prior conversation turns.
### Unknowns
- Stream interruption on connection drops requires retry logic.
## CHAT-002 — Session Management & Conversation State
- **Domain**: `chat`
- **Status**: `verified`
- **Evidence Maturity**: `E0`
- **Commit Verified**: `d8a2059df8e53bc7275c45339849d14c8651e73c`
- **Runtime Validation**: not-required — No separate environment-dependent runtime validation was identified during this documentation pass.
### Purpose
Manages session creation, listing, switching, renaming, and persistence of conversation metadata.
### Evidence summary
- `routes/session_routes.py``@router.get('/api/sessions')` — Lists active sessions filtered by user owner scope.
- `core/session_manager.py``SessionManager` — Provides thread-safe session storage operations.
### Unknowns
- Concurrent file writes to sessions.json under high load.
## CHAT-003 — Chat History & Message Editing/Truncation
- **Domain**: `chat`
- **Status**: `verified`
- **Evidence Maturity**: `E0`
- **Commit Verified**: `d8a2059df8e53bc7275c45339849d14c8651e73c`
- **Runtime Validation**: not-required — No separate environment-dependent runtime validation was identified during this documentation pass.
### Purpose
Provides history retrieval, message content updating, message deletion, and history branch truncation.
### Evidence summary
- `routes/history/history_routes.py``@router.get('/api/history/{session_id}')` — Fetches message history timeline for a session.
- `routes/history_routes.py``_sys.modules[__name__] = _canonical` — Backward-compatibility shim module.
### Unknowns
- Truncating messages re-indexes context window and clears cached tool calls.
## CHAT-004 — File & Multimodal Attachment Handling
- **Domain**: `chat`
- **Status**: `verified`
- **Evidence Maturity**: `E0`
- **Commit Verified**: `d8a2059df8e53bc7275c45339849d14c8651e73c`
- **Runtime Validation**: not-required — No separate environment-dependent runtime validation was identified during this documentation pass.
### Purpose
Handles uploading, mime validation, image preview, vision encoding, and file attachments in chat messages.
### Evidence summary
- `routes/upload_routes.py``@router.post('')` — Accepts multi-part file uploads and generates vision metadata.
- `src/upload_handler.py``UploadHandler.save_file` — Validates upload size and atomicity on disk.
### Unknowns
- Large file uploads may consume server disk space if cleanup task fails.
## CHAT-005 — Chat Message Search
- **Domain**: `chat`
- **Status**: `verified`
- **Evidence Maturity**: `E0`
- **Commit Verified**: `d8a2059df8e53bc7275c45339849d14c8651e73c`
- **Runtime Validation**: not-required — No separate environment-dependent runtime validation was identified during this documentation pass.
### Purpose
Enables full-text keyword search across stored chat messages and sessions.
### Evidence summary
- `routes/search_routes.py``setup_search_routes` — Registers chat message search endpoint.
- `src/session_search.py``search_sessions` — Executes query matching against session transcripts.
### Unknowns
- Full table scans on un-indexed text columns for very large databases.
## CHAT-006 — System Prompts & Preset Management
- **Domain**: `chat`
- **Status**: `verified`
- **Evidence Maturity**: `E0`
- **Commit Verified**: `d8a2059df8e53bc7275c45339849d14c8651e73c`
- **Runtime Validation**: not-required — No separate environment-dependent runtime validation was identified during this documentation pass.
### Purpose
Provides creation, selection, and customization of system prompt presets for chat sessions.
### Evidence summary
- `routes/preset_routes.py``setup_preset_routes` — API routes for listing and modifying system prompt presets.
- `src/preset_manager.py``PresetManager` — Disk-backed manager for prompt presets.
### Unknowns
- Invalid JSON syntax in user presets file can corrupt preset loading.
## CHAT-007 — Emoji Rendering & Twemoji SVG Proxy
- **Domain**: `chat`
- **Status**: `verified`
- **Evidence Maturity**: `E0`
- **Commit Verified**: `d8a2059df8e53bc7275c45339849d14c8651e73c`
- **Runtime Validation**: not-required — No separate environment-dependent runtime validation was identified during this documentation pass.
### Purpose
Proxies Twemoji SVG icons locally to render flat SVG emojis in message text without external CDN dependencies.
### Evidence summary
- `routes/emoji_routes.py``setup_emoji_routes` — Serves locally cached Twemoji SVGs.
### Unknowns
- First request fetches SVG from remote CDN before caching locally.
## CHAT-008 — Input History Recall (Arrow Up)
- **Domain**: `chat`
- **Status**: `verified`
- **Evidence Maturity**: `E0`
- **Commit Verified**: `d8a2059df8e53bc7275c45339849d14c8651e73c`
- **Runtime Validation**: not-required — No separate environment-dependent runtime validation was identified during this documentation pass.
### Purpose
Allows users to cycle through previously sent prompt messages in the chat composer input using Arrow-Up/Down keys.
### Evidence summary
- `static/js/composerArrowUpRecall.js``initComposerRecall` — Listens for ArrowUp keypress on composer textarea.
### Unknowns
- Client-side browser storage limits.
## CHAT-009 — Context Window Compaction & Truncation
- **Domain**: `chat`
- **Status**: `verified`
- **Evidence Maturity**: `E0`
- **Commit Verified**: `d8a2059df8e53bc7275c45339849d14c8651e73c`
- **Runtime Validation**: not-required — No separate environment-dependent runtime validation was identified during this documentation pass.
### Purpose
Compacts session transcript history when prompt size exceeds context limits using summarization.
### Evidence summary
- `routes/history/history_routes.py``@router.post('/api/session/{session_id}/compact')` — Triggers context summarization and compaction.
- `src/context_compactor.py``compact_context` — Executes context token pruning and summary generation.
### Unknowns
- Aggressive compaction may discard subtle user instructions.