mirror of
https://github.com/fosrl/pangolin.git
synced 2026-08-14 08:19:51 +02:00
always require upstream url
This commit is contained in:
+1
-1
@@ -1777,7 +1777,7 @@
|
|||||||
"aiProviderTypeMicrosoftFoundryDescription": "Microsoft Foundry; upstream URL required",
|
"aiProviderTypeMicrosoftFoundryDescription": "Microsoft Foundry; upstream URL required",
|
||||||
"aiProviderTypeOpenRouterDescription": "OpenRouter API",
|
"aiProviderTypeOpenRouterDescription": "OpenRouter API",
|
||||||
"aiProviderTypeVercelAiGatewayDescription": "Vercel AI Gateway",
|
"aiProviderTypeVercelAiGatewayDescription": "Vercel AI Gateway",
|
||||||
"aiProviderTypeCustomDescription": "Bring your own OpenAI-compatible endpoint or route via Pangolin targets",
|
"aiProviderTypeCustomDescription": "Bring your own endpoint or route via site targets",
|
||||||
"aiProviderUpstreamUrl": "Upstream URL",
|
"aiProviderUpstreamUrl": "Upstream URL",
|
||||||
"aiProviderUpstreamUrlDescription": "Base URL for the provider API",
|
"aiProviderUpstreamUrlDescription": "Base URL for the provider API",
|
||||||
"aiProviderUpstreamUrlOptionalDescription": "Leave blank to use the default upstream URL for this provider",
|
"aiProviderUpstreamUrlOptionalDescription": "Leave blank to use the default upstream URL for this provider",
|
||||||
|
|||||||
@@ -41,7 +41,6 @@ import {
|
|||||||
createAiProviderFormSchema,
|
createAiProviderFormSchema,
|
||||||
showsUpstreamUrlField,
|
showsUpstreamUrlField,
|
||||||
toAiProviderNetworkPayload,
|
toAiProviderNetworkPayload,
|
||||||
upstreamUrlRequired,
|
|
||||||
type AiProviderFormValues
|
type AiProviderFormValues
|
||||||
} from "@app/lib/aiProviderFormSchema";
|
} from "@app/lib/aiProviderFormSchema";
|
||||||
import { aiProviderQueries } from "@app/lib/queries";
|
import { aiProviderQueries } from "@app/lib/queries";
|
||||||
@@ -91,7 +90,6 @@ export default function AiProviderNetworkPage() {
|
|||||||
const providerType = form.watch("type");
|
const providerType = form.watch("type");
|
||||||
const routingMode = form.watch("routingMode");
|
const routingMode = form.watch("routingMode");
|
||||||
const showUpstream = showsUpstreamUrlField(providerType, routingMode);
|
const showUpstream = showsUpstreamUrlField(providerType, routingMode);
|
||||||
const requireUpstream = upstreamUrlRequired(providerType, routingMode);
|
|
||||||
const showRoutingMode = providerType === "custom";
|
const showRoutingMode = providerType === "custom";
|
||||||
const isTargetModeSelected = routingMode === "target";
|
const isTargetModeSelected = routingMode === "target";
|
||||||
const isTargetModeSaved =
|
const isTargetModeSaved =
|
||||||
@@ -218,22 +216,9 @@ export default function AiProviderNetworkPage() {
|
|||||||
field.value ??
|
field.value ??
|
||||||
"url"
|
"url"
|
||||||
}
|
}
|
||||||
onChange={(
|
onChange={
|
||||||
value
|
field.onChange
|
||||||
) => {
|
}
|
||||||
field.onChange(
|
|
||||||
value
|
|
||||||
);
|
|
||||||
if (
|
|
||||||
value ===
|
|
||||||
"target"
|
|
||||||
) {
|
|
||||||
form.setValue(
|
|
||||||
"upstreamUrl",
|
|
||||||
""
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}}
|
|
||||||
/>
|
/>
|
||||||
</FormControl>
|
</FormControl>
|
||||||
<FormMessage />
|
<FormMessage />
|
||||||
@@ -284,14 +269,10 @@ export default function AiProviderNetworkPage() {
|
|||||||
{t(
|
{t(
|
||||||
"aiProviderUpstreamUrl"
|
"aiProviderUpstreamUrl"
|
||||||
)}
|
)}
|
||||||
{requireUpstream
|
|
||||||
? ""
|
|
||||||
: " (optional)"}
|
|
||||||
</FormLabel>
|
</FormLabel>
|
||||||
<FormControl>
|
<FormControl>
|
||||||
<Input
|
<Input
|
||||||
autoComplete="off"
|
autoComplete="off"
|
||||||
placeholder="https://"
|
|
||||||
value={
|
value={
|
||||||
field.value ??
|
field.value ??
|
||||||
""
|
""
|
||||||
@@ -302,13 +283,9 @@ export default function AiProviderNetworkPage() {
|
|||||||
/>
|
/>
|
||||||
</FormControl>
|
</FormControl>
|
||||||
<FormDescription>
|
<FormDescription>
|
||||||
{requireUpstream
|
{t(
|
||||||
? t(
|
"aiProviderUpstreamUrlDescription"
|
||||||
"aiProviderUpstreamUrlDescription"
|
)}
|
||||||
)
|
|
||||||
: t(
|
|
||||||
"aiProviderUpstreamUrlOptionalDescription"
|
|
||||||
)}
|
|
||||||
</FormDescription>
|
</FormDescription>
|
||||||
<FormMessage />
|
<FormMessage />
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|||||||
@@ -49,7 +49,6 @@ import {
|
|||||||
emptyUpstreamForType,
|
emptyUpstreamForType,
|
||||||
showsUpstreamUrlField,
|
showsUpstreamUrlField,
|
||||||
toAiProviderCreatePayload,
|
toAiProviderCreatePayload,
|
||||||
upstreamUrlRequired,
|
|
||||||
type AiProviderFormValues
|
type AiProviderFormValues
|
||||||
} from "@app/lib/aiProviderFormSchema";
|
} from "@app/lib/aiProviderFormSchema";
|
||||||
import { zodResolver } from "@hookform/resolvers/zod";
|
import { zodResolver } from "@hookform/resolvers/zod";
|
||||||
@@ -95,7 +94,6 @@ export default function CreateAiProviderPage() {
|
|||||||
const authType = form.watch("authType");
|
const authType = form.watch("authType");
|
||||||
|
|
||||||
const showUpstream = showsUpstreamUrlField(providerType, routingMode);
|
const showUpstream = showsUpstreamUrlField(providerType, routingMode);
|
||||||
const requireUpstream = upstreamUrlRequired(providerType, routingMode);
|
|
||||||
const showRoutingMode = providerType === "custom";
|
const showRoutingMode = providerType === "custom";
|
||||||
const showTargets = providerType === "custom" && routingMode === "target";
|
const showTargets = providerType === "custom" && routingMode === "target";
|
||||||
const showApiKey = authTypeRequiresApiKey(authType ?? "bearer");
|
const showApiKey = authTypeRequiresApiKey(authType ?? "bearer");
|
||||||
@@ -436,14 +434,9 @@ export default function CreateAiProviderPage() {
|
|||||||
value
|
value
|
||||||
);
|
);
|
||||||
if (
|
if (
|
||||||
value ===
|
value !==
|
||||||
"target"
|
"target"
|
||||||
) {
|
) {
|
||||||
form.setValue(
|
|
||||||
"upstreamUrl",
|
|
||||||
""
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
targetsRef.current =
|
targetsRef.current =
|
||||||
[];
|
[];
|
||||||
}
|
}
|
||||||
@@ -498,14 +491,10 @@ export default function CreateAiProviderPage() {
|
|||||||
{t(
|
{t(
|
||||||
"aiProviderUpstreamUrl"
|
"aiProviderUpstreamUrl"
|
||||||
)}
|
)}
|
||||||
{requireUpstream
|
|
||||||
? ""
|
|
||||||
: " (optional)"}
|
|
||||||
</FormLabel>
|
</FormLabel>
|
||||||
<FormControl>
|
<FormControl>
|
||||||
<Input
|
<Input
|
||||||
autoComplete="off"
|
autoComplete="off"
|
||||||
placeholder="https://"
|
|
||||||
value={
|
value={
|
||||||
field.value ??
|
field.value ??
|
||||||
""
|
""
|
||||||
@@ -516,13 +505,9 @@ export default function CreateAiProviderPage() {
|
|||||||
/>
|
/>
|
||||||
</FormControl>
|
</FormControl>
|
||||||
<FormDescription>
|
<FormDescription>
|
||||||
{requireUpstream
|
{t(
|
||||||
? t(
|
"aiProviderUpstreamUrlDescription"
|
||||||
"aiProviderUpstreamUrlDescription"
|
)}
|
||||||
)
|
|
||||||
: t(
|
|
||||||
"aiProviderUpstreamUrlOptionalDescription"
|
|
||||||
)}
|
|
||||||
</FormDescription>
|
</FormDescription>
|
||||||
<FormMessage />
|
<FormMessage />
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|||||||
@@ -85,13 +85,8 @@ export function providerRequiresUpstreamUrl(
|
|||||||
type: AiProviderType,
|
type: AiProviderType,
|
||||||
routingMode: AiProviderRoutingMode = "url"
|
routingMode: AiProviderRoutingMode = "url"
|
||||||
): boolean {
|
): boolean {
|
||||||
if (routingMode === "target") {
|
const mode = type === "custom" ? routingMode : "url";
|
||||||
return false;
|
return mode !== "target";
|
||||||
}
|
|
||||||
if (type === "custom") {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return AI_PROVIDER_DEFAULTS[type].upstreamUrl === null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function defaultsForProviderType(
|
export function defaultsForProviderType(
|
||||||
|
|||||||
@@ -148,17 +148,6 @@ export function emptyUpstreamForType(type: AiProviderType): string {
|
|||||||
export function showsUpstreamUrlField(
|
export function showsUpstreamUrlField(
|
||||||
type: AiProviderType,
|
type: AiProviderType,
|
||||||
routingMode: "url" | "target" | undefined
|
routingMode: "url" | "target" | undefined
|
||||||
): boolean {
|
|
||||||
const mode = type === "custom" ? (routingMode ?? "url") : "url";
|
|
||||||
if (mode === "target") {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function upstreamUrlRequired(
|
|
||||||
type: AiProviderType,
|
|
||||||
routingMode: "url" | "target" | undefined
|
|
||||||
): boolean {
|
): boolean {
|
||||||
const mode = type === "custom" ? (routingMode ?? "url") : "url";
|
const mode = type === "custom" ? (routingMode ?? "url") : "url";
|
||||||
return providerRequiresUpstreamUrl(type, mode);
|
return providerRequiresUpstreamUrl(type, mode);
|
||||||
|
|||||||
Reference in New Issue
Block a user