diff --git a/apps/docs/models.mdx b/apps/docs/models.mdx index c40bef710..ba08ada9b 100644 --- a/apps/docs/models.mdx +++ b/apps/docs/models.mdx @@ -163,6 +163,27 @@ Sol. OpenAI describes it as near-Astra performance at a lower cost. Existing defaults and saved mappings stay unchanged; differentiated recommendations that previously used GPT-6 Sol now use GPT-6.1 Sol. +**GPT-6.1 Terra** is available through Roomote inference, OpenRouter, +Vercel AI Gateway, OpenAI, Azure OpenAI, Azure AI Foundry, Requesty, and ChatGPT +Subscription. Enable it in **Available Models**, then assign it to a role or +select it for a session or task. Defaults and existing role mappings stay +unchanged. Azure requires a deployment named `gpt-6.1-terra`; Requesty's curated +route is `azure/gpt-6.1-terra@swedencentral`. Availability depends on account, +region, plan, and rollout. OpenCode Zen, OpenCode Go, GitHub Copilot, and Amazon +Bedrock are not yet included in Roomote's curated Terra routes. + +[OpenAI's model reference](https://developers.openai.com/api/docs/models/gpt-6.1-terra) +lists a 1,050,000-token context window, a 922,000-token input limit, and up to +128,000 output tokens, with text and image input and text output. Standard +OpenAI API rates are $1 input, $0.05 cached input, and $5 output per million +tokens; prompts over 272,000 input tokens incur higher rates. Provider pricing +and limits can differ. Tool calling on the OpenAI route requires the Responses +API. Roomote's model details refresh from provider catalogs as metadata becomes +available. + +Terra supports ChatGPT Subscription's **Fast mode** when available to the +connected plan. Selecting Terra on another route does not enable that option. + **DeepSeek V4.1 Flash** is recommended through [DeepSeek](/providers/inference/deepseek), [OpenRouter](/providers/inference/openrouter), diff --git a/apps/web/src/trpc/commands/task-models/auto-add-models.test.ts b/apps/web/src/trpc/commands/task-models/auto-add-models.test.ts index c7ac0a782..f76c1c04b 100644 --- a/apps/web/src/trpc/commands/task-models/auto-add-models.test.ts +++ b/apps/web/src/trpc/commands/task-models/auto-add-models.test.ts @@ -78,6 +78,7 @@ describe('buildAutoAddedTaskModelSettings', () => { 'openai/gpt-5.6-sol', 'openai/gpt-6-sol', 'openai/gpt-6.1-sol', + 'openai/gpt-6.1-terra', 'openai/gpt-5.6-luna', 'openai/gpt-6-luna', ]), diff --git a/apps/web/src/trpc/commands/task-models/index.test.ts b/apps/web/src/trpc/commands/task-models/index.test.ts index 2cf7621a7..150581f32 100644 --- a/apps/web/src/trpc/commands/task-models/index.test.ts +++ b/apps/web/src/trpc/commands/task-models/index.test.ts @@ -1942,6 +1942,7 @@ describe('task model provider commands', () => { 'openai/gpt-5.6-sol', 'openai/gpt-6-sol', 'openai/gpt-6.1-sol', + 'openai/gpt-6.1-terra', 'openai/gpt-5.6-terra', 'openai/gpt-5.6-luna', 'openai/gpt-6-luna', diff --git a/apps/worker/src/run-task/__tests__/opencode-chatgpt-gateway-plugin-script.test.ts b/apps/worker/src/run-task/__tests__/opencode-chatgpt-gateway-plugin-script.test.ts index 4c1a7cd3b..3965c4685 100644 --- a/apps/worker/src/run-task/__tests__/opencode-chatgpt-gateway-plugin-script.test.ts +++ b/apps/worker/src/run-task/__tests__/opencode-chatgpt-gateway-plugin-script.test.ts @@ -94,6 +94,10 @@ describe('OPENCODE_CHATGPT_GATEWAY_PLUGIN_SCRIPT', () => { 'gpt-6-astra': createModel('gpt-6-astra'), 'gpt-6-sol': createModel('gpt-6-sol'), 'gpt-6.1-sol': createModel('gpt-6.1-sol'), + 'gpt-6.1-terra': { + ...createModel('gpt-6.1-terra'), + limit: { context: 1_050_000, input: 922_000, output: 128_000 }, + }, 'gpt-6-luna': createModel('gpt-6-luna'), 'gpt-5.6-luna': createModel('gpt-5.6-luna'), 'gpt-5.6': createModel('gpt-5.6'), @@ -110,6 +114,7 @@ describe('OPENCODE_CHATGPT_GATEWAY_PLUGIN_SCRIPT', () => { 'gpt-6-astra', 'gpt-6-sol', 'gpt-6.1-sol', + 'gpt-6.1-terra', 'gpt-6-luna', 'gpt-5.6-luna', 'gpt-5.6', @@ -121,6 +126,10 @@ describe('OPENCODE_CHATGPT_GATEWAY_PLUGIN_SCRIPT', () => { output: 0, cache: { read: 0, write: 0 }, }); + expect(models['gpt-6.1-terra']).toMatchObject({ + cost: { input: 0, output: 0, cache: { read: 0, write: 0 } }, + limit: { context: 1_050_000, input: 922_000, output: 128_000 }, + }); expect(models['gpt-6-astra']).toMatchObject({ cost: { input: 0, diff --git a/apps/worker/src/run-task/agent-home.test.ts b/apps/worker/src/run-task/agent-home.test.ts index 329fdab16..913e9d782 100644 --- a/apps/worker/src/run-task/agent-home.test.ts +++ b/apps/worker/src/run-task/agent-home.test.ts @@ -254,6 +254,72 @@ describe('generateOpenCodeConfig provider support', () => { expect(result.model).toBe('openai-compatible/coding'); }); + it.each( + (['vision', 'planning', 'explore'] as const).flatMap((role) => + ( + [ + ['requesty', 'azure/gpt-6.1-terra@swedencentral'], + ['azure', 'gpt-6.1-terra'], + ['azure-cognitive-services', 'gpt-6.1-terra'], + ] as const + ).flatMap(([providerId, modelId]) => + [false, true].map((gateway) => ({ + role, + providerId, + modelId, + gateway, + })), + ), + ), + )( + 'registers $providerId Terra used only for $role (gateway=$gateway)', + ({ role, providerId, modelId, gateway }) => { + const descriptor = TASK_MODEL_ROLE_DESCRIPTORS[role]; + const result = generateOpenCodeConfig({ + homeDir: createHomeDir(), + model: 'openai/gpt-6.1-sol', + runtimeEnv: { + R_MODEL: 'openai/gpt-6.1-sol', + R_SMALL_MODEL: 'openai/gpt-6-luna', + [descriptor.modelEnvVar]: `${providerId}/${modelId}`, + ...(gateway + ? { + R_INFERENCE_GATEWAY_URL: + 'https://api.example.com/api/inference', + R_INFERENCE_GATEWAY_KEYS: [ + 'REQUESTY_API_KEY', + 'AZURE_API_KEY', + 'AZURE_COGNITIVE_SERVICES_API_KEY', + ].join(','), + } + : {}), + }, + }); + const config = JSON.parse(result.configContent); + expect(result.model).toBe('openai/gpt-6.1-sol'); + expect(config.small_model).toBe('openai/gpt-6-luna'); + expect(config.provider?.[providerId]?.models?.[modelId]).toMatchObject({ + name: 'GPT-6.1 Terra', + reasoning: true, + tool_call: true, + attachment: true, + modalities: { input: ['text', 'image'], output: ['text'] }, + limit: { context: 1_050_000, input: 922_000, output: 128_000 }, + }); + const agentName = { + vision: 'visual', + planning: 'advisor', + explore: 'explore', + }[role]; + expect(config.agent[agentName].model).toBe(`${providerId}/${modelId}`); + if (gateway) { + expect(config.provider[providerId].options.baseURL).toContain( + `https://api.example.com/api/inference/${providerId}`, + ); + } + }, + ); + it.each([false, true])( 'keeps shared-model variant and reasoning precedence with task override %s', (override) => { @@ -1269,6 +1335,7 @@ describe('generateOpenCodeConfig provider support', () => { R_MODEL: 'openai/gpt-6-sol', R_SMALL_MODEL: 'openai/gpt-6-luna', R_VISION_MODEL: 'openai/gpt-6.1-sol', + R_CODE_REVIEW_MODEL: 'openai/gpt-6.1-terra', R_MODEL_REASONING_EFFORT: 'high', R_CHATGPT_FAST_MODE: '1', }; @@ -1293,6 +1360,9 @@ describe('generateOpenCodeConfig provider support', () => { expect(config.provider.openai?.models?.['gpt-6.1-sol']?.options).toEqual({ serviceTier: 'priority', }); + expect(config.provider.openai?.models?.['gpt-6.1-terra']?.options).toEqual({ + serviceTier: 'priority', + }); expect(runtimeEnv).not.toHaveProperty('R_CHATGPT_FAST_MODE'); }); diff --git a/apps/worker/src/run-task/agent-home.ts b/apps/worker/src/run-task/agent-home.ts index eefb83482..1151d19fb 100644 --- a/apps/worker/src/run-task/agent-home.ts +++ b/apps/worker/src/run-task/agent-home.ts @@ -55,6 +55,7 @@ import { mergeBedrockMantleProviderConfig, mergeCatalogProviderCredentialConfig, mergeKimiForCodingProviderConfig, + mergeCuratedOpenCodeModelConfig, mergeOpenAiCompatibleProviderConfig, mergeOpenCodeModelReasoningOptions, mergeOpenCodeChatGptFastModeOptions, @@ -1740,12 +1741,15 @@ function resolveModelBackedOpenCodeConfig( // config entry or its cost block is silently dropped. ...Object.keys(modelCosts), ]; - const providerModelConfig = chatGptFastMode - ? mergeOpenCodeChatGptFastModeOptions( - providerReasoningConfig, - configuredModelIds, - ) - : providerReasoningConfig; + const providerModelConfig = mergeCuratedOpenCodeModelConfig( + chatGptFastMode + ? mergeOpenCodeChatGptFastModeOptions( + providerReasoningConfig, + configuredModelIds, + ) + : providerReasoningConfig, + configuredModelIds, + ); const providerConfig = mergeInferenceGatewayProviderConfig( // Binds the keys OpenCode would not find under its catalog's env var // names. Gateway mode replaces the key and base URL just above. diff --git a/apps/worker/src/run-task/opencode-chatgpt-gateway-plugin-script.ts b/apps/worker/src/run-task/opencode-chatgpt-gateway-plugin-script.ts index c01998fb5..ea8633108 100644 --- a/apps/worker/src/run-task/opencode-chatgpt-gateway-plugin-script.ts +++ b/apps/worker/src/run-task/opencode-chatgpt-gateway-plugin-script.ts @@ -16,6 +16,7 @@ const ALLOWED_MODELS = new Set([ 'gpt-6-astra', 'gpt-6-sol', 'gpt-6.1-sol', + 'gpt-6.1-terra', 'gpt-6-luna', 'gpt-5.5', 'gpt-5.3-codex-spark', diff --git a/packages/cloud-agents/src/server/__tests__/opencode-runtime.test.ts b/packages/cloud-agents/src/server/__tests__/opencode-runtime.test.ts index 4c9de6b4a..6b4571547 100644 --- a/packages/cloud-agents/src/server/__tests__/opencode-runtime.test.ts +++ b/packages/cloud-agents/src/server/__tests__/opencode-runtime.test.ts @@ -129,6 +129,42 @@ describe('buildOpenCodeCliEnv', () => { }); }); + it.each( + ( + [ + ['requesty', 'azure/gpt-6.1-terra@swedencentral'], + ['azure', 'gpt-6.1-terra'], + ['azure-cognitive-services', 'gpt-6.1-terra'], + ] as const + ).flatMap(([providerId, modelId]) => + [ + undefined, + JSON.stringify({ + provider: { [providerId]: { options: { custom: true } } }, + }), + ].map((configContent) => ({ providerId, modelId, configContent })), + ), + )( + 'registers $providerId Terra for vision-only helper selection with config $configContent', + ({ providerId, modelId, configContent }) => { + const env = buildOpenCodeCliEnv({ + R_MODEL: 'openai/gpt-6.1-sol', + R_SMALL_MODEL: 'openai/gpt-6-luna', + R_VISION_MODEL: `${providerId}/${modelId}`, + OPENCODE_CONFIG_CONTENT: configContent, + }); + const config = JSON.parse(env.OPENCODE_CONFIG_CONTENT!); + expect(config.provider?.[providerId]?.models?.[modelId]).toMatchObject({ + reasoning: true, + tool_call: true, + modalities: { input: ['text', 'image'], output: ['text'] }, + limit: { context: 1_050_000, input: 922_000, output: 128_000 }, + }); + if (configContent) + expect(config.provider[providerId].options.custom).toBe(true); + }, + ); + it('materializes LiteLLM provider config for restricted helper inference', () => { const env = buildOpenCodeCliEnv({ R_MODEL: 'litellm/qwen3.6:35b-unsloth', diff --git a/packages/cloud-agents/src/server/opencode-runtime.ts b/packages/cloud-agents/src/server/opencode-runtime.ts index 12ae6f933..9f6cffbdb 100644 --- a/packages/cloud-agents/src/server/opencode-runtime.ts +++ b/packages/cloud-agents/src/server/opencode-runtime.ts @@ -16,6 +16,7 @@ import { mergeBedrockMantleProviderConfig, mergeCatalogProviderCredentialConfig, mergeKimiForCodingProviderConfig, + mergeCuratedOpenCodeModelConfig, mergeOpenAiCompatibleProviderConfig, mergeOpenCodeModelReasoningOptions, mergeOpenCodeChatGptFastModeOptions, @@ -192,13 +193,15 @@ function buildModelBackedOpenCodeConfigContent( const configuredModelIds = NON_TASK_OPENCODE_MODEL_ROLES.map( (role) => roleConfig[role].model, ); - const providerModelConfig = + const providerModelConfig = mergeCuratedOpenCodeModelConfig( env[CHATGPT_FAST_MODE_ENV_VAR_NAME]?.trim() === '1' ? mergeOpenCodeChatGptFastModeOptions( providerReasoningConfig, configuredModelIds, ) - : providerReasoningConfig; + : providerReasoningConfig, + configuredModelIds, + ); // Same Bedrock provider registrations the task worker applies: OpenCode's // catalog knows neither Mantle endpoint, and the native provider does not // read the deployment's bearer token on its own. @@ -495,7 +498,7 @@ function mergeBedrockRegistrationsIntoConfigContent( mergeBedrockMantleOpenAiProviderConfig( mergeKimiForCodingProviderConfig( mergeCatalogProviderCredentialConfig( - existingProvider, + mergeCuratedOpenCodeModelConfig(existingProvider, roleModelIds), env, roleModelIds, ), diff --git a/packages/types/src/__tests__/curated-opencode-models.test.ts b/packages/types/src/__tests__/curated-opencode-models.test.ts new file mode 100644 index 000000000..4e68a670e --- /dev/null +++ b/packages/types/src/__tests__/curated-opencode-models.test.ts @@ -0,0 +1,58 @@ +import { mergeCuratedOpenCodeModelConfig } from '../curated-opencode-models'; + +describe('mergeCuratedOpenCodeModelConfig', () => { + it('leaves unrelated models and providers unchanged', () => { + const config = { azure: { options: { resourceName: 'example' } } }; + expect( + mergeCuratedOpenCodeModelConfig(config, [ + undefined, + 'openai/gpt-6.1-sol', + ]), + ).toBe(config); + }); + + it('fills model defaults without mutating options, SDKs or explicit limits', () => { + const config = { + azure: { + npm: '@ai-sdk/azure', + options: { baseURL: 'https://example.test/v1' }, + models: { + 'gpt-6.1-terra': { + name: 'Custom Terra', + limit: { output: 16_384 }, + modalities: { input: ['text'] }, + options: { reasoningEffort: 'high' }, + }, + other: { name: 'Other' }, + }, + }, + }; + const before = structuredClone(config); + const merged = mergeCuratedOpenCodeModelConfig(config, [ + ' azure/gpt-6.1-terra ', + 'azure/gpt-6.1-terra', + ]); + expect(merged).toMatchObject({ + azure: { + npm: '@ai-sdk/azure', + options: { baseURL: 'https://example.test/v1' }, + models: { + 'gpt-6.1-terra': { + name: 'Custom Terra', + reasoning: true, + tool_call: true, + attachment: true, + limit: { context: 1_050_000, input: 922_000, output: 16_384 }, + modalities: { input: ['text'], output: ['text'] }, + options: { reasoningEffort: 'high' }, + }, + other: { name: 'Other' }, + }, + }, + }); + expect(config).toEqual(before); + expect( + mergeCuratedOpenCodeModelConfig(merged, ['azure/gpt-6.1-terra']), + ).toEqual(merged); + }); +}); diff --git a/packages/types/src/chatgpt-subscription.test.ts b/packages/types/src/chatgpt-subscription.test.ts index 1cabadee5..7e0f8337f 100644 --- a/packages/types/src/chatgpt-subscription.test.ts +++ b/packages/types/src/chatgpt-subscription.test.ts @@ -16,6 +16,7 @@ describe('mergeOpenCodeChatGptFastModeOptions', () => { 'openai/gpt-6-astra', 'openai/gpt-6-sol', 'openai/gpt-6.1-sol', + 'openai/gpt-6.1-terra', 'openai/gpt-6-luna', 'openai/gpt-5.6-terra', 'openai/gpt-5.6-sol', @@ -29,6 +30,7 @@ describe('mergeOpenCodeChatGptFastModeOptions', () => { 'gpt-6-astra': { options: { serviceTier: 'priority' } }, 'gpt-6-sol': { options: { serviceTier: 'priority' } }, 'gpt-6.1-sol': { options: { serviceTier: 'priority' } }, + 'gpt-6.1-terra': { options: { serviceTier: 'priority' } }, 'gpt-6-luna': { options: { serviceTier: 'priority' } }, 'gpt-5.6-terra': { options: { reasoningEffort: 'high', serviceTier: 'priority' }, @@ -46,6 +48,8 @@ describe('mergeOpenCodeChatGptFastModeOptions', () => { expect( mergeOpenCodeChatGptFastModeOptions(initial, [ 'openrouter/openai/gpt-5.4', + 'openrouter/openai/gpt-6.1-terra', + 'vercel/openai/gpt-6.1-terra', 'openai/gpt-5.4-mini', 'openai/gpt-5.3-codex-spark', ]), diff --git a/packages/types/src/chatgpt-subscription.ts b/packages/types/src/chatgpt-subscription.ts index 41af1c9f9..bde67c1a1 100644 --- a/packages/types/src/chatgpt-subscription.ts +++ b/packages/types/src/chatgpt-subscription.ts @@ -38,6 +38,7 @@ const CHATGPT_FAST_MODE_MODEL_IDS = new Set([ 'gpt-6-astra', 'gpt-6-sol', 'gpt-6.1-sol', + 'gpt-6.1-terra', 'gpt-6-luna', 'gpt-5.4', 'gpt-5.5', diff --git a/packages/types/src/curated-opencode-models.ts b/packages/types/src/curated-opencode-models.ts new file mode 100644 index 000000000..cf77b3f6b --- /dev/null +++ b/packages/types/src/curated-opencode-models.ts @@ -0,0 +1,71 @@ +/** + * Runtime definitions for curated routes that are not yet in OpenCode's + * catalog. Shared by task and helper config builders so role-only selections + * resolve without depending on reasoning options to register the model. + */ +const GPT_61_TERRA = { + name: 'GPT-6.1 Terra', + family: 'gpt-terra', + release_date: '2026-10-26', + attachment: true, + reasoning: true, + temperature: false, + tool_call: true, + modalities: { input: ['text', 'image'], output: ['text'] }, + limit: { context: 1_050_000, input: 922_000, output: 128_000 }, +}; + +// Capabilities/limits: https://developers.openai.com/api/docs/models/gpt-6.1-terra +// Azure: https://learn.microsoft.com/en-us/azure/foundry/foundry-models/concepts/models-sold-directly-by-azure#gpt-61 +// Requesty route: https://router.requesty.ai/v1/models +const CURATED_OPENCODE_MODELS = { + 'requesty/azure/gpt-6.1-terra@swedencentral': GPT_61_TERRA, + 'azure/gpt-6.1-terra': GPT_61_TERRA, + 'azure-cognitive-services/gpt-6.1-terra': GPT_61_TERRA, +}; + +function asRecord(value: unknown): Record { + return value && typeof value === 'object' && !Array.isArray(value) + ? (value as Record) + : {}; +} + +/** Fill known model defaults without changing SDKs, credentials or overrides. */ +export function mergeCuratedOpenCodeModelConfig( + providerConfig: Record, + modelIds: Array, +): Record { + let merged = providerConfig; + const selectedIds = new Set(modelIds.map((modelId) => modelId?.trim())); + + for (const [id, definition] of Object.entries(CURATED_OPENCODE_MODELS)) { + if (!selectedIds.has(id)) continue; + + const separator = id.indexOf('/'); + const providerId = id.slice(0, separator); + const modelId = id.slice(separator + 1); + const provider = asRecord(merged[providerId]); + const models = asRecord(provider.models); + const model = asRecord(models[modelId]); + merged = { + ...merged, + [providerId]: { + ...provider, + models: { + ...models, + [modelId]: { + ...definition, + ...model, + modalities: { + ...definition.modalities, + ...asRecord(model.modalities), + }, + limit: { ...definition.limit, ...asRecord(model.limit) }, + }, + }, + }, + }; + } + + return merged; +} diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts index 1f302134d..875611dbb 100644 --- a/packages/types/src/index.ts +++ b/packages/types/src/index.ts @@ -73,6 +73,7 @@ export * from './openai-compatible-providers'; export * from './recommended-task-models'; export * from './opencode-openrouter-variants'; export * from './opencode-provider-config'; +export * from './curated-opencode-models'; export * from './opencode-reasoning'; export * from './task-model-reasoning'; export * from './mcp-oauth'; diff --git a/packages/types/src/model-provider-config.test.ts b/packages/types/src/model-provider-config.test.ts index 0160fbf0e..ce9b05d66 100644 --- a/packages/types/src/model-provider-config.test.ts +++ b/packages/types/src/model-provider-config.test.ts @@ -818,6 +818,25 @@ describe('SETUP_MODEL_PROVIDER_CATALOG', () => { } }); + it('offers GPT-6.1 Terra only on verified routes', () => { + const terraRoutes = SETUP_MODEL_PROVIDER_CATALOG.flatMap((provider) => + provider.suggestedTaskModels + .filter((model) => model.displayName.startsWith('GPT-6.1 Terra')) + .map((model) => [provider.id, model.id]), + ); + + expect(terraRoutes).toEqual([ + ['roomote', 'roomote/openai/gpt-6.1-terra'], + ['openrouter', 'openrouter/openai/gpt-6.1-terra'], + ['vercel', 'vercel/openai/gpt-6.1-terra'], + ['requesty', 'requesty/azure/gpt-6.1-terra@swedencentral'], + ['openai', 'openai/gpt-6.1-terra'], + ['azure', 'azure/gpt-6.1-terra'], + ['azure-cognitive-services', 'azure-cognitive-services/gpt-6.1-terra'], + ['chatgpt', 'openai/gpt-6.1-terra'], + ]); + }); + it('uses the Default Luna preset for every applicable role', () => { for (const provider of SETUP_MODEL_PROVIDER_CATALOG) { const luna = provider.suggestedTaskModels.find( @@ -1208,6 +1227,7 @@ describe('SETUP_MODEL_PROVIDER_CATALOG', () => { 'requesty/gpt-5.6-sol@eu', 'requesty/gpt-6-sol@eu', 'requesty/gpt-6.1-sol@eu', + 'requesty/azure/gpt-6.1-terra@swedencentral', 'requesty/gpt-5.6-terra@eu', 'requesty/gpt-5.6-luna@eu', 'requesty/gpt-6-luna@eu', diff --git a/packages/types/src/model-provider-config.ts b/packages/types/src/model-provider-config.ts index ffceb50eb..3635c31f7 100644 --- a/packages/types/src/model-provider-config.ts +++ b/packages/types/src/model-provider-config.ts @@ -779,6 +779,7 @@ export const SETUP_MODEL_PROVIDER_CATALOG = [ 'gpt-5-6-sol': 'vercel/openai/gpt-5.6-sol', 'gpt-6-sol': 'vercel/openai/gpt-6-sol', 'gpt-6-1-sol': 'vercel/openai/gpt-6.1-sol', + 'gpt-6-1-terra': 'vercel/openai/gpt-6.1-terra', 'gpt-5-6-terra': 'vercel/openai/gpt-5.6-terra', 'gpt-5-6-luna': 'vercel/openai/gpt-5.6-luna', 'gpt-6-luna': 'vercel/openai/gpt-6-luna', @@ -821,6 +822,8 @@ export const SETUP_MODEL_PROVIDER_CATALOG = [ 'gpt-5-6-sol': 'requesty/gpt-5.6-sol@eu', 'gpt-6-sol': 'requesty/gpt-6-sol@eu', 'gpt-6-1-sol': 'requesty/gpt-6.1-sol@eu', + // Requesty's live catalog publishes explicit Azure regional routes. + 'gpt-6-1-terra': 'requesty/azure/gpt-6.1-terra@swedencentral', 'gpt-5-6-terra': 'requesty/gpt-5.6-terra@eu', 'gpt-5-6-luna': 'requesty/gpt-5.6-luna@eu', 'gpt-6-luna': 'requesty/gpt-6-luna@eu', @@ -906,6 +909,7 @@ export const SETUP_MODEL_PROVIDER_CATALOG = [ 'gpt-5-6-sol': 'openai/gpt-5.6-sol', 'gpt-6-sol': 'openai/gpt-6-sol', 'gpt-6-1-sol': 'openai/gpt-6.1-sol', + 'gpt-6-1-terra': 'openai/gpt-6.1-terra', 'gpt-5-6-terra': 'openai/gpt-5.6-terra', 'gpt-5-6-luna': 'openai/gpt-5.6-luna', 'gpt-6-luna': 'openai/gpt-6-luna', @@ -936,6 +940,7 @@ export const SETUP_MODEL_PROVIDER_CATALOG = [ 'gpt-5-6-sol': 'azure/gpt-5.6-sol', 'gpt-6-sol': 'azure/gpt-6-sol', 'gpt-6-1-sol': 'azure/gpt-6.1-sol', + 'gpt-6-1-terra': 'azure/gpt-6.1-terra', 'gpt-5-6-terra': 'azure/gpt-5.6-terra', 'gpt-5-6-luna': 'azure/gpt-5.6-luna', 'gpt-6-luna': 'azure/gpt-6-luna', @@ -978,6 +983,7 @@ export const SETUP_MODEL_PROVIDER_CATALOG = [ 'gpt-5-6-sol': 'azure-cognitive-services/gpt-5.6-sol', 'gpt-6-sol': 'azure-cognitive-services/gpt-6-sol', 'gpt-6-1-sol': 'azure-cognitive-services/gpt-6.1-sol', + 'gpt-6-1-terra': 'azure-cognitive-services/gpt-6.1-terra', 'gpt-5-6-terra': 'azure-cognitive-services/gpt-5.6-terra', 'gpt-5-6-luna': 'azure-cognitive-services/gpt-5.6-luna', 'gpt-6-luna': 'azure-cognitive-services/gpt-6-luna', @@ -1409,6 +1415,7 @@ export const SETUP_MODEL_PROVIDER_CATALOG = [ 'gpt-5-6-sol': 'openai/gpt-5.6-sol', 'gpt-6-sol': 'openai/gpt-6-sol', 'gpt-6-1-sol': 'openai/gpt-6.1-sol', + 'gpt-6-1-terra': 'openai/gpt-6.1-terra', 'gpt-5-6-terra': 'openai/gpt-5.6-terra', 'gpt-5-6-luna': 'openai/gpt-5.6-luna', 'gpt-6-luna': 'openai/gpt-6-luna', diff --git a/packages/types/src/recommended-task-models.ts b/packages/types/src/recommended-task-models.ts index dbf521bcb..d3ce94981 100644 --- a/packages/types/src/recommended-task-models.ts +++ b/packages/types/src/recommended-task-models.ts @@ -47,6 +47,7 @@ export const RECOMMENDED_TASK_MODELS = [ { id: 'gpt-5-6-sol', displayName: 'GPT 5.6 Sol', family: 'GPT' }, { id: 'gpt-6-sol', displayName: 'GPT-6 Sol', family: 'GPT' }, { id: 'gpt-6-1-sol', displayName: 'GPT-6.1 Sol', family: 'GPT' }, + { id: 'gpt-6-1-terra', displayName: 'GPT-6.1 Terra', family: 'GPT' }, { id: 'gpt-5-6-terra', displayName: 'GPT 5.6 Terra', family: 'GPT' }, { id: 'gpt-5-6-luna', displayName: 'GPT 5.6 Luna', family: 'GPT' }, { id: 'gpt-6-luna', displayName: 'GPT-6 Luna', family: 'GPT' }, @@ -119,6 +120,7 @@ export const OPENROUTER_RECOMMENDED_TASK_MODEL_SLUGS = { 'gpt-5-6-sol': 'openrouter/openai/gpt-5.6-sol', 'gpt-6-sol': 'openrouter/openai/gpt-6-sol', 'gpt-6-1-sol': 'openrouter/openai/gpt-6.1-sol', + 'gpt-6-1-terra': 'openrouter/openai/gpt-6.1-terra', 'gpt-5-6-terra': 'openrouter/openai/gpt-5.6-terra', 'gpt-5-6-luna': 'openrouter/openai/gpt-5.6-luna', 'gpt-6-luna': 'openrouter/openai/gpt-6-luna',