メインコンテンツへスキップ
query() には 2 つのモデル選択モードがあります:
  • 固定モデル(デフォルト):セッション全体で 1 つのモデルを使用します。
  • 動的選択:LLM リクエストごとにコールバック関数を呼び出してモデルを返します。用途(メイン会話、サブエージェント、コンテキスト圧縮など)に応じて異なるモデルにルーティングしたり、BYOK 認証情報を返して自分の API キーを使うことができます。
2 つのモードは排他的です:コールバックを渡すと動的選択モードに切り替わり、固定モデル設定は無視されます。

固定モデル

モデルオプションで指定します。省略するとアカウントのデフォルトが使われます:
import { qodercliAuth, query } from '@qoder-ai/qoder-agent-sdk';

const q = query({
  prompt: 'Analyze this code',
  options: {
    auth: qodercliAuth(),
    model: 'performance',
  },
});

動的選択

LLM リクエストごとに呼び出されるコールバック関数を提供します:
import { qodercliAuth, query, type ModelPolicyProvider } from '@qoder-ai/qoder-agent-sdk';

const resolveModel: ModelPolicyProvider = (context) => {
  return { model: 'performance' };
};

const q = query({
  prompt: 'Analyze this code',
  options: {
    auth: qodercliAuth(),
    resolveModel,
  },
});
コールバックの入力にはリクエストの用途、セッション情報、および現在利用可能なモデルリストが含まれます。

用途別のルーティング

用途ごとに異なるモデルを使用します:
const resolveModel: ModelPolicyProvider = (context) => {
  switch (context.purpose) {
    case 'main':       return { model: 'performance' };
    case 'subagent':   return { model: 'efficient' };
    case 'compact':    return { model: 'lite' };
    default:           return { model: 'auto' };
  }
};
用途はメイン会話、サブエージェント、コンテキスト圧縮、WebFetch、画像生成などのシナリオをカバーします。完全な値については SDK References を参照してください。

タイムアウト

コールバックにはデフォルトのタイムアウト(ミリ秒単位)があります。コールバックがリモート I/O を行う場合は緩和できます:
{ resolveModel, resolveModelTimeoutMs: 800 }

BYOK:自分の API キーを使用

コールバックは BYOK 認証情報オブジェクトを返すこともできます——このリクエストはサードパーティのプロバイダーにルーティングされます:
const resolveModel: ModelPolicyProvider = () => ({
  model: {
    provider: 'bailian',
    model: 'qwen3.5-plus-cp',
    api_key: process.env.MY_API_KEY!,
  },
});
利用可能なプロバイダー / モデルのカタログはランタイムメソッドで取得でき、フロントエンドはこれを使って選択 UI と API キー入力フィールドをレンダリングできます。 ユーザー提供の BYOK 認証情報を resolveModel で使う前に、CLI 経由で provider / model / API-key の組み合わせを検証できます:
const q = query({
  prompt: 'Validate BYOK configuration',
  options: { auth: qodercliAuth() },
});

const ok = await q.validateByokModel({
  provider: 'openai',
  model: 'gpt-4o',
  api_key: process.env.MY_API_KEY!,
  url: 'https://api.openai.com/v1',
  style: 'openai',
});

if (ok === false) {
  throw new Error('Invalid BYOK configuration');
}
実行中の CLI が BYOK 検証に対応していない場合、このメソッドは null を返します。

ランタイム操作

セッション実行中にアカウントで現在利用可能なモデルリストを取得できます:
import { qodercliAuth, query } from '@qoder-ai/qoder-agent-sdk';

const q = query({
  prompt: '...',
  options: { auth: qodercliAuth() },
});

const models = await q.getAvailableModels();
for (const m of models) {
  console.log(`${m.value}\t${m.displayName}\t${m.description}`);
}
ModelInfo には、バックエンドが返す場合に利用可能状態、context_configthinking_config などの詳細なモデルメタデータも含まれます。 また、固定モデルモードで現在のモデルを切り替えたり、BYOK プロバイダーカタログを取得したり、BYOK モデル設定を検証したりできます。具体的なメソッドシグネチャは SDK References を参照してください。

エラー処理

動的選択モードには自動フォールバックがありません——コールバックのタイムアウト、例外、空モデルの返却はすべてクエリを失敗させます。コールバック内部で自前にフォールバックすることを推奨します:
const resolveModel: ModelPolicyProvider = async (context) => {
  try {
    const policy = await fetchRemotePolicy(context);
    return { model: policy.model };
  } catch {
    return { model: 'auto' };   // フォールバック、空にしてはいけない
  }
};
完全なフィールド・型定義は SDK References を参照してください。