Add Azure OpenAI Custom Model Integration (#1001)
Fixes #710 This PR implements comprehensive Azure OpenAI integration for Dyad, enabling users to leverage Azure OpenAI models through proper environment variable configuration. The implementation adds Azure as a supported provider with full integration into the existing language model architecture, including support for GPT-5 models. Key features include environment-based configuration using `AZURE_API_KEY` and `AZURE_RESOURCE_NAME`, specialized UI components that provide clear setup instructions and status indicators, and seamless integration with Dyad's existing provider system. The Azure provider leverages the @ai-sdk/azure package (v1.3.25) for compatibility with the current TypeScript language model interfaces. The implementation includes robust error handling for missing configuration, comprehensive test coverage with 9 new unit tests covering critical functionality like model client creation and error scenarios, and an E2E test for the Azure-specific settings UI. <img width="1510" height="908" alt="Screenshot 2025-08-18 at 9 14 32 PM" src="https://github.com/user-attachments/assets/04aa99e1-1590-4bb0-86c9-a67b97bc7500" /> --------- Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com> Co-authored-by: Will Chen <willchen90@gmail.com>
This commit is contained in:
43
e2e-tests/azure_provider_settings.spec.ts
Normal file
43
e2e-tests/azure_provider_settings.spec.ts
Normal file
@@ -0,0 +1,43 @@
|
||||
import { expect } from "@playwright/test";
|
||||
import { test as testWithPo } from "./helpers/test_helper";
|
||||
|
||||
testWithPo("Azure provider settings UI", async ({ po }) => {
|
||||
await po.setUp();
|
||||
await po.goToSettingsTab();
|
||||
|
||||
// Look for Azure OpenAI in the provider list
|
||||
await expect(po.page.getByText("Azure OpenAI")).toBeVisible();
|
||||
|
||||
// Navigate to Azure provider settings
|
||||
await po.page.getByText("Azure OpenAI").click();
|
||||
|
||||
// Wait for Azure settings page to load
|
||||
await po.page.waitForSelector('h1:has-text("Configure Azure OpenAI")', {
|
||||
state: "visible",
|
||||
timeout: 5000,
|
||||
});
|
||||
|
||||
// Check that Azure-specific UI is displayed
|
||||
await expect(po.page.getByText("Azure OpenAI Configuration")).toBeVisible();
|
||||
await expect(po.page.getByText("AZURE_API_KEY")).toBeVisible();
|
||||
await expect(po.page.getByText("AZURE_RESOURCE_NAME")).toBeVisible();
|
||||
|
||||
// Check environment variable status indicators exist
|
||||
await expect(
|
||||
po.page.getByText("Environment Variables Configuration"),
|
||||
).toBeVisible();
|
||||
|
||||
// Check setup instructions are present
|
||||
await expect(po.page.getByText("How to configure:")).toBeVisible();
|
||||
await expect(
|
||||
po.page.getByText("Get your API key from the Azure portal"),
|
||||
).toBeVisible();
|
||||
await expect(po.page.getByText("Find your resource name")).toBeVisible();
|
||||
await expect(
|
||||
po.page.getByText("Set these environment variables before starting Dyad"),
|
||||
).toBeVisible();
|
||||
|
||||
// Check that status indicators show "Not Set" (since no env vars are configured in test)
|
||||
const statusElements = po.page.locator(".bg-red-100, .bg-red-800\\/20");
|
||||
await expect(statusElements.first()).toBeVisible();
|
||||
});
|
||||
Reference in New Issue
Block a user