41 lines
1.4 KiB
TypeScript
41 lines
1.4 KiB
TypeScript
import { assistantHomarrProviderTokenHeader } from "@homarr/definitions";
|
|
|
|
/**
|
|
* The AI SDK resolves provider options by the provider name registered on the
|
|
* language model. The @ai-sdk/openai-compatible provider converts the raw
|
|
* provider name (for example `homarr-openrouter`) to camelCase
|
|
* (`homarrOpenrouter`) and warns when the raw key is still used. This helper
|
|
* mirrors that conversion so providerOptions reach the provider without a
|
|
* deprecation warning.
|
|
*/
|
|
export const toProviderOptionsKey = (name: string) =>
|
|
name
|
|
.split("-")
|
|
.filter(Boolean)
|
|
.map((segment, index) => {
|
|
if (index === 0) return segment;
|
|
return segment.charAt(0).toUpperCase() + segment.slice(1);
|
|
})
|
|
.join("");
|
|
|
|
export const getHomarrProviderBaseUrl = (workshopApiUrl: string) => `${workshopApiUrl.replace(/\/+$/u, "")}/api/ai/v1`;
|
|
|
|
export const resolveHomarrProviderToken = ({
|
|
provider,
|
|
configuredBaseUrl,
|
|
workshopApiUrl,
|
|
headers,
|
|
}: {
|
|
provider: string;
|
|
configuredBaseUrl: string;
|
|
workshopApiUrl: string;
|
|
headers: Headers;
|
|
}) => {
|
|
if (provider !== "homarr") return undefined;
|
|
if (configuredBaseUrl.replace(/\/+$/u, "") !== getHomarrProviderBaseUrl(workshopApiUrl)) {
|
|
throw new Error("The Homarr provider endpoint does not match the configured Workshop server.");
|
|
}
|
|
const token = headers.get(assistantHomarrProviderTokenHeader)?.trim();
|
|
return token && token.length <= 4096 ? token : null;
|
|
};
|