feat: more llm provider options (google, mistral) (#28)

* feat: add google provider

* fix: default for google model

* feat: multiple providers

* fix: defaults from env for login form

* fix: add mistral to env files

* chore: delete unused code

* chore: revert database url to original

* fix: render default value for api key from env on server

* fix: type errors during compilation

---------

Co-authored-by: Vasily Zubarev <me@vas3k.ru>
This commit is contained in:
Dmitrii Anfimov
2025-07-22 21:49:54 +02:00
committed by GitHub
parent 9903325f17
commit dee915ffd6
21 changed files with 1185 additions and 150 deletions

View File

@@ -6,6 +6,10 @@ const envSchema = z.object({
SELF_HOSTED_MODE: z.enum(["true", "false"]).default("true"),
OPENAI_API_KEY: z.string().optional(),
OPENAI_MODEL_NAME: z.string().default("gpt-4o-mini"),
GOOGLE_API_KEY: z.string().optional(),
GOOGLE_MODEL_NAME: z.string().default("gemini-2.5-flash"),
MISTRAL_API_KEY: z.string().optional(),
MISTRAL_MODEL_NAME: z.string().default("mistral-medium-latest"),
BETTER_AUTH_SECRET: z
.string()
.min(16, "Auth secret must be at least 16 characters")
@@ -50,7 +54,11 @@ const config = {
},
ai: {
openaiApiKey: env.OPENAI_API_KEY,
modelName: env.OPENAI_MODEL_NAME,
openaiModelName: env.OPENAI_MODEL_NAME,
googleApiKey: env.GOOGLE_API_KEY,
googleModelName: env.GOOGLE_MODEL_NAME,
mistralApiKey: env.MISTRAL_API_KEY,
mistralModelName: env.MISTRAL_MODEL_NAME,
},
auth: {
secret: env.BETTER_AUTH_SECRET,

47
lib/llm-providers.ts Normal file
View File

@@ -0,0 +1,47 @@
export const PROVIDERS = [
{
key: "openai",
label: "OpenAI",
apiKeyName: "openai_api_key",
modelName: "openai_model_name",
defaultModelName: "gpt-4o-mini",
apiDoc: "https://platform.openai.com/settings/organization/api-keys",
apiDocLabel: "OpenAI Platform Console",
placeholder: "sk-...",
help: {
url: "https://platform.openai.com/settings/organization/api-keys",
label: "OpenAI Platform Console"
},
logo: "/logo/openai.svg"
},
{
key: "google",
label: "Google",
apiKeyName: "google_api_key",
modelName: "google_model_name",
defaultModelName: "gemini-2.5-flash",
apiDoc: "https://aistudio.google.com/apikey",
apiDocLabel: "Google AI Studio",
placeholder: "...",
help: {
url: "https://aistudio.google.com/apikey",
label: "Google AI Studio"
},
logo: "/logo/google.svg"
},
{
key: "mistral",
label: "Mistral",
apiKeyName: "mistral_api_key",
modelName: "mistral_model_name",
defaultModelName: "mistral-medium-latest",
apiDoc: "https://admin.mistral.ai/organization/api-keys",
apiDocLabel: "Mistral Admin Console",
placeholder: "...",
help: {
url: "https://admin.mistral.ai/organization/api-keys",
label: "Mistral Admin Console"
},
logo: "/logo/mistral.svg"
},
]