GalGame API
プレフィックス: /api
GalGame モードのエンドポイントです。直近の対話をもとに、プレイヤーが選べる分岐返信候補を 3 つ生成します。ビジュアルノベルの選択肢メニューのような形式です。GalGame モードのトグルがオンのとき、React チャットウィンドウが猫娘のターン完了後にこのエンドポイントを呼び出します。
返信候補
POST /api/galgame/options
プレイヤー向けに、スタイルごとに 1 つずつ計 3 つの返信候補を生成します:
- A —— 真面目で地に足のついた返信:話題を逸らさず事実ベースで答え、ロールプレイはしません。
- B —— 温かく愛情にあふれた返信:柔らかい口調で気づかいを表します。
- C —— 自由奔放で想像力豊かな返信:遊び心のある「もしも」、ファンタジー的な設定、風変わりなユーモア。
ボディ:
{
"messages": [
{ "role": "user", "text": "..." },
{ "role": "assistant", "text": "..." }
],
"language": "en",
"lanlan_name": "character_name",
"master_name": "player_name"
}messages—— 直近の対話。各エントリはrole("assistant"または"user")とtext文字列を持ちます。直近の数ターンのみが保持され、最後のターンは assistant でなければなりません。そうでない場合、リクエストは拒否されます。language—— 任意。短い言語コード(例:"en"、"zh"、"ja")。省略した場合は最新メッセージから言語を検出します。lanlan_name—— 任意。キャラクター名。省略時は設定済みのキャラクター、さらにデフォルトのプレースホルダーへフォールバックします。master_name—— 任意。プレイヤー名。省略時は設定済みの値、さらにデフォルトのプレースホルダーへフォールバックします。
レスポンス:
{
"success": true,
"options": [
{ "label": "A", "text": "..." },
{ "label": "B", "text": "..." },
{ "label": "C", "text": "..." }
]
}INFO
このエンドポイントは決してハードフェイルしない設計です。生成タイムアウト、モデル/パースエラー、または summary モデル未設定の場合でも、success: true を返し、あらかじめ用意されたフォールバック候補と "fallback": true フラグを付与します。モデルが A/B/C のうち一部のスタイルしか返さなかった場合、欠けたスロットはフォールバックで補われ、レスポンスには "partial": true と missing_labels リストが付きます。
INFO
返信生成は summary モデルティアで実行されます。summary モデルが未設定の場合は、ただちにフォールバック候補を返します。セッションのテイクオーバーが有効なとき(例:音声入力がゲームロジックへ再ルーティングされた場合)は、生成をスキップし、"reason": "session_takeover" を付けたフォールバック候補を返します。
リクエストは次の場合に HTTP 400 で拒否されます:ボディが有効な JSON でない("error": "invalid_json")、オブジェクトでない("error": "invalid_payload")、または返信対象となる assistant ターンが存在しない("error": "no_assistant_turn")。
