initial_commit

This commit is contained in:
2026-06-01 20:16:53 +09:00
commit 903d34761c
31 changed files with 1123 additions and 0 deletions
+49
View File
@@ -0,0 +1,49 @@
# アーキテクチャ概要
## 全体構成
```
フロントエンド (Vue 3 + TypeScript + Vite, port 5173)
↕ REST / SSE
バックエンド (FastAPI + Python, port 8000)
↕
SQLite (playchat.db)
↕
LiteLLM → OpenAI / Anthropic / Ollama (任意のLLM)
```
## バックエンド
### エントリーポイント
`app/main.py` — FastAPI インスタンス作成、CORS 設定、DB 初期化、ルーター登録。
### ルーター
| ファイル | エンドポイント | 役割 |
|---|---|---|
| `app/api/chat.py` | `POST /chat/stream` | SSE でストリーミング応答 |
| `app/api/chat.py` | `GET /chat/sessions` | セッション一覧 |
| `app/api/chat.py` | `DELETE /chat/sessions/{id}` | セッション削除 |
| `app/api/memory.py` | `GET /memory/{session_id}` | メモリ一覧 |
| `app/api/memory.py` | `DELETE /memory/{id}` | メモリ削除 |
### メモリ機構
- **短期メモリ**: セッション内のすべてのメッセージをコンテキストとして送信
- **長期メモリ**: メッセージ数が `MEMORY_SUMMARIZE_THRESHOLD`(デフォルト20) を超えると古い半分をLLMで要約し `memories` テーブルに保存
- 要約はシステムメッセージとして次回以降のコンテキスト先頭に注入される
### LLM 接続
`app/core/llm.py` が LiteLLM を薄くラップ。モデル名は `DEFAULT_MODEL` 環境変数で制御。
ローカルの Ollama は `ollama/llama3` のように `ollama/` プレフィックスで指定。
## フロントエンド
### 状態管理
`src/stores/chat.ts` (Pinia) が全状態を保持:
- `sessions` — バックエンドから取得したセッション一覧
- `messages` — 現在セッションの表示用メッセージ配列
- `isStreaming` — SSE 受信中フラグ
- `selectedModel` — UI で選択中のモデル
### SSE ストリーミング
`src/api/client.ts` の `streamChat()` が fetch + ReadableStream で SSE を受信。
チャンクは3種類: `session_id`(新規セッションID通知)、`chunk`(テキスト断片)、`done`(完了)。