diff --git a/action.yml b/action.yml index b621142..0f02c2c 100644 --- a/action.yml +++ b/action.yml @@ -20,6 +20,11 @@ inputs: bot-token: description: API key or token for the selected bot required: false + model: + description: >- + Model for the selected bot. Defaults to `claude-sonnet-5` or + `gpt-5.6-terra`, the mid tiers, which cover reviews and fixes. + required: false runs: using: composite @@ -40,6 +45,7 @@ runs: ACTION_PATH: ${{ gitea.action_path }} BOT_TYPE: ${{ inputs.bot-type }} BOT_TOKEN: ${{ inputs.bot-token }} + MODEL: ${{ inputs.model }} GITEA_API_URL: ${{ gitea.api_url }} GITEA_REPOSITORY: ${{ gitea.repository }} GITEA_TOKEN: ${{ inputs.author-token }} diff --git a/run.ts b/run.ts index 0850f86..21c358c 100644 --- a/run.ts +++ b/run.ts @@ -20,6 +20,13 @@ const EVENT = env("EVENT_NAME"); const AUTHOR_TOKEN = env("GITEA_TOKEN"); const REVIEWER_TOKEN = env("REVIEWER_TOKEN"); const RULES_PATH = "repos/commons/code-rules/raw/README.md"; +// The mid tiers: a run follows a fixed template and the project's checks. +const DEFAULT_MODELS: Record = { + claude: "claude-sonnet-5", + codex: "gpt-5.6-terra", +}; +const model = (bot: string): string => + Deno.env.get("MODEL") || DEFAULT_MODELS[bot]; // The reviewer token is withheld so the agent cannot approve as the bot. const { REVIEWER_TOKEN: _, ...agentEnv } = Deno.env.toObject(); @@ -134,7 +141,7 @@ async function runClaude(prompt: string): Promise { "--print", "--dangerously-skip-permissions", "--model", - "claude-fable-5", + model("claude"), "--output-format", "stream-json", "--verbose", @@ -199,7 +206,7 @@ async function runCodex(prompt: string): Promise { args: [ "exec", "--model", - "gpt-5.5", + model("codex"), "--dangerously-bypass-approvals-and-sandbox", "--output-last-message", file,