diff --git a/CHANGELOG.md b/CHANGELOG.md index 4fcc05f..44de48b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## Franklin Agent 3.49.14 — Gemini 4 Argon is selectable and priced + +`google/gemini-4-argon`, Google's frontier reasoning model, is live on Base and +Solana at $2/$10 per 1M tokens (Google's rate through 2026-11-30; it moves to +$4/$20 on 2026-12-01). Franklin now prices it offline, treats it as +vision-capable so an image turn on Argon stays on Argon, and resolves +`argon`, `gemini-4` and `gemini-4-argon` to it. + +Nothing routes to it by default: bare `gemini` stays on 3.1 Pro and no smart +routing tier changes. Picker membership comes from `@blockrun/model-catalog` +and follows that package's next release. + ## Franklin Agent 3.49.13 — DeepSeek V4.1 Flash, and the model lists match the live catalog Bare `deepseek` now names `deepseek/deepseek-v4.1-flash`, the gateway's own id diff --git a/package-lock.json b/package-lock.json index 0cc4e2c..0dff086 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@blockrun/franklin", - "version": "3.49.13", + "version": "3.49.14", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@blockrun/franklin", - "version": "3.49.13", + "version": "3.49.14", "license": "Apache-2.0", "workspaces": [ "apps/desktop" diff --git a/package.json b/package.json index d2af4ff..0014697 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@blockrun/franklin", - "version": "3.49.13", + "version": "3.49.14", "description": "Franklin Agent — The AI agent with a wallet. Spends USDC autonomously to get real work done. Pay per action, no subscriptions.", "type": "module", "exports": { diff --git a/src/pricing.ts b/src/pricing.ts index 5c0b3e1..5aeca5a 100644 --- a/src/pricing.ts +++ b/src/pricing.ts @@ -122,6 +122,9 @@ const LEGACY_PRICING: Record=200K input) diff --git a/src/router/vision.ts b/src/router/vision.ts index 67c2fa9..2ecb1a6 100644 --- a/src/router/vision.ts +++ b/src/router/vision.ts @@ -79,6 +79,7 @@ const VISION_MODELS = new Set([ 'xiaomi/mimo-v2.5', 'mistral/mistral-large-4', // Google — vision baked into every Gemini SKU we surface (flash-lite excepted) + 'google/gemini-4-argon', 'google/gemini-3.1-pro', 'google/gemini-3.6-flash', 'google/gemini-3.5-flash', diff --git a/src/ui/model-picker.ts b/src/ui/model-picker.ts index 6659b77..87a3ba5 100644 --- a/src/ui/model-picker.ts +++ b/src/ui/model-picker.ts @@ -131,6 +131,12 @@ const LEGACY_SHORTCUTS: Record = { 'gemini-3.5-flash-lite': 'google/gemini-3.5-flash-lite', 'gemini-3.1-flash-lite': 'google/gemini-3.1-flash-lite', 'gemini-2.5-flash-lite': 'google/gemini-2.5-flash-lite', + // Gemini 4 Argon (live 2026-10-20, both chains) — explicit pins only. Bare + // `gemini` stays on 3.1 Pro until Argon has production history; moving it + // would change which model (and price) existing users get. + argon: 'google/gemini-4-argon', + 'gemini-4': 'google/gemini-4-argon', + 'gemini-4-argon': 'google/gemini-4-argon', 'gemini-3': 'google/gemini-3.1-pro', 'gemini-3.1': 'google/gemini-3.1-pro', // xAI — grok-4.5 is the public flagship since 2026-07-14; `grok` follows it diff --git a/test/local.mjs b/test/local.mjs index 2ce5e7c..433e2b5 100644 --- a/test/local.mjs +++ b/test/local.mjs @@ -12493,6 +12493,7 @@ test('catalog sync 2026-10-20: every live gateway id is priced and pinnable', as const live = { 'openai/gpt-6.1-sol': [2, 10, 'gpt-6.1-sol'], 'google/gemini-3.8-flash': [0.75, 3.75, 'gemini-3.8-flash'], + 'google/gemini-4-argon': [2, 10, 'gemini-4-argon'], 'deepseek/deepseek-v4-flash-vision-exp': [0.3, 1.2, 'deepseek-vision'], 'qwen/qwen3.8-max': [2, 6, 'qwen3.8-max'], 'qwen/qwen3.8-flash': [0.15, 0.47, 'qwen3.8-flash'], @@ -12523,6 +12524,8 @@ test('2026-10-20: bare flash / glm follow their flagships, price-neutral and on const { MODEL_PRICING } = await import('../dist/pricing.js'); const { isVisionModel } = await import('../dist/router/vision.js'); assert.equal(resolveModel('flash'), 'google/gemini-3.8-flash'); + assert.equal(resolveModel('argon'), 'google/gemini-4-argon'); + assert.equal(resolveModel('gemini'), 'google/gemini-3.1-pro', 'bare gemini stays on 3.1 Pro'); assert.equal(resolveModel('gemini-flash'), 'google/gemini-3.8-flash'); assert.equal(resolveModel('gemini-3.6'), 'google/gemini-3.6-flash', '3.6 stays pinnable'); assert.deepEqual(MODEL_PRICING['google/gemini-3.8-flash'], MODEL_PRICING['google/gemini-3.6-flash']); @@ -12534,7 +12537,7 @@ test('2026-10-20: bare flash / glm follow their flagships, price-neutral and on assert.equal(resolveModel('qwen-max'), 'qwen/qwen3.7-max'); // A vision-tagged new id must be recognised as vision, or an image turn on // `/model flash` would be swapped to a "vision sibling" the user never chose. - for (const id of ['openai/gpt-6.1-sol', 'google/gemini-3.8-flash', 'deepseek/deepseek-v4-flash-vision-exp', + for (const id of ['openai/gpt-6.1-sol', 'google/gemini-3.8-flash', 'google/gemini-4-argon', 'deepseek/deepseek-v4-flash-vision-exp', 'qwen/qwen3.8-flash', 'xiaomi/mimo-v2.5', 'mistral/mistral-large-4']) { assert.equal(isVisionModel(id), true, `${id} is vision-tagged in the live catalog`); }