LLMs/AIX: Gemini: Agentic models: add option to disable visualizations. Fixes #1095

This commit is contained in:
Enrico Ros
2026-05-05 03:06:30 -07:00
parent 1bf1b744b9
commit 9d88bf9b82
7 changed files with 37 additions and 5 deletions
@@ -349,6 +349,15 @@ export const DModelParameterRegistry = {
// when undefined, the model chooses automatically // when undefined, the model chooses automatically
}, },
// Gemini Interactions API agent_config - per-agent knobs (Deep Research only today)
llmVndGeminiAgentViz: _enumDef({
label: 'Visualizations',
type: 'enum',
description: 'Charts and images in Deep Research reports. Disable for text-only output (helpful when merging multiple reports).',
values: ['auto', 'off'],
// undefined means upstream default ('auto'); we only forward when explicitly 'off'
}),
// NOTE: we don't have this as a parameter, as for now we use it in tandem with llmVndGeminiGoogleSearch // NOTE: we don't have this as a parameter, as for now we use it in tandem with llmVndGeminiGoogleSearch
// llmVndGeminiUrlContext: { // llmVndGeminiUrlContext: {
// label: 'URL Context', // label: 'URL Context',
+2 -1
View File
@@ -70,7 +70,7 @@ export function aixCreateModelFromLLMOptions(
llmVndAntEffort, llmVndGemEffort, llmVndOaiEffort, llmVndMiscEffort, llmVndAntEffort, llmVndGemEffort, llmVndOaiEffort, llmVndMiscEffort,
llmVndAnt1MContext, llmVndAntInfSpeed, llmVndAntSkills, llmVndAntThinkingBudget, llmVndAntWebDynamic, llmVndAntWebFetch, llmVndAntWebFetchMaxUses, llmVndAntWebSearch, llmVndAntWebSearchMaxUses, llmVndAnt1MContext, llmVndAntInfSpeed, llmVndAntSkills, llmVndAntThinkingBudget, llmVndAntWebDynamic, llmVndAntWebFetch, llmVndAntWebFetchMaxUses, llmVndAntWebSearch, llmVndAntWebSearchMaxUses,
llmVndBedrockAPI, llmVndBedrockAPI,
llmVndGeminiAspectRatio, llmVndGeminiImageSize, llmVndGeminiCodeExecution, llmVndGeminiComputerUse, llmVndGeminiGoogleSearch, llmVndGeminiMediaResolution, llmVndGeminiThinkingBudget, llmVndGeminiAgentViz, llmVndGeminiAspectRatio, llmVndGeminiImageSize, llmVndGeminiCodeExecution, llmVndGeminiComputerUse, llmVndGeminiGoogleSearch, llmVndGeminiMediaResolution, llmVndGeminiThinkingBudget,
// llmVndMoonshotWebSearch, // llmVndMoonshotWebSearch,
llmVndOaiRestoreMarkdown, llmVndOaiVerbosity, llmVndOaiWebSearchContext, llmVndOaiWebSearchGeolocation, llmVndOaiImageGeneration, llmVndOaiCodeInterpreter, llmVndOaiRestoreMarkdown, llmVndOaiVerbosity, llmVndOaiWebSearchContext, llmVndOaiWebSearchGeolocation, llmVndOaiImageGeneration, llmVndOaiCodeInterpreter,
llmVndOrtWebSearch, llmVndOrtWebSearch,
@@ -143,6 +143,7 @@ export function aixCreateModelFromLLMOptions(
// Gemini // Gemini
...(llmVndGeminiInteractions ? { vndGeminiAPI: 'interactions-agent' } : {}), ...(llmVndGeminiInteractions ? { vndGeminiAPI: 'interactions-agent' } : {}),
...(llmVndGeminiAgentViz === 'off' ? { vndGeminiAgentViz: 'off' } : {}), // Deep Research agent_config.visualization - only forward when explicitly disabled
...(llmVndGeminiAspectRatio ? { vndGeminiAspectRatio: llmVndGeminiAspectRatio } : {}), ...(llmVndGeminiAspectRatio ? { vndGeminiAspectRatio: llmVndGeminiAspectRatio } : {}),
...(llmVndGeminiCodeExecution === 'auto' ? { vndGeminiCodeExecution: llmVndGeminiCodeExecution } : {}), ...(llmVndGeminiCodeExecution === 'auto' ? { vndGeminiCodeExecution: llmVndGeminiCodeExecution } : {}),
...(llmVndGeminiComputerUse ? { vndGeminiComputerUse: llmVndGeminiComputerUse } : {}), ...(llmVndGeminiComputerUse ? { vndGeminiComputerUse: llmVndGeminiComputerUse } : {}),
@@ -516,6 +516,7 @@ export namespace AixWire_API {
// Gemini // Gemini
vndGeminiAPI: z.enum(['interactions-agent']).optional(), // opt-in per-model API dialect; unset = generateContent vndGeminiAPI: z.enum(['interactions-agent']).optional(), // opt-in per-model API dialect; unset = generateContent
vndGeminiAgentViz: z.enum(['auto', 'off']).optional(), // agent_config.visualization; default 'auto' upstream
vndGeminiAspectRatio: z.enum(['1:1', '2:3', '3:2', '3:4', '4:3', '9:16', '16:9', '21:9']).optional(), vndGeminiAspectRatio: z.enum(['1:1', '2:3', '3:2', '3:4', '4:3', '9:16', '16:9', '21:9']).optional(),
vndGeminiCodeExecution: z.enum(['auto']).optional(), vndGeminiCodeExecution: z.enum(['auto']).optional(),
vndGeminiComputerUse: z.enum(['browser']).optional(), vndGeminiComputerUse: z.enum(['browser']).optional(),
@@ -86,7 +86,8 @@ export function aixToGeminiInteractionsCreate(model: AixAPI_Model, chatGenerateR
agent_config: { agent_config: {
type: 'deep-research', type: 'deep-research',
thinking_summaries: 'auto', // Enable thought_summary blocks - without this the API would not emit summaries during streaming thinking_summaries: 'auto', // Enable thought_summary blocks - without this the API would not emit summaries during streaming
// visualization defaults to 'auto' upstream; leave unset to keep the default (agent may generate charts/images). // visualization: forwarded only when the client explicitly opts out; 'auto' (default) is left unset so the agent may generate charts/images.
...(model.vndGeminiAgentViz === 'off' && { visualization: 'off' }),
}, },
}), }),
// non-DR agents: use native system_instruction field (matches gemini.generateContent.ts convention) // non-DR agents: use native system_instruction field (matches gemini.generateContent.ts convention)
@@ -123,6 +123,11 @@ const _geminiGoogleSearchOptions = [
{ value: _UNSPECIFIED, label: 'Off', description: 'Default (disabled)' }, { value: _UNSPECIFIED, label: 'Off', description: 'Default (disabled)' },
] as const; ] as const;
const _geminiAgentVizOptions = [
{ value: _UNSPECIFIED, label: 'Auto', description: 'Default - agent may include charts/images' },
{ value: 'off', label: 'Off', description: 'Text only (better when merging multiple reports)' },
] as const;
const _geminiMediaResolutionOptions = [ const _geminiMediaResolutionOptions = [
{ value: 'mr_high', label: 'High', description: 'Best quality' }, { value: 'mr_high', label: 'High', description: 'Best quality' },
{ value: 'mr_medium', label: 'Medium', description: 'Balanced' }, { value: 'mr_medium', label: 'Medium', description: 'Balanced' },
@@ -245,6 +250,7 @@ export function LLMParametersEditor(props: {
llmVndAntWebSearch, llmVndAntWebSearch,
llmVndAntWebSearchMaxUses, llmVndAntWebSearchMaxUses,
llmVndGemEffort, llmVndGemEffort,
llmVndGeminiAgentViz,
llmVndGeminiAspectRatio, llmVndGeminiAspectRatio,
llmVndGeminiCodeExecution, llmVndGeminiCodeExecution,
llmVndGeminiGoogleSearch, llmVndGeminiGoogleSearch,
@@ -687,6 +693,19 @@ export function LLMParametersEditor(props: {
/> />
)} )}
{showParam('llmVndGeminiAgentViz') && (
<FormSelectControl
title='Visualizations'
tooltip='Charts and images in Deep Research reports. Disable for text-only output (helpful when merging multiple reports).'
value={llmVndGeminiAgentViz ?? _UNSPECIFIED}
onChange={(value) => {
if (value === _UNSPECIFIED || !value) onRemoveParameter('llmVndGeminiAgentViz');
else onChangeParameter({ llmVndGeminiAgentViz: value });
}}
options={_geminiAgentVizOptions}
/>
)}
{/*{showParam('llmVndMoonshotWebSearch') && (*/} {/*{showParam('llmVndMoonshotWebSearch') && (*/}
{/* <FormSelectControl*/} {/* <FormSelectControl*/}
@@ -393,7 +393,7 @@ const _knownGeminiModels: ({
isPreview: true, isPreview: true,
chatPrice: gemini25ProPricing, // pricing not explicitly listed; using 2.5 Pro as baseline chatPrice: gemini25ProPricing, // pricing not explicitly listed; using 2.5 Pro as baseline
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Reasoning, LLM_IF_GEM_Interactions], interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Reasoning, LLM_IF_GEM_Interactions],
parameterSpecs: [], parameterSpecs: [{ paramId: 'llmVndGeminiAgentViz' }],
benchmark: undefined, // Deep research model, not benchmarkable on standard tests benchmark: undefined, // Deep research model, not benchmarkable on standard tests
// 128K input, 64K output // 128K input, 64K output
}, },
@@ -406,7 +406,7 @@ const _knownGeminiModels: ({
isPreview: true, isPreview: true,
chatPrice: gemini25ProPricing, // baseline estimate (see note above) chatPrice: gemini25ProPricing, // baseline estimate (see note above)
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Reasoning, LLM_IF_GEM_Interactions], interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Reasoning, LLM_IF_GEM_Interactions],
parameterSpecs: [], parameterSpecs: [{ paramId: 'llmVndGeminiAgentViz' }],
benchmark: undefined, // Deep research model, not benchmarkable on standard tests benchmark: undefined, // Deep research model, not benchmarkable on standard tests
}, },
@@ -419,7 +419,7 @@ const _knownGeminiModels: ({
isPreview: true, isPreview: true,
chatPrice: gemini25ProPricing, chatPrice: gemini25ProPricing,
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Reasoning, LLM_IF_GEM_Interactions], interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Reasoning, LLM_IF_GEM_Interactions],
parameterSpecs: [{ paramId: 'llmVndGeminiThinkingBudget' }], parameterSpecs: [{ paramId: 'llmVndGeminiAgentViz' }, { paramId: 'llmVndGeminiThinkingBudget' }],
benchmark: undefined, // Deep research model, not benchmarkable on standard tests benchmark: undefined, // Deep research model, not benchmarkable on standard tests
// Note: 128K input context, 64K output context // Note: 128K input context, 64K output context
}, },
@@ -94,6 +94,7 @@ const ModelParameterSpec_schema = z.object({
// Bedrock // Bedrock
'llmVndBedrockAPI', 'llmVndBedrockAPI',
// Gemini // Gemini
'llmVndGeminiAgentViz',
'llmVndGeminiAspectRatio', 'llmVndGeminiAspectRatio',
'llmVndGeminiCodeExecution', 'llmVndGeminiCodeExecution',
'llmVndGeminiComputerUse', 'llmVndGeminiComputerUse',