Skip to content

GalGame API

プレフィックス: /api

GalGame モードのエンドポイントです。直近の対話をもとに、プレイヤーが選べる分岐返信候補を 3 つ生成します。ビジュアルノベルの選択肢メニューのような形式です。GalGame モードのトグルがオンのとき、React チャットウィンドウが猫娘のターン完了後にこのエンドポイントを呼び出します。

返信候補

POST /api/galgame/options

プレイヤー向けに、スタイルごとに 1 つずつ計 3 つの返信候補を生成します:

  • A —— 真面目で地に足のついた返信:話題を逸らさず事実ベースで答え、ロールプレイはしません。
  • B —— 温かく愛情にあふれた返信:柔らかい口調で気づかいを表します。
  • C —— 自由奔放で想像力豊かな返信:遊び心のある「もしも」、ファンタジー的な設定、風変わりなユーモア。

ボディ:

json
{
  "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 —— 任意。プレイヤー名。省略時は設定済みの値、さらにデフォルトのプレースホルダーへフォールバックします。

レスポンス:

json
{
  "success": true,
  "options": [
    { "label": "A", "text": "..." },
    { "label": "B", "text": "..." },
    { "label": "C", "text": "..." }
  ]
}

INFO

このエンドポイントは決してハードフェイルしない設計です。生成タイムアウト、モデル/パースエラー、または summary モデル未設定の場合でも、success: true を返し、あらかじめ用意されたフォールバック候補と "fallback": true フラグを付与します。モデルが A/B/C のうち一部のスタイルしか返さなかった場合、欠けたスロットはフォールバックで補われ、レスポンスには "partial": truemissing_labels リストが付きます。

INFO

返信生成は summary モデルティアで実行されます。summary モデルが未設定の場合は、ただちにフォールバック候補を返します。セッションのテイクオーバーが有効なとき(例:音声入力がゲームロジックへ再ルーティングされた場合)は、生成をスキップし、"reason": "session_takeover" を付けたフォールバック候補を返します。

リクエストは次の場合に HTTP 400 で拒否されます:ボディが有効な JSON でない("error": "invalid_json")、オブジェクトでない("error": "invalid_payload")、または返信対象となる assistant ターンが存在しない("error": "no_assistant_turn")。

MIT ライセンスの下で公開。