import { DEFAULT_OPENAI_MODEL } from "@nexus/shared"; import { InfoTooltip } from "~/components/ui/InfoTooltip.js"; import { INPUT_CLASS, LABEL_CLASS, PANEL_CLASS, PRIMARY_BUTTON_CLASS, SECONDARY_BUTTON_CLASS, RuntimeSecretCard, type Provider, type RuntimeSecretStatus, type SaveResult, type UrlParsedType, } from "./shared.js"; type AiProviderPanelProps = { provider: Provider; endpoint: string; model: string; apiVersion: string; urlPasteValue: string; urlParseError: boolean; urlParsedType: UrlParsedType; runtimeSecret: RuntimeSecretStatus; testResult: SaveResult | null; isSaving: boolean; isTesting: boolean; saved: boolean; onProviderChange: (provider: Provider) => void; onEndpointChange: (value: string) => void; onModelChange: (value: string) => void; onApiVersionChange: (value: string) => void; onUrlPaste: (value: string) => void; onSave: () => void; onTest: () => void; }; export function AiProviderPanel({ provider, endpoint, model, apiVersion, urlPasteValue, urlParseError, urlParsedType, runtimeSecret, testResult, isSaving, isTesting, saved, onProviderChange, onEndpointChange, onModelChange, onApiVersionChange, onUrlPaste, onSave, onTest, }: AiProviderPanelProps) { return (
{provider === "openai" ? "Use a standard OpenAI API key from platform.openai.com." : "Use a deployment on your own Azure OpenAI resource."}
Paste a full completion URL to auto-fill all fields below:
onUrlPaste(event.target.value)} /> {urlParseError ? (
Could not parse URL; expected either a Chat Completions URL (
/openai/deployments/…/chat/completions) or a
Responses API URL (/openai/responses).
Responses API URL detected. Endpoint and api-version were filled in, but the deployment or model name still has to be entered manually below.
) : null} {urlParsedType === "completions" ? (All fields filled from URL.
) : null}
Everything up to (not including) /openai/…
{provider === "azure" ? "The deployment name chosen when deploying the model in Azure." : `The model identifier, for example ${DEFAULT_OPENAI_MODEL} or gpt-5.4-pro.`}
The api-version query parameter from the endpoint
URL. Default: 2025-01-01-preview
Connection failed: {testResult.error}
Reasoning models consume tokens internally before writing output. Keep this at 2000 or above to avoid empty responses.
Some models only accept the default value of 1. If generation fails with a temperature error, the system retries automatically without it.