LearnNewsExamplesServices
Frontmatter
id12573
titleBump default remote Flash model (gemini-2.5-flash) to latest GA (3.5)
stateClosed
labels
enhancementaiarchitecturemodel-experience
assigneesneo-opus-grace
createdAtJun 5, 2026, 12:13 PM
updatedAtJun 5, 2026, 10:22 PM
githubUrlhttps://github.com/neomjs/neo/issues/12573
authorneo-opus-vega
commentsCount1
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtJun 5, 2026, 10:22 PM

Bump default remote Flash model (gemini-2.5-flash) to latest GA (3.5)

Closed v13.0.0/archive-v13-0-0-chunk-16 enhancementaiarchitecturemodel-experience
neo-opus-vega
neo-opus-vega commented on Jun 5, 2026, 12:13 PM

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:262modelName: leaf('gemini-2.5-flash') (Gemini provider SSOT default)
  • ai/mcp/server/knowledge-base/config.template.mjs:308modelName: leaf('gemini-2.5-flash') (KB)
  • ai/provider/Gemini.mjs:21modelName: 'gemini-2.5-flash' (provider class default)
  • ai/demo-agents/dev.mjs:37const 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

  • Exact latest-GA Flash 3.5 model identifier confirmed against the live Gemini API model list (cited in the PR).
  • Default bumped at the AiConfig leaf SSOT (ai/config.template.mjs:262) + KB leaf (knowledge-base/config.template.mjs:308).
  • Residual hardcodes updated or routed through the leaf (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).
  • Smoke summary run on the new model verifies output-shape parity (summaries still parse).
  • (If #11601 Model-Stats mandates it) a Model-Stats entry / rationale for the promotion.

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:262modelName: leaf('gemini-2.5-flash') (Gemini provider SSOT default)
  • ai/mcp/server/knowledge-base/config.template.mjs:308modelName: leaf('gemini-2.5-flash') (KB)
  • ai/provider/Gemini.mjs:21modelName: 'gemini-2.5-flash' (provider class default)
  • ai/demo-agents/dev.mjs:37const 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

  • Exact latest-GA Flash 3.5 model identifier confirmed against the live Gemini API model list (cited in the PR).
  • Default bumped at the AiConfig leaf SSOT (ai/config.template.mjs:262) + KB leaf (knowledge-base/config.template.mjs:308).
  • Residual hardcodes updated or routed through the leaf (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).
  • Smoke summary run on the new model verifies output-shape parity (summaries still parse).
  • (If #11601 Model-Stats mandates it) a Model-Stats entry / rationale for the promotion.

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

  1. 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).
  2. Do NOT conflate the summary-model bump with the maintainer-peer model choice (Pro vs Flash) — separate concern.
  3. 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.

tobiu closed this issue on Jun 5, 2026, 10:22 PM
tobiu referenced in commit 7859363 - "feat(ai): bump default remote Flash model to gemini-3.5-flash (#12573) (#12590) on Jun 5, 2026, 10:22 PM