LLMS/AIX: OpenAI Image Generation Tool

This commit is contained in:
Enrico Ros
2025-09-15 23:24:00 -07:00
parent 67df71ab45
commit 7ccf22c2f4
7 changed files with 34 additions and 8 deletions
@@ -158,6 +158,14 @@ export const DModelParameterRegistry = {
initialValue: false,
} as const,
llmVndOaiImageGeneration: {
label: 'Image Generation',
type: 'boolean' as const,
description: 'Enable image generation capabilities',
// No initialValue - defaults to undefined/false (off)
// No requiredFallback - this is optional
} as const,
// Perplexity-specific parameters
// llmVndPerplexityReasoningEffort - we reuse the OpenAI reasoning effort parameter
+2 -1
View File
@@ -50,7 +50,7 @@ export function aixCreateModelFromLLMOptions(
llmRef, llmTemperature, llmResponseTokens, llmTopP, llmForceNoStream,
llmVndAntThinkingBudget,
llmVndGeminiShowThoughts, llmVndGeminiThinkingBudget,
llmVndOaiReasoningEffort, llmVndOaiReasoningEffort4, llmVndOaiRestoreMarkdown, llmVndOaiVerbosity, llmVndOaiWebSearchContext, llmVndOaiWebSearchGeolocation,
llmVndOaiReasoningEffort, llmVndOaiReasoningEffort4, llmVndOaiRestoreMarkdown, llmVndOaiVerbosity, llmVndOaiWebSearchContext, llmVndOaiWebSearchGeolocation, llmVndOaiImageGeneration,
llmVndPerplexityDateFilter, llmVndPerplexitySearchMode,
llmVndXaiSearchMode, llmVndXaiSearchSources, llmVndXaiSearchDateFilter,
} = {
@@ -108,6 +108,7 @@ export function aixCreateModelFromLLMOptions(
...(llmVndOaiRestoreMarkdown ? { vndOaiRestoreMarkdown: llmVndOaiRestoreMarkdown } : {}),
...(llmVndOaiVerbosity ? { vndOaiVerbosity: llmVndOaiVerbosity } : {}),
...(llmVndOaiWebSearchContext ? { vndOaiWebSearchContext: llmVndOaiWebSearchContext } : {}),
...(llmVndOaiImageGeneration ? { vndOaiImageGeneration: true } : {}),
...(llmVndPerplexityDateFilter ? { vndPerplexityDateFilter: llmVndPerplexityDateFilter } : {}),
...(llmVndPerplexitySearchMode ? { vndPerplexitySearchMode: llmVndPerplexitySearchMode } : {}),
...(userGeolocation ? { userGeolocation } : {}),
@@ -413,6 +413,7 @@ export namespace AixWire_API {
vndOaiRestoreMarkdown: z.boolean().optional(),
vndOaiVerbosity: z.enum(['low', 'medium', 'high']).optional(),
vndOaiWebSearchContext: z.enum(['low', 'medium', 'high']).optional(),
vndOaiImageGeneration: z.boolean().optional(),
vndPerplexityDateFilter: z.enum(['unfiltered', '1m', '3m', '6m', '1y']).optional(),
vndPerplexitySearchMode: z.enum(['default', 'academic']).optional(),
vndXaiSearchMode: z.enum(['auto', 'on', 'off']).optional(),
@@ -146,8 +146,8 @@ export function aixToOpenAIResponses(openAIDialect: OpenAIDialects, model: AixAP
}
}
// Tool: Image Generation: for testing (enable for all compatible models)
const requestImageGenerationTool = false // TODO: make this configurable
// Tool: Image Generation: configurable per model
const requestImageGenerationTool = !!model.vndOaiImageGeneration;
if (requestImageGenerationTool) {
if (isDialectAzure) {
// Azure OpenAI may not support image generation tool yet
@@ -109,6 +109,7 @@ export function LLMParametersEditor(props: {
llmVndOaiRestoreMarkdown,
llmVndOaiWebSearchContext,
llmVndOaiWebSearchGeolocation,
llmVndOaiImageGeneration,
llmVndOaiVerbosity,
llmVndPerplexityDateFilter,
llmVndPerplexitySearchMode,
@@ -391,6 +392,19 @@ export function LLMParametersEditor(props: {
/>
)}
{showParam('llmVndOaiImageGeneration') && (
<FormSwitchControl
title='Image Generation'
description='Enable image generation'
tooltip='Allow the model to generate images when appropriate'
checked={!!llmVndOaiImageGeneration}
onChange={checked => {
if (!checked) onRemoveParameter('llmVndOaiImageGeneration');
else onChangeParameter({ llmVndOaiImageGeneration: true });
}}
/>
)}
{showParam('llmForceNoStream') && (
<FormSwitchControl
title='Disable Streaming'
@@ -86,6 +86,7 @@ const ModelParameterSpec_schema = z.object({
'llmVndOaiVerbosity',
'llmVndOaiWebSearchContext',
'llmVndOaiWebSearchGeolocation',
'llmVndOaiImageGeneration',
'llmVndPerplexityDateFilter',
'llmVndPerplexitySearchMode',
'llmVndXaiSearchMode',
@@ -33,6 +33,7 @@ export const _knownOpenAIChatModels: ManualMappings = [
{ paramId: 'llmVndOaiReasoningEffort4' }, { paramId: 'llmVndOaiWebSearchContext' },
{ paramId: 'llmVndOaiRestoreMarkdown' }, // activate markdown restoration (true as initial value)
{ paramId: 'llmVndOaiVerbosity' }, // gpt-5-class nets have verbosity control
{ paramId: 'llmVndOaiImageGeneration' }, // image generation capability
],
chatPrice: { input: 1.25, cache: { cType: 'oai-ac', read: 0.125 }, output: 10 },
benchmark: { cbaElo: 1481 },
@@ -48,7 +49,7 @@ export const _knownOpenAIChatModels: ManualMappings = [
maxCompletionTokens: 128000,
trainingDataCutoff: 'Sep 30, 2024',
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Fn, LLM_IF_OAI_Json, LLM_IF_OAI_Reasoning, LLM_IF_OAI_Responses, LLM_IF_OAI_PromptCaching, LLM_IF_Tools_WebSearch, LLM_IF_HOTFIX_NoTemperature],
parameterSpecs: [{ paramId: 'llmVndOaiReasoningEffort4' }, { paramId: 'llmVndOaiWebSearchContext' }, { paramId: 'llmVndOaiRestoreMarkdown' }, { paramId: 'llmVndOaiVerbosity' }],
parameterSpecs: [{ paramId: 'llmVndOaiReasoningEffort4' }, { paramId: 'llmVndOaiWebSearchContext' }, { paramId: 'llmVndOaiRestoreMarkdown' }, { paramId: 'llmVndOaiVerbosity' }, { paramId: 'llmVndOaiImageGeneration' }],
chatPrice: { input: 1.25, cache: { cType: 'oai-ac', read: 0.125 }, output: 10 },
benchmark: { cbaElo: 1481 },
},
@@ -76,7 +77,7 @@ export const _knownOpenAIChatModels: ManualMappings = [
maxCompletionTokens: 128000,
trainingDataCutoff: 'May 30, 2024',
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Fn, LLM_IF_OAI_Json, LLM_IF_OAI_Reasoning, LLM_IF_OAI_Responses, LLM_IF_OAI_PromptCaching, LLM_IF_Tools_WebSearch, LLM_IF_HOTFIX_NoTemperature],
parameterSpecs: [{ paramId: 'llmVndOaiReasoningEffort4' }, { paramId: 'llmVndOaiWebSearchContext' }, { paramId: 'llmVndOaiRestoreMarkdown' }, { paramId: 'llmVndOaiVerbosity' }],
parameterSpecs: [{ paramId: 'llmVndOaiReasoningEffort4' }, { paramId: 'llmVndOaiWebSearchContext' }, { paramId: 'llmVndOaiRestoreMarkdown' }, { paramId: 'llmVndOaiVerbosity' }, { paramId: 'llmVndOaiImageGeneration' }],
chatPrice: { input: 0.25, cache: { cType: 'oai-ac', read: 0.025 }, output: 2 },
// benchmark: { cbaElo: TBD }, // Not yet available
},
@@ -91,7 +92,7 @@ export const _knownOpenAIChatModels: ManualMappings = [
maxCompletionTokens: 128000,
trainingDataCutoff: 'May 30, 2024',
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Fn, LLM_IF_OAI_Json, LLM_IF_OAI_Reasoning, LLM_IF_OAI_Responses, LLM_IF_OAI_PromptCaching, LLM_IF_Tools_WebSearch, LLM_IF_HOTFIX_NoTemperature],
parameterSpecs: [{ paramId: 'llmVndOaiReasoningEffort4' }, { paramId: 'llmVndOaiWebSearchContext' }, { paramId: 'llmVndOaiRestoreMarkdown' }, { paramId: 'llmVndOaiVerbosity' }],
parameterSpecs: [{ paramId: 'llmVndOaiReasoningEffort4' }, { paramId: 'llmVndOaiWebSearchContext' }, { paramId: 'llmVndOaiRestoreMarkdown' }, { paramId: 'llmVndOaiVerbosity' }, { paramId: 'llmVndOaiImageGeneration' }],
chatPrice: { input: 0.25, cache: { cType: 'oai-ac', read: 0.025 }, output: 2 },
// benchmark: { cbaElo: TBD }, // Not yet available
},
@@ -106,7 +107,7 @@ export const _knownOpenAIChatModels: ManualMappings = [
maxCompletionTokens: 128000,
trainingDataCutoff: 'May 30, 2024',
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Fn, LLM_IF_OAI_Json, LLM_IF_OAI_Reasoning, LLM_IF_OAI_Responses, LLM_IF_OAI_PromptCaching, LLM_IF_HOTFIX_NoTemperature],
parameterSpecs: [{ paramId: 'llmVndOaiReasoningEffort4' }, { paramId: 'llmVndOaiVerbosity' }],
parameterSpecs: [{ paramId: 'llmVndOaiReasoningEffort4' }, { paramId: 'llmVndOaiVerbosity' }, { paramId: 'llmVndOaiImageGeneration' }],
chatPrice: { input: 0.05, cache: { cType: 'oai-ac', read: 0.005 }, output: 0.4 },
// benchmark: { cbaElo: TBD }, // Not yet available
},
@@ -121,7 +122,7 @@ export const _knownOpenAIChatModels: ManualMappings = [
maxCompletionTokens: 128000,
trainingDataCutoff: 'May 30, 2024',
interfaces: [LLM_IF_OAI_Chat, LLM_IF_OAI_Vision, LLM_IF_OAI_Fn, LLM_IF_OAI_Json, LLM_IF_OAI_Reasoning, LLM_IF_OAI_Responses, LLM_IF_OAI_PromptCaching, LLM_IF_HOTFIX_NoTemperature],
parameterSpecs: [{ paramId: 'llmVndOaiReasoningEffort4' }, { paramId: 'llmVndOaiVerbosity' }],
parameterSpecs: [{ paramId: 'llmVndOaiReasoningEffort4' }, { paramId: 'llmVndOaiVerbosity' }, { paramId: 'llmVndOaiImageGeneration' }],
chatPrice: { input: 0.05, cache: { cType: 'oai-ac', read: 0.005 }, output: 0.4 },
// benchmark: { cbaElo: TBD }, // Not yet available
},