Files
prowler/ui/components/lighthouse-v1/llm-provider-registry.ts
T

120 lines
2.9 KiB
TypeScript

"use client";
import { AmazonWebServicesIcon, OpenAIIcon } from "@/components/icons/Icons";
import type { IconComponent } from "@/types/components";
import type { LighthouseProvider } from "@/types/lighthouse-v1";
export type LLMProviderFieldType = "text" | "password";
export interface LLMProviderField {
name: string;
type: LLMProviderFieldType;
label: string;
placeholder: string;
required: boolean;
requiresConnectionTest?: boolean;
}
export interface LLMProviderConfig {
id: LighthouseProvider;
name: string;
description: string;
icon: IconComponent;
fields: LLMProviderField[];
}
export const LLM_PROVIDER_REGISTRY: Record<
LighthouseProvider,
LLMProviderConfig
> = {
openai: {
id: "openai",
name: "OpenAI",
description: "Industry-leading GPT models for general-purpose AI",
icon: OpenAIIcon,
fields: [
{
name: "api_key",
type: "password",
label: "API Key",
placeholder: "Enter your API key",
required: true,
requiresConnectionTest: true,
},
],
},
bedrock: {
id: "bedrock",
name: "Amazon Bedrock",
description: "AWS-managed AI with Claude, Llama, Titan & more",
icon: AmazonWebServicesIcon,
fields: [
{
name: "access_key_id",
type: "text",
label: "AWS Access Key ID",
placeholder: "Enter the AWS Access Key ID",
required: true,
requiresConnectionTest: true,
},
{
name: "secret_access_key",
type: "password",
label: "AWS Secret Access Key",
placeholder: "Enter the AWS Secret Access Key",
required: true,
requiresConnectionTest: true,
},
{
name: "region",
type: "text",
label: "AWS Region",
placeholder: "Enter the AWS Region",
required: true,
requiresConnectionTest: true,
},
],
},
openai_compatible: {
id: "openai_compatible",
name: "OpenAI Compatible",
description: "Connect to custom OpenAI-compatible endpoints",
icon: OpenAIIcon,
fields: [
{
name: "api_key",
type: "password",
label: "API Key",
placeholder: "Enter your API key",
required: true,
requiresConnectionTest: true,
},
{
name: "base_url",
type: "text",
label: "Base URL",
placeholder: "https://openrouter.ai/api/v1",
required: true,
requiresConnectionTest: false,
},
],
},
};
export const getProviderConfig = (
providerType: LighthouseProvider,
): LLMProviderConfig | undefined => {
return LLM_PROVIDER_REGISTRY[providerType];
};
export const getAllProviders = (): LLMProviderConfig[] => {
return Object.values(LLM_PROVIDER_REGISTRY);
};
export const getMainFields = (
providerType: LighthouseProvider,
): LLMProviderField[] => {
const config = getProviderConfig(providerType);
return config?.fields ?? [];
};