247 lines
7.3 KiB
TypeScript
247 lines
7.3 KiB
TypeScript
import { Input } from "@/components/ui/input"
|
|
import { Label } from "@/components/ui/label"
|
|
import { FC } from "react"
|
|
import { Button } from "../ui/button"
|
|
import { useTranslation } from 'react-i18next'
|
|
|
|
interface APIStepProps {
|
|
openaiAPIKey: string
|
|
openaiOrgID: string
|
|
azureOpenaiAPIKey: string
|
|
azureOpenaiEndpoint: string
|
|
azureOpenai35TurboID: string
|
|
azureOpenai45TurboID: string
|
|
azureOpenai45VisionID: string
|
|
azureOpenaiEmbeddingsID: string
|
|
anthropicAPIKey: string
|
|
googleGeminiAPIKey: string
|
|
mistralAPIKey: string
|
|
groqAPIKey: string
|
|
perplexityAPIKey: string
|
|
useAzureOpenai: boolean
|
|
openrouterAPIKey: string
|
|
onOpenrouterAPIKeyChange: (value: string) => void
|
|
onOpenaiAPIKeyChange: (value: string) => void
|
|
onOpenaiOrgIDChange: (value: string) => void
|
|
onAzureOpenaiAPIKeyChange: (value: string) => void
|
|
onAzureOpenaiEndpointChange: (value: string) => void
|
|
onAzureOpenai35TurboIDChange: (value: string) => void
|
|
onAzureOpenai45TurboIDChange: (value: string) => void
|
|
onAzureOpenai45VisionIDChange: (value: string) => void
|
|
onAzureOpenaiEmbeddingsIDChange: (value: string) => void
|
|
onAnthropicAPIKeyChange: (value: string) => void
|
|
onGoogleGeminiAPIKeyChange: (value: string) => void
|
|
onMistralAPIKeyChange: (value: string) => void
|
|
onGroqAPIKeyChange: (value: string) => void
|
|
onPerplexityAPIKeyChange: (value: string) => void
|
|
onUseAzureOpenaiChange: (value: boolean) => void
|
|
}
|
|
|
|
export const APIStep: FC<APIStepProps> = ({
|
|
openaiAPIKey,
|
|
openaiOrgID,
|
|
azureOpenaiAPIKey,
|
|
azureOpenaiEndpoint,
|
|
azureOpenai35TurboID,
|
|
azureOpenai45TurboID,
|
|
azureOpenai45VisionID,
|
|
azureOpenaiEmbeddingsID,
|
|
anthropicAPIKey,
|
|
googleGeminiAPIKey,
|
|
mistralAPIKey,
|
|
groqAPIKey,
|
|
perplexityAPIKey,
|
|
openrouterAPIKey,
|
|
useAzureOpenai,
|
|
onOpenaiAPIKeyChange,
|
|
onOpenaiOrgIDChange,
|
|
onAzureOpenaiAPIKeyChange,
|
|
onAzureOpenaiEndpointChange,
|
|
onAzureOpenai35TurboIDChange,
|
|
onAzureOpenai45TurboIDChange,
|
|
onAzureOpenai45VisionIDChange,
|
|
onAzureOpenaiEmbeddingsIDChange,
|
|
onAnthropicAPIKeyChange,
|
|
onGoogleGeminiAPIKeyChange,
|
|
onMistralAPIKeyChange,
|
|
onGroqAPIKeyChange,
|
|
onPerplexityAPIKeyChange,
|
|
onUseAzureOpenaiChange,
|
|
onOpenrouterAPIKeyChange
|
|
}) => {
|
|
const { t } = useTranslation()
|
|
|
|
return (
|
|
<>
|
|
<div className="mt-5 space-y-2">
|
|
<Label className="flex items-center">
|
|
<div>
|
|
{useAzureOpenai ? t("setup.azureOpenaiApiKey") : t("setup.openaiApiKey")}
|
|
</div>
|
|
|
|
<Button
|
|
className="ml-3 h-[18px] w-[150px] text-[11px]"
|
|
onClick={() => onUseAzureOpenaiChange(!useAzureOpenai)}
|
|
>
|
|
{useAzureOpenai
|
|
? t("setup.switchToOpenAI")
|
|
: t("setup.switchToAzureOpenAI")}
|
|
</Button>
|
|
</Label>
|
|
|
|
<Input
|
|
placeholder={
|
|
useAzureOpenai ? t("setup.azureOpenaiApiKey") : t("setup.openaiApiKey")
|
|
}
|
|
type="password"
|
|
value={useAzureOpenai ? azureOpenaiAPIKey : openaiAPIKey}
|
|
onChange={e =>
|
|
useAzureOpenai
|
|
? onAzureOpenaiAPIKeyChange(e.target.value)
|
|
: onOpenaiAPIKeyChange(e.target.value)
|
|
}
|
|
/>
|
|
</div>
|
|
|
|
<div className="ml-8 space-y-3">
|
|
{useAzureOpenai ? (
|
|
<>
|
|
<div className="space-y-1">
|
|
<Label>{t("setup.azureOpenaiEndpoint")}</Label>
|
|
|
|
<Input
|
|
placeholder="https://your-endpoint.openai.azure.com"
|
|
type="password"
|
|
value={azureOpenaiEndpoint}
|
|
onChange={e => onAzureOpenaiEndpointChange(e.target.value)}
|
|
/>
|
|
</div>
|
|
|
|
<div className="space-y-1">
|
|
<Label>{t("setup.azureOpenai35TurboId")}</Label>
|
|
|
|
<Input
|
|
placeholder={t("setup.azureOpenai35TurboId")}
|
|
type="password"
|
|
value={azureOpenai35TurboID}
|
|
onChange={e => onAzureOpenai35TurboIDChange(e.target.value)}
|
|
/>
|
|
</div>
|
|
|
|
<div className="space-y-1">
|
|
<Label>{t("setup.azureOpenai45TurboId")}</Label>
|
|
|
|
<Input
|
|
placeholder={t("setup.azureOpenai45TurboId")}
|
|
type="password"
|
|
value={azureOpenai45TurboID}
|
|
onChange={e => onAzureOpenai45TurboIDChange(e.target.value)}
|
|
/>
|
|
</div>
|
|
|
|
<div className="space-y-1">
|
|
<Label>{t("setup.azureOpenai45VisionId")}</Label>
|
|
|
|
<Input
|
|
placeholder={t("setup.azureOpenai45VisionId")}
|
|
type="password"
|
|
value={azureOpenai45VisionID}
|
|
onChange={e => onAzureOpenai45VisionIDChange(e.target.value)}
|
|
/>
|
|
</div>
|
|
|
|
<div className="space-y-1">
|
|
<Label>{t("setup.azureOpenaiEmbeddingsId")}</Label>
|
|
|
|
<Input
|
|
placeholder={t("setup.azureOpenaiEmbeddingsId")}
|
|
type="password"
|
|
value={azureOpenaiEmbeddingsID}
|
|
onChange={e => onAzureOpenaiEmbeddingsIDChange(e.target.value)}
|
|
/>
|
|
</div>
|
|
</>
|
|
) : (
|
|
<>
|
|
<div className="space-y-1">
|
|
<Label>{t("setup.openaiOrgId")}</Label>
|
|
|
|
<Input
|
|
placeholder={t("setup.openaiOrgIdOptional")}
|
|
type="password"
|
|
value={openaiOrgID}
|
|
onChange={e => onOpenaiOrgIDChange(e.target.value)}
|
|
/>
|
|
</div>
|
|
</>
|
|
)}
|
|
</div>
|
|
|
|
<div className="space-y-1">
|
|
<Label>{t("setup.anthropicApiKey")}</Label>
|
|
|
|
<Input
|
|
placeholder={t("setup.anthropicApiKey")}
|
|
type="password"
|
|
value={anthropicAPIKey}
|
|
onChange={e => onAnthropicAPIKeyChange(e.target.value)}
|
|
/>
|
|
</div>
|
|
|
|
<div className="space-y-1">
|
|
<Label>{t("setup.googleGeminiApiKey")}</Label>
|
|
|
|
<Input
|
|
placeholder={t("setup.googleGeminiApiKey")}
|
|
type="password"
|
|
value={googleGeminiAPIKey}
|
|
onChange={e => onGoogleGeminiAPIKeyChange(e.target.value)}
|
|
/>
|
|
</div>
|
|
|
|
<div className="space-y-1">
|
|
<Label>{t("setup.mistralApiKey")}</Label>
|
|
|
|
<Input
|
|
placeholder={t("setup.mistralApiKey")}
|
|
type="password"
|
|
value={mistralAPIKey}
|
|
onChange={e => onMistralAPIKeyChange(e.target.value)}
|
|
/>
|
|
</div>
|
|
|
|
<div className="space-y-1">
|
|
<Label>{t("setup.groqApiKey")}</Label>
|
|
|
|
<Input
|
|
placeholder={t("setup.groqApiKey")}
|
|
type="password"
|
|
value={groqAPIKey}
|
|
onChange={e => onGroqAPIKeyChange(e.target.value)}
|
|
/>
|
|
</div>
|
|
|
|
<div className="space-y-1">
|
|
<Label>{t("setup.perplexityApiKey")}</Label>
|
|
|
|
<Input
|
|
placeholder={t("setup.perplexityApiKey")}
|
|
type="password"
|
|
value={perplexityAPIKey}
|
|
onChange={e => onPerplexityAPIKeyChange(e.target.value)}
|
|
/>
|
|
</div>
|
|
<div className="space-y-1">
|
|
<Label>{t("setup.openrouterApiKey")}</Label>
|
|
|
|
<Input
|
|
placeholder={t("setup.openrouterApiKey")}
|
|
type="password"
|
|
value={openrouterAPIKey}
|
|
onChange={e => onOpenrouterAPIKeyChange(e.target.value)}
|
|
/>
|
|
</div>
|
|
</>
|
|
)
|
|
}
|