Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -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": {
Expand Down
3 changes: 3 additions & 0 deletions src/pricing.ts
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,9 @@ const LEGACY_PRICING: Record<string, { input: number; output: number; perCall?:
'google/gemini-3.8-flash': { input: 0.75, output: 3.75 }, // live 2026-10-20
'google/gemini-2.5-pro': { input: 1.25, output: 10.0 },
'google/gemini-3.1-pro': { input: 2.0, output: 12.0 },
// Gemini 4 Argon — live 2026-10-20 on both chains. Google's intro rate;
// it moves to $4/$20 on 2026-12-01, re-price it then.
'google/gemini-4-argon': { input: 2.0, output: 10.0 },
// xAI
'xai/grok-4.3': { input: 1.25, output: 2.5 }, // 1M ctx; demoted from flagship 2026-07-14
'xai/grok-4.7': { input: 2.0, output: 6.0 }, // newest Grok, 500K ctx (2x at >=200K input)
Expand Down
1 change: 1 addition & 0 deletions src/router/vision.ts
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ const VISION_MODELS = new Set<string>([
'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',
Expand Down
6 changes: 6 additions & 0 deletions src/ui/model-picker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,12 @@ const LEGACY_SHORTCUTS: Record<string, string> = {
'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
Expand Down
5 changes: 4 additions & 1 deletion test/local.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -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'],
Expand Down Expand Up @@ -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']);
Expand All @@ -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`);
}
Expand Down
Loading