feat(ai): refresh AI models with deprecation support and multi-provider defaults (BREAKING: deploy server before frontend please) (#16503)

## Summary

- Add latest AI models from OpenAI (GPT-4.1, o3, o4-mini), Anthropic
(Claude 4.5 Opus/Sonnet/Haiku), and xAI (Grok 4.1)
- Mark deprecated models (GPT-4o, GPT-4o-mini, GPT-4-turbo, Claude Opus
4, Claude Sonnet 4) with a `deprecated` flag
- Split AI models into separate files per provider for better
maintainability
- Support comma-separated default model lists for automatic fallback
across providers (works out of the box for self-hosters regardless of
which provider they configure)
- Filter deprecated models from dropdown selection while keeping them
functional for existing agents

## Changes

### New Models Added
| Provider | Models |
|----------|--------|
| OpenAI | gpt-4.1, gpt-4.1-mini, o3, o4-mini |
| Anthropic | claude-opus-4-5, claude-sonnet-4-5, claude-haiku-4-5 |
| xAI | grok-4-1-fast-reasoning |

### Deprecated Models
- gpt-4o, gpt-4o-mini, gpt-4-turbo (OpenAI)
- claude-opus-4-20250514, claude-sonnet-4-20250514 (Anthropic)

### Config Changes
Default model configs now support comma-separated fallback lists:
-
`DEFAULT_AI_SPEED_MODEL_ID=gpt-4.1-mini,claude-haiku-4-5-20251001,grok-3-mini`
-
`DEFAULT_AI_PERFORMANCE_MODEL_ID=gpt-4.1,claude-sonnet-4-5-20250929,grok-4`

## Test plan

- [x] Unit tests pass
- [x] Typecheck passes
- [x] Lint passes
- [ ] Verify deprecated models don't appear in model dropdowns
- [ ] Verify agents with deprecated models still work correctly
- [ ] Verify default model fallback works when only one provider is
configured
This commit is contained in:
Félix Malfait
2025-12-11 21:47:38 +01:00
committed by GitHub
parent 999bc84b17
commit a13727335b
15 changed files with 655 additions and 264 deletions
@@ -47,6 +47,9 @@ export class ClientAIModelConfig {
@Field(() => NativeModelCapabilities, { nullable: true })
nativeCapabilities?: NativeModelCapabilities;
@Field(() => Boolean, { nullable: true })
deprecated?: boolean;
}
@ObjectType()
@@ -59,6 +59,7 @@ export class ClientConfigService {
builtInModel.outputCostPer1kTokensInCents,
)
: 0,
deprecated: builtInModel?.deprecated,
};
},
);
@@ -1111,20 +1111,21 @@ export class ConfigVariables {
@ConfigVariablesMetadata({
group: ConfigVariablesGroup.LLM,
description:
'Default AI model ID for speed-optimized operations (lightweight tasks, high throughput)',
'Comma-separated list of AI model IDs for speed-optimized operations, in priority order. The first available model will be used.',
type: ConfigVariableType.STRING,
})
@IsOptional()
DEFAULT_AI_SPEED_MODEL_ID = 'gpt-4o-mini';
DEFAULT_AI_SPEED_MODEL_ID =
'gpt-4.1-mini,claude-haiku-4-5-20251001,grok-3-mini';
@ConfigVariablesMetadata({
group: ConfigVariablesGroup.LLM,
description:
'Default AI model ID for performance-optimized operations (complex reasoning, quality focus)',
'Comma-separated list of AI model IDs for performance-optimized operations, in priority order. The first available model will be used.',
type: ConfigVariableType.STRING,
})
@IsOptional()
DEFAULT_AI_PERFORMANCE_MODEL_ID = 'gpt-4o';
DEFAULT_AI_PERFORMANCE_MODEL_ID = 'gpt-4.1,claude-sonnet-4-5-20250929,grok-4';
@ConfigVariablesMetadata({
group: ConfigVariablesGroup.LLM,