Merge pull request 'Set the OpenAI-compatible endpoint from the settings panel' (#8) from feature/configurable-openai-base-url into main

Reviewed-on: #8
This commit was merged in pull request #8.
This commit is contained in:
2026-08-23 14:14:16 +00:00
6 changed files with 27 additions and 2 deletions
+1
View File
@@ -146,6 +146,7 @@ LLM に渡すコンテキストは `app/core/memory_kb/memory.py` の `get_conte
| `CORS_ORIGINS` | `http://localhost:5173` | 許可する CORS オリジン | | `CORS_ORIGINS` | `http://localhost:5173` | 許可する CORS オリジン |
| `DEBUG` | `false` | LiteLLM デバッグログの有効化 | | `DEBUG` | `false` | LiteLLM デバッグログの有効化 |
| `OPENAI_API_KEY` | — | OpenAI API キー | | `OPENAI_API_KEY` | — | OpenAI API キー |
| `OPENAI_API_BASE` / `OPENAI_BASE_URL` | — | OpenAI 互換エンドポイントの接続先(ローカルの llama-server / Ollama 用)。設定したままだと `gpt-*` を選んでも本家 OpenAI に繋がらない。GUI 設定画面から実行時変更可 |
| `ANTHROPIC_API_KEY` | — | Anthropic API キー | | `ANTHROPIC_API_KEY` | — | Anthropic API キー |
| `OLLAMA_API_BASE` | `http://localhost:11434` | Ollama エンドポイント | | `OLLAMA_API_BASE` | `http://localhost:11434` | Ollama エンドポイント |
| `NOTES_TOOL_CONTENT_LIMIT` | `4000` | `read_note` が 1 回に返す本文の最大文字数 | | `NOTES_TOOL_CONTENT_LIMIT` | `4000` | `read_note` が 1 回に返す本文の最大文字数 |
+6
View File
@@ -2,6 +2,12 @@
DEFAULT_MODEL=gpt-5.4 DEFAULT_MODEL=gpt-5.4
# OpenAI # OpenAI
OPENAI_API_KEY=sk-... OPENAI_API_KEY=sk-...
# OpenAI互換エンドポイントに向ける場合だけ設定する(ローカルの llama-server / Ollama など)。
# 設定したままにすると、gpt-* のモデルを選んでも接続先がそちらのままになり、
# 本家OpenAIには繋がらない(litellm は OPENAI_API_BASE、OpenAI SDK は OPENAI_BASE_URL を見る)。
# サーバーにデプロイする際はこの2行を消し忘れないこと。GUIの設定画面からも変更できる。
# OPENAI_API_BASE=http://localhost:11434/v1
# OPENAI_BASE_URL=http://localhost:11434/v1
# Anthropic # Anthropic
ANTHROPIC_API_KEY=sk-ant-... ANTHROPIC_API_KEY=sk-ant-...
# Ollama (ローカル) — APIキー不要、モデル名は ollama/llama3 形式で指定 # Ollama (ローカル) — APIキー不要、モデル名は ollama/llama3 形式で指定
+7
View File
@@ -7,6 +7,11 @@ from app.db.models import AppSetting
# GUIから編集可能な環境変数の許可リスト。ここに無いキーは save()/clear() で拒否する。 # GUIから編集可能な環境変数の許可リスト。ここに無いキーは save()/clear() で拒否する。
CONFIGURABLE_KEYS = [ CONFIGURABLE_KEYS = [
"OPENAI_API_KEY", "OPENAI_API_KEY",
# OpenAI 互換エンドポイント。ローカルの llama-server / Ollama を向けたまま忘れると、
# OpenAI のモデルを選んでも接続先がそちらのままになる(litellm は OPENAI_API_BASE、
# OpenAI SDK は OPENAI_BASE_URL を見るので両方を出しておく)。
"OPENAI_BASE_URL",
"OPENAI_API_BASE",
"ANTHROPIC_API_KEY", "ANTHROPIC_API_KEY",
"AWS_ACCESS_KEY_ID", "AWS_ACCESS_KEY_ID",
"AWS_SECRET_ACCESS_KEY", "AWS_SECRET_ACCESS_KEY",
@@ -22,6 +27,8 @@ CONFIGURABLE_KEYS = [
# 秘匿情報ではないキー。値をマスクせずそのまま返し、GUIでも通常のテキスト入力として扱う。 # 秘匿情報ではないキー。値をマスクせずそのまま返し、GUIでも通常のテキスト入力として扱う。
# モデル名やURLは「今どれが効いているか」が見えないと設定しづらいため。 # モデル名やURLは「今どれが効いているか」が見えないと設定しづらいため。
NON_SECRET_KEYS = { NON_SECRET_KEYS = {
"OPENAI_BASE_URL",
"OPENAI_API_BASE",
"AWS_REGION_NAME", "AWS_REGION_NAME",
"OLLAMA_API_BASE", "OLLAMA_API_BASE",
"LOCAL_KB_EMBEDDING_MODEL", "LOCAL_KB_EMBEDDING_MODEL",
+5
View File
@@ -113,6 +113,11 @@ nano backend/.env # APIキーやモデル名など本番用の値を設定
`backend/.env` はコンテナに `env_file` として渡され、Git 管理対象外(`.gitignore` 済み)なので直接編集してよい。 `backend/.env` はコンテナに `env_file` として渡され、Git 管理対象外(`.gitignore` 済み)なので直接編集してよい。
**ローカルの `.env` をそのまま持ち込むときの注意:** `OPENAI_BASE_URL` / `OPENAI_API_BASE` を
ローカルの llama-server や Ollama に向けていると、サーバー上では存在しない宛先に接続しに行くため、
`gpt-*` のモデルを選んでも litellm が「Connection Error」になる。サーバーの `.env` からは消しておくこと
(設定画面の「OpenAI 互換エンドポイント」からも上書きできる)。
### GUIからのAPIキー管理 ### GUIからのAPIキー管理
初回起動後は、`OPENAI_API_KEY` / `ANTHROPIC_API_KEY` / AWS認証情報などをSSHで`.env`を編集し直さなくても、 初回起動後は、`OPENAI_API_KEY` / `ANTHROPIC_API_KEY` / AWS認証情報などをSSHで`.env`を編集し直さなくても、
+6 -2
View File
@@ -164,8 +164,12 @@ Discord 連携は [discord-bot.md](discord-bot.md)、ノートの操作方法は
- モデルのプルダウンは `model_presets` テーブル由来で、初回起動時に既定の一覧がシードされる。 - モデルのプルダウンは `model_presets` テーブル由来で、初回起動時に既定の一覧がシードされる。
設定画面からラベル/モデル文字列を追加・編集・削除できる(重複は 400 で弾く)。 設定画面からラベル/モデル文字列を追加・編集・削除できる(重複は 400 で弾く)。
- 設定画面では API キー類を**再起動なしで**変更できる。 - 設定画面では API キー類を**再起動なしで**変更できる。
- 変更できるのは許可リストにあるキーだけ(`OPENAI_API_KEY` / `ANTHROPIC_API_KEY` / AWS 系 / - 変更できるのは許可リストにあるキーだけ(`OPENAI_API_KEY` / `OPENAI_BASE_URL` / `OPENAI_API_BASE` /
`OLLAMA_API_BASE` / `TAVILY_API_KEY` / `LOCAL_KB_EMBEDDING_MODEL` / `SEARCH_SUMMARY_MODEL`) `ANTHROPIC_API_KEY` / AWS 系 / `OLLAMA_API_BASE` / `TAVILY_API_KEY` /
`LOCAL_KB_EMBEDDING_MODEL` / `SEARCH_SUMMARY_MODEL`)
- `OPENAI_BASE_URL` / `OPENAI_API_BASE` は OpenAI 互換エンドポイント(ローカルの llama-server や Ollama)
に向けるためのもの。向けたままだと `gpt-*` のモデルを選んでも本家 OpenAI には繋がらず、
litellm からは「Connection Error」に見える
- API キー類は末尾 4 文字だけを見せるマスク表示。モデル名や URL(`settings_store.NON_SECRET_KEYS`)は - API キー類は末尾 4 文字だけを見せるマスク表示。モデル名や URL(`settings_store.NON_SECRET_KEYS`)は
現在値をそのまま表示し、入力欄も伏せ字にしない(今どれが効いているか分からないと設定しづらいため) 現在値をそのまま表示し、入力欄も伏せ字にしない(今どれが効いているか分からないと設定しづらいため)
- 空欄で保存すると「変更なし」扱い - 空欄で保存すると「変更なし」扱い
@@ -37,6 +37,8 @@ async function addModelPreset() {
const KEY_LABELS: Record<string, string> = { const KEY_LABELS: Record<string, string> = {
OPENAI_API_KEY: 'OpenAI APIキー', OPENAI_API_KEY: 'OpenAI APIキー',
OPENAI_BASE_URL: 'OpenAI 互換エンドポイント (OPENAI_BASE_URL)',
OPENAI_API_BASE: 'OpenAI 互換エンドポイント (OPENAI_API_BASE)',
ANTHROPIC_API_KEY: 'Anthropic APIキー', ANTHROPIC_API_KEY: 'Anthropic APIキー',
AWS_ACCESS_KEY_ID: 'AWS Access Key ID', AWS_ACCESS_KEY_ID: 'AWS Access Key ID',
AWS_SECRET_ACCESS_KEY: 'AWS Secret Access Key', AWS_SECRET_ACCESS_KEY: 'AWS Secret Access Key',