Context
@tobiu directive (2026-06-05), surfaced during the business-side COGS / pricing analysis. The remote chat/summary model default is gemini-2.5-flash; Gemini Flash 3.5 is GA. Newer Flash generations are typically cheaper per token AND higher quality — a direct cost lever on the remote-summary leg of the Agent OS cost-to-serve (the managed-deployment COGS model: cheaper remote tokens lower our fully-managed-tier COGS).
The Problem
gemini-2.5-flash is the leaf-default (and residual hardcode) remote chat model across Memory Core session summaries, the Knowledge Base, the REM/Dream remote path, and the demo agents. It is a generation behind GA. For self-hosted/managed deployments paying per-token, the older Flash is both pricier and less capable than current GA. No ticket tracks the bump (verified 2026-06-05: gh issue search + ask_knowledge_base semantic sweep both negative).
The Architectural Reality
The model default flows from the AiConfig reactive SSOT (ADR 0019) leaf, with a few residual hardcoded sites:
ai/config.template.mjs:262 — modelName: leaf('gemini-2.5-flash') (Gemini provider SSOT default)
ai/mcp/server/knowledge-base/config.template.mjs:308 — modelName: leaf('gemini-2.5-flash') (KB)
ai/provider/Gemini.mjs:21 — modelName: 'gemini-2.5-flash' (provider class default)
ai/demo-agents/dev.mjs:37 — const MODEL_NAME = 'gemini-2.5-flash' (demo)
Embeddings (gemini-embedding-001) are a separate surface — out of scope here.
The Fix
Bump the default model string to the latest GA Flash (3.5) across the SSOT leaf + the residual hardcodes. Confirm the EXACT model identifier against the live Gemini API model list at implementation — the 3.5-flash identifier is not yet referenced anywhere in the substrate, so do not assume the string (Google's naming carries dated/variant suffixes). Where a hardcode can be replaced by a leaf-read, prefer that (reduces future drift — cf. #7811, which moved a hardcoded Gemini model name to config once already).
Contract Ledger Matrix
| Target Surface |
Source of Authority |
Proposed Behavior |
Fallback |
Docs |
Evidence |
Gemini modelName leaf |
ai/config.template.mjs:262 / ADR 0019 |
default → latest GA Flash (3.5) |
NEO_* env / per-deployment override unchanged |
config.template comments |
grep-verified default gemini-2.5-flash |
KB modelName leaf |
knowledge-base/config.template.mjs:308 |
default → latest GA Flash (3.5) |
env override unchanged |
config template |
grep-verified |
Neo.ai.provider.Gemini#modelName |
ai/provider/Gemini.mjs:21 |
class default → latest GA Flash (3.5) |
instance config override unchanged |
JSDoc @member |
grep-verified |
Decision Record impact
aligned-with ADR 0019 (AiConfig reactive SSOT — the bump uses the leaf default). Model-promotion governance per the Model-Stats framework (#11601, closed): treat as a promotion of the remote chat model; record capability/cost rationale per that framework if it mandates a Model-Stats entry.
Acceptance Criteria
Out of Scope
- Embedding model (
gemini-embedding-001) bump.
- Local model (
gemma4:31b) changes.
- The broader `# Bump default remote Flash model (gemini-2.5-flash) to latest GA (3.5)
Context
@tobiu directive (2026-06-05), surfaced during the business-side COGS / pricing analysis. The remote chat/summary model default is gemini-2.5-flash; Gemini Flash 3.5 is GA. Newer Flash generations are typically cheaper per token AND higher quality — a direct cost lever on the remote-summary leg of the Agent OS cost-to-serve (the managed-deployment COGS model: cheaper remote tokens lower our fully-managed-tier COGS).
The Problem
gemini-2.5-flash is the leaf-default (and residual hardcode) remote chat model across Memory Core session summaries, the Knowledge Base, the REM/Dream remote path, and the demo agents. It is a generation behind GA. For self-hosted/managed deployments paying per-token, the older Flash is both pricier and less capable than current GA. No ticket tracks the bump (verified 2026-06-05: gh issue search + ask_knowledge_base semantic sweep both negative).
The Architectural Reality
The model default flows from the AiConfig reactive SSOT (ADR 0019) leaf, with a few residual hardcoded sites:
ai/config.template.mjs:262 — modelName: leaf('gemini-2.5-flash') (Gemini provider SSOT default)
ai/mcp/server/knowledge-base/config.template.mjs:308 — modelName: leaf('gemini-2.5-flash') (KB)
ai/provider/Gemini.mjs:21 — modelName: 'gemini-2.5-flash' (provider class default)
ai/demo-agents/dev.mjs:37 — const MODEL_NAME = 'gemini-2.5-flash' (demo)
Embeddings (gemini-embedding-001) are a separate surface — out of scope here.
The Fix
Bump the default model string to the latest GA Flash (3.5) across the SSOT leaf + the residual hardcodes. Confirm the EXACT model identifier against the live Gemini API model list at implementation — the 3.5-flash identifier is not yet referenced anywhere in the substrate, so do not assume the string (Google's naming carries dated/variant suffixes). Where a hardcode can be replaced by a leaf-read, prefer that (reduces future drift — cf. #7811, which moved a hardcoded Gemini model name to config once already).
Contract Ledger Matrix
| Target Surface |
Source of Authority |
Proposed Behavior |
Fallback |
Docs |
Evidence |
Gemini modelName leaf |
ai/config.template.mjs:262 / ADR 0019 |
default → latest GA Flash (3.5) |
NEO_* env / per-deployment override unchanged |
config.template comments |
grep-verified default gemini-2.5-flash |
KB modelName leaf |
knowledge-base/config.template.mjs:308 |
default → latest GA Flash (3.5) |
env override unchanged |
config template |
grep-verified |
Neo.ai.provider.Gemini#modelName |
ai/provider/Gemini.mjs:21 |
class default → latest GA Flash (3.5) |
instance config override unchanged |
JSDoc @member |
grep-verified |
Decision Record impact
aligned-with ADR 0019 (AiConfig reactive SSOT — the bump uses the leaf default). Model-promotion governance per the Model-Stats framework (#11601, closed): treat as a promotion of the remote chat model; record capability/cost rationale per that framework if it mandates a Model-Stats entry.
Acceptance Criteria
Out of Scope
- Embedding model (
gemini-embedding-001) bump.
- Local model (
gemma4:31b) changes.
- The broader -COGS benchmark (tracked via
#12074 / #12065 Sub 8).
- Using Flash 3.5 as a maintainer-reasoning model —
ai/graph/identityRoots.mjs explicitly notes "3.5 Flash is not a Pro replacement"; that is a different use than cheap summarization.
Avoided Traps
- Do NOT hardcode an assumed
gemini-3.5-flash string — the exact identifier must be verified against the live API (dated/variant suffixes are common).
- Do NOT conflate the summary-model bump with the maintainer-peer model choice (Pro vs Flash) — separate concern.
- Do NOT scatter the new string across N hardcodes — prefer the AiConfig leaf SSOT (ADR 0019) to prevent the drift
#7811 already fought once.
Related
#11601 — Model-Stats ADR / model-promotion governance
#7811 — moved hardcoded Gemini model name to config (the SSOT precedent)
#10724 — local chat-API summary provider validation (the qwen3 alternative path)
#12074 / #12065 Sub 8 — gemma4-rem cost benchmark (the cost-measurement context this bump feeds)
Origin Session ID: 4870c6b2-ee28-467c-875a-497b961d2a27
Handoff Retrieval Hint: query_raw_memories("Gemini Flash 2.5 to 3.5 bump COGS remote summary model"); Git anchor: ai/config.template.mjs modelName leaf.
Context
@tobiu directive (2026-06-05), surfaced during the business-side COGS / pricing analysis. The remote chat/summary model default is
gemini-2.5-flash; Gemini Flash 3.5 is GA. Newer Flash generations are typically cheaper per token AND higher quality — a direct cost lever on the remote-summary leg of the Agent OS cost-to-serve (the managed-deployment COGS model: cheaper remote tokens lower our fully-managed-tier COGS).The Problem
gemini-2.5-flashis the leaf-default (and residual hardcode) remote chat model across Memory Core session summaries, the Knowledge Base, the REM/Dream remote path, and the demo agents. It is a generation behind GA. For self-hosted/managed deployments paying per-token, the older Flash is both pricier and less capable than current GA. No ticket tracks the bump (verified 2026-06-05:gh issuesearch +ask_knowledge_basesemantic sweep both negative).The Architectural Reality
The model default flows from the AiConfig reactive SSOT (ADR 0019) leaf, with a few residual hardcoded sites:
ai/config.template.mjs:262—modelName: leaf('gemini-2.5-flash')(Gemini provider SSOT default)ai/mcp/server/knowledge-base/config.template.mjs:308—modelName: leaf('gemini-2.5-flash')(KB)ai/provider/Gemini.mjs:21—modelName: 'gemini-2.5-flash'(provider class default)ai/demo-agents/dev.mjs:37—const MODEL_NAME = 'gemini-2.5-flash'(demo)Embeddings (
gemini-embedding-001) are a separate surface — out of scope here.The Fix
Bump the default model string to the latest GA Flash (3.5) across the SSOT leaf + the residual hardcodes. Confirm the EXACT model identifier against the live Gemini API model list at implementation — the
3.5-flashidentifier is not yet referenced anywhere in the substrate, so do not assume the string (Google's naming carries dated/variant suffixes). Where a hardcode can be replaced by a leaf-read, prefer that (reduces future drift — cf.#7811, which moved a hardcoded Gemini model name to config once already).Contract Ledger Matrix
modelNameleafai/config.template.mjs:262/ ADR 0019NEO_*env / per-deployment override unchangedgemini-2.5-flashmodelNameleafknowledge-base/config.template.mjs:308Neo.ai.provider.Gemini#modelNameai/provider/Gemini.mjs:21@memberDecision Record impact
aligned-with ADR 0019(AiConfig reactive SSOT — the bump uses the leaf default). Model-promotion governance per the Model-Stats framework (#11601, closed): treat as a promotion of the remote chat model; record capability/cost rationale per that framework if it mandates a Model-Stats entry.Acceptance Criteria
ai/config.template.mjs:262) + KB leaf (knowledge-base/config.template.mjs:308).ai/provider/Gemini.mjs:21,ai/demo-agents/dev.mjs:37).NEO_*env overrides + per-deployment overrides still function (no regression to the override path).#11601Model-Stats mandates it) a Model-Stats entry / rationale for the promotion.Out of Scope
gemini-embedding-001) bump.gemma4:31b) changes.Context
@tobiu directive (2026-06-05), surfaced during the business-side COGS / pricing analysis. The remote chat/summary model default is
gemini-2.5-flash; Gemini Flash 3.5 is GA. Newer Flash generations are typically cheaper per token AND higher quality — a direct cost lever on the remote-summary leg of the Agent OS cost-to-serve (the managed-deployment COGS model: cheaper remote tokens lower our fully-managed-tier COGS).The Problem
gemini-2.5-flashis the leaf-default (and residual hardcode) remote chat model across Memory Core session summaries, the Knowledge Base, the REM/Dream remote path, and the demo agents. It is a generation behind GA. For self-hosted/managed deployments paying per-token, the older Flash is both pricier and less capable than current GA. No ticket tracks the bump (verified 2026-06-05:gh issuesearch +ask_knowledge_basesemantic sweep both negative).The Architectural Reality
The model default flows from the AiConfig reactive SSOT (ADR 0019) leaf, with a few residual hardcoded sites:
ai/config.template.mjs:262—modelName: leaf('gemini-2.5-flash')(Gemini provider SSOT default)ai/mcp/server/knowledge-base/config.template.mjs:308—modelName: leaf('gemini-2.5-flash')(KB)ai/provider/Gemini.mjs:21—modelName: 'gemini-2.5-flash'(provider class default)ai/demo-agents/dev.mjs:37—const MODEL_NAME = 'gemini-2.5-flash'(demo)Embeddings (
gemini-embedding-001) are a separate surface — out of scope here.The Fix
Bump the default model string to the latest GA Flash (3.5) across the SSOT leaf + the residual hardcodes. Confirm the EXACT model identifier against the live Gemini API model list at implementation — the
3.5-flashidentifier is not yet referenced anywhere in the substrate, so do not assume the string (Google's naming carries dated/variant suffixes). Where a hardcode can be replaced by a leaf-read, prefer that (reduces future drift — cf.#7811, which moved a hardcoded Gemini model name to config once already).Contract Ledger Matrix
modelNameleafai/config.template.mjs:262/ ADR 0019NEO_*env / per-deployment override unchangedgemini-2.5-flashmodelNameleafknowledge-base/config.template.mjs:308Neo.ai.provider.Gemini#modelNameai/provider/Gemini.mjs:21@memberDecision Record impact
aligned-with ADR 0019(AiConfig reactive SSOT — the bump uses the leaf default). Model-promotion governance per the Model-Stats framework (#11601, closed): treat as a promotion of the remote chat model; record capability/cost rationale per that framework if it mandates a Model-Stats entry.Acceptance Criteria
ai/config.template.mjs:262) + KB leaf (knowledge-base/config.template.mjs:308).ai/provider/Gemini.mjs:21,ai/demo-agents/dev.mjs:37).NEO_*env overrides + per-deployment overrides still function (no regression to the override path).#11601Model-Stats mandates it) a Model-Stats entry / rationale for the promotion.Out of Scope
gemini-embedding-001) bump.gemma4:31b) changes.#12074/#12065Sub 8).ai/graph/identityRoots.mjsexplicitly notes "3.5 Flash is not a Pro replacement"; that is a different use than cheap summarization.Avoided Traps
gemini-3.5-flashstring — the exact identifier must be verified against the live API (dated/variant suffixes are common).#7811already fought once.Related
#11601— Model-Stats ADR / model-promotion governance#7811— moved hardcoded Gemini model name to config (the SSOT precedent)#10724— local chat-API summary provider validation (the qwen3 alternative path)#12074/#12065Sub 8 — gemma4-rem cost benchmark (the cost-measurement context this bump feeds)Origin Session ID: 4870c6b2-ee28-467c-875a-497b961d2a27
Handoff Retrieval Hint:
query_raw_memories("Gemini Flash 2.5 to 3.5 bump COGS remote summary model"); Git anchor:ai/config.template.mjsmodelNameleaf.