From ba0fa196f4a2159a180bc745bfe4248012a97ad4 Mon Sep 17 00:00:00 2001 From: Siddharth Ganesan Date: Tue, 4 Nov 2025 21:14:23 -0800 Subject: [PATCH 1/3] Filter to just azure on azure config --- apps/sim/app/api/copilot/chat/route.ts | 1 + apps/sim/app/api/copilot/user-models/route.ts | 27 +++++++++++++++++++ .../components/user-input/user-input.tsx | 1 + apps/sim/stores/copilot/types.ts | 1 + 4 files changed, 30 insertions(+) diff --git a/apps/sim/app/api/copilot/chat/route.ts b/apps/sim/app/api/copilot/chat/route.ts index 5a90b167bd..061853ecfb 100644 --- a/apps/sim/app/api/copilot/chat/route.ts +++ b/apps/sim/app/api/copilot/chat/route.ts @@ -50,6 +50,7 @@ const ChatMessageSchema = z.object({ 'claude-4.5-haiku', 'claude-4.5-sonnet', 'claude-4.1-opus', + 'azure-openai', ]) .optional() .default('claude-4.5-sonnet'), diff --git a/apps/sim/app/api/copilot/user-models/route.ts b/apps/sim/app/api/copilot/user-models/route.ts index a0e8c65e11..b696bf3408 100644 --- a/apps/sim/app/api/copilot/user-models/route.ts +++ b/apps/sim/app/api/copilot/user-models/route.ts @@ -1,6 +1,7 @@ import { eq } from 'drizzle-orm' import { type NextRequest, NextResponse } from 'next/server' import { auth } from '@/lib/auth' +import { env } from '@/lib/env' import { createLogger } from '@/lib/logs/console/logger' import { db } from '@/../../packages/db' import { settings } from '@/../../packages/db/schema' @@ -63,6 +64,18 @@ export async function GET(request: NextRequest) { .where(eq(settings.userId, userId)) } + const providerEnv = env.COPILOT_PROVIDER as any + if (providerEnv === 'azure-openai') { + const azureFilteredModels: Record = {} + for (const [modelId] of Object.entries(mergedModels)) { + azureFilteredModels[modelId] = modelId === 'azure-openai' + } + azureFilteredModels['azure-openai'] = true + return NextResponse.json({ + enabledModels: azureFilteredModels, + }) + } + return NextResponse.json({ enabledModels: mergedModels, }) @@ -77,6 +90,20 @@ export async function GET(request: NextRequest) { logger.info('Created new settings record with default models', { userId }) + // If Azure is configured as the copilot provider, only show azure-openai + const providerEnv = env.COPILOT_PROVIDER as any + if (providerEnv === 'azure-openai') { + const azureFilteredModels: Record = {} + for (const modelId of Object.keys(DEFAULT_ENABLED_MODELS)) { + azureFilteredModels[modelId] = modelId === 'azure-openai' + } + // Enable azure-openai model + azureFilteredModels['azure-openai'] = true + return NextResponse.json({ + enabledModels: azureFilteredModels, + }) + } + return NextResponse.json({ enabledModels: DEFAULT_ENABLED_MODELS, }) diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components/user-input/user-input.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components/user-input/user-input.tsx index 6830a319d5..382153b94b 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components/user-input/user-input.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components/user-input/user-input.tsx @@ -1736,6 +1736,7 @@ const UserInput = forwardRef( { value: 'claude-4.5-haiku', label: 'claude-4.5-haiku' }, { value: 'claude-4.5-sonnet', label: 'claude-4.5-sonnet' }, { value: 'claude-4.1-opus', label: 'claude-4.1-opus' }, + { value: 'azure-openai', label: 'azure-openai' }, ] as const // Filter models based on user preferences diff --git a/apps/sim/stores/copilot/types.ts b/apps/sim/stores/copilot/types.ts index f615dd6d21..59a909fe16 100644 --- a/apps/sim/stores/copilot/types.ts +++ b/apps/sim/stores/copilot/types.ts @@ -80,6 +80,7 @@ export interface CopilotState { | 'claude-4.5-haiku' | 'claude-4.5-sonnet' | 'claude-4.1-opus' + | 'azure-openai' agentPrefetch: boolean enabledModels: string[] | null // Null means not loaded yet, array of model IDs when loaded isCollapsed: boolean From 1b85f65e0642b71fdd649166b7caaca869575393 Mon Sep 17 00:00:00 2001 From: Siddharth Ganesan Date: Tue, 4 Nov 2025 21:40:40 -0800 Subject: [PATCH 2/3] Fixes --- apps/sim/app/api/copilot/chat/route.ts | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/apps/sim/app/api/copilot/chat/route.ts b/apps/sim/app/api/copilot/chat/route.ts index 061853ecfb..0da4d7fde6 100644 --- a/apps/sim/app/api/copilot/chat/route.ts +++ b/apps/sim/app/api/copilot/chat/route.ts @@ -87,6 +87,15 @@ const ChatMessageSchema = z.object({ }) ) .optional(), + azureConfig: z + .object({ + provider: z.string().optional(), + model: z.string().optional(), + endpoint: z.string().optional(), + apiVersion: z.string().optional(), + apiKey: z.string().optional(), + }) + .optional(), }) /** @@ -285,6 +294,17 @@ export async function POST(req: NextRequest) { let providerConfig: CopilotProviderConfig | undefined const providerEnv = env.COPILOT_PROVIDER as any + let azureConfig: any = undefined + if (providerEnv === 'azure-openai' || model === 'azure-openai') { + azureConfig = { + provider: 'azure-openai', + model: modelToUse, + endpoint: env.AZURE_OPENAI_ENDPOINT, + apiVersion: 'preview', + apiKey: env.AZURE_OPENAI_API_KEY, + } + } + if (providerEnv) { if (providerEnv === 'azure-openai') { providerConfig = { @@ -324,6 +344,7 @@ export async function POST(req: NextRequest) { ...(agentContexts.length > 0 && { context: agentContexts }), ...(actualChatId ? { chatId: actualChatId } : {}), ...(processedFileContents.length > 0 && { fileAttachments: processedFileContents }), + ...(azureConfig ? { azureConfig } : {}), } try { From 30e724235d64de3c444feb7cdeac6166bd18e33a Mon Sep 17 00:00:00 2001 From: Siddharth Ganesan Date: Tue, 4 Nov 2025 21:40:52 -0800 Subject: [PATCH 3/3] Fix azure config --- apps/sim/app/api/copilot/chat/route.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/sim/app/api/copilot/chat/route.ts b/apps/sim/app/api/copilot/chat/route.ts index 0da4d7fde6..0dd6376acb 100644 --- a/apps/sim/app/api/copilot/chat/route.ts +++ b/apps/sim/app/api/copilot/chat/route.ts @@ -294,7 +294,7 @@ export async function POST(req: NextRequest) { let providerConfig: CopilotProviderConfig | undefined const providerEnv = env.COPILOT_PROVIDER as any - let azureConfig: any = undefined + let azureConfig: any if (providerEnv === 'azure-openai' || model === 'azure-openai') { azureConfig = { provider: 'azure-openai',