Add system memory monitoring, Bedrock support, and Discord integrations
- Add CPU/GPU memory monitoring endpoint and frontend widget - Add Amazon Bedrock model support (API key / inference profiles) plus model selector entries - Add Discord weather/laundry notification job (JMA forecast + LLM-generated message) - Add Discord bot that replies to mentions via the configured LLM, with weather-aware context - Add scheduled "useless tips" job with separate webhook and quiet-hours skip - Switch FastAPI startup to lifespan handler, log viewer, markdown rendering, and toast UI additions Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -4,8 +4,8 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
|
||||
|
||||
## プロジェクト概要
|
||||
|
||||
Python (FastAPI) バックエンド + Vue 3 (TypeScript) フロントエンドのチャットアプリ。
|
||||
LLM は LiteLLM 経由で OpenAI / Anthropic / Ollama など任意のプロバイダーを統一APIで扱い、会話履歴とメモリは SQLite に永続化する。
|
||||
Python (FastAPI) バックエンド + Vue 3 (TypeScript) フロントエンドのチャットアプリ。
|
||||
LLM は LiteLLM 経由で OpenAI / Anthropic / Ollama など任意のプロバイダーを統一 API で扱い、会話履歴とメモリは SQLite に永続化する。
|
||||
|
||||
## コマンド
|
||||
|
||||
@@ -14,17 +14,15 @@ LLM は LiteLLM 経由で OpenAI / Anthropic / Ollama など任意のプロバ
|
||||
```powershell
|
||||
Set-Location backend
|
||||
|
||||
# 依存インストール (uv 推奨)
|
||||
uv sync
|
||||
# または
|
||||
pip install -e .
|
||||
# 依存インストール (SSL プロキシ環境では --native-tls が必要)
|
||||
uv sync --native-tls
|
||||
|
||||
# 開発サーバー起動
|
||||
uvicorn app.main:app --reload
|
||||
uv run uvicorn app.main:app --reload
|
||||
|
||||
# テスト
|
||||
pytest
|
||||
pytest tests/test_chat.py # 単一ファイル
|
||||
pytest tests/test_chat.py # 単一ファイル
|
||||
```
|
||||
|
||||
### フロントエンド
|
||||
@@ -50,7 +48,7 @@ npm run type-check
|
||||
```powershell
|
||||
Set-Location backend
|
||||
Copy-Item .env.example .env
|
||||
# .env を編集してAPIキーとモデル名を設定
|
||||
# .env を編集して API キーとモデル名を設定
|
||||
```
|
||||
|
||||
## アーキテクチャ
|
||||
@@ -58,27 +56,45 @@ Copy-Item .env.example .env
|
||||
詳細は `docs/architecture.md` を参照。
|
||||
|
||||
```
|
||||
frontend (Vue3+Pinia, :5173)
|
||||
↕ REST + SSE
|
||||
frontend (Vue3 + Pinia, :5173)
|
||||
↕ REST + SSE (Vite proxy)
|
||||
backend (FastAPI, :8000)
|
||||
├── app/api/ ルーター (chat.py, memory.py)
|
||||
├── app/core/ ビジネスロジック (llm.py, memory.py, config.py)
|
||||
└── app/db/ SQLAlchemy モデル・DB接続
|
||||
├── app/api/ チャット・メモリ・ログ のルーター
|
||||
├── app/core/ LLM ラッパー・メモリロジック・設定
|
||||
└── app/db/ SQLAlchemy モデル・DB 接続
|
||||
↕
|
||||
SQLite (playchat.db) + LiteLLM → 任意のLLM
|
||||
SQLite (playchat.db) + LiteLLM → 任意の LLM
|
||||
```
|
||||
|
||||
### メモリ機構
|
||||
|
||||
- **短期**: セッション内の全メッセージをコンテキストに含める
|
||||
- **長期**: メッセージ数が `MEMORY_SUMMARIZE_THRESHOLD`(デフォルト20) を超えると、古い半分をLLMで要約して `memories` テーブルに保存し、次回以降のシステムプロンプトに注入する
|
||||
- **長期**: メッセージ数が `MEMORY_SUMMARIZE_THRESHOLD`(デフォルト 20)を超えると古い半分を LLM で要約 → `memories` テーブルに保存 → 次回以降のシステムプロンプトに注入
|
||||
|
||||
### SSEストリーミング
|
||||
### SSE ストリーミング
|
||||
|
||||
`POST /chat/stream` が SSE を返す。チャンク種別: `session_id`(新規セッションID)、`chunk`(テキスト断片)、`done`(完了)。
|
||||
フロントは `src/api/client.ts` の `streamChat()` で fetch + ReadableStream により受信。
|
||||
`POST /chat/stream` が SSE を返す。イベント種別: `session_id`(新規セッション ID)/ `chunk`(テキスト断片)/ `done`(完了)/ `error`(エラー)。
|
||||
フロントは `src/api/client.ts` の `streamChat()` で fetch + ReadableStream により受信し、`messages.value[msgIdx]` を reactive proxy 経由で更新する。
|
||||
|
||||
### Markdown レンダリング
|
||||
|
||||
アシスタントメッセージは `marked` + `DOMPurify` でレンダリング。ストリーミング中の未閉じコードフェンスは自動補完してから描画する(`MarkdownContent.vue`)。
|
||||
|
||||
### モデル切替
|
||||
|
||||
`.env` の `DEFAULT_MODEL` またはリクエストの `model` フィールドで指定。
|
||||
ローカル Ollama は `ollama/llama3` 形式で指定、`OLLAMA_API_BASE` でエンドポイントを設定。
|
||||
ローカル Ollama は `ollama/llama3` 形式、`OLLAMA_API_BASE` でエンドポイントを設定。
|
||||
`DEBUG=true` で LiteLLM の詳細ログが有効になる。
|
||||
|
||||
## 環境変数(backend/.env)
|
||||
|
||||
| 変数 | デフォルト | 説明 |
|
||||
|---|---|---|
|
||||
| `DEFAULT_MODEL` | `gpt-5.4` | デフォルト LLM モデル |
|
||||
| `DATABASE_URL` | `sqlite:///./playchat.db` | DB 接続先 |
|
||||
| `MEMORY_SUMMARIZE_THRESHOLD` | `20` | 長期メモリ化するメッセージ数の閾値 |
|
||||
| `CORS_ORIGINS` | `http://localhost:5173` | 許可する CORS オリジン |
|
||||
| `DEBUG` | `false` | LiteLLM デバッグログの有効化 |
|
||||
| `OPENAI_API_KEY` | — | OpenAI API キー |
|
||||
| `ANTHROPIC_API_KEY` | — | Anthropic API キー |
|
||||
| `OLLAMA_API_BASE` | `http://localhost:11434` | Ollama エンドポイント |
|
||||
|
||||
Reference in New Issue
Block a user