Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src-tauri/src/chat_manager/provider_adapter/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -372,6 +372,7 @@ pub fn adapter_for(credential: &ProviderCredential) -> Box<dyn ProviderAdapter +
"openrouter" => Box::new(openai::OpenRouterAdapter),
"literouter" => Box::new(literouter::LiteRouterAdapter),
"pollinations" => Box::new(pollinations::PollinationsAdapter),
"modelrunner" => Box::new(openai::OpenAIAdapter),
"lettuce-host" => Box::new(openai::OpenAIAdapter),
"lettuce-engine" => Box::new(lettuce_engine::LettuceEngineAdapter),
_ => Box::new(openai::OpenAIAdapter),
Expand Down
1 change: 1 addition & 0 deletions src-tauri/src/providers/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,7 @@ fn get_all_provider_configs_internal() -> Vec<ProviderConfig> {
"https://integrate.api.nvidia.com/v1",
),
("anannas", "Anannas AI", "https://api.anannas.ai/v1"),
("modelrunner", "ModelRunner", "https://queue.modelrunner.run/v1"),
("groq", "Groq", "https://api.groq.com"),
("stability", "Stability AI", "https://api.stability.ai"),
(
Expand Down
Binary file added src/assets/modelrunner.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
7 changes: 7 additions & 0 deletions src/core/i18n/locales/de.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7781,6 +7781,13 @@ export const deMessages: DeepPartialMessageTree<LocaleMessages> = {
s3: "Erstelle einen neuen Key, falls keiner vorhanden ist.",
s4: "Kopiere den Key und füge ihn in LettuceAI ein.",
},
modelrunner: {
title: "So findest du deinen ModelRunner-API-Key",
s1: "Besuche modelrunner.ai und melde dich an.",
s2: "Öffne Settings und dann API Keys.",
s3: "Erstelle einen neuen Key, falls keiner vorhanden ist.",
s4: "Kopiere den Key und füge ihn in LettuceAI ein.",
},
anannas: {
title: "So findest du deinen Anannas-API-Key",
s1: "Gehe zu dashboard.anannas.ai und melde dich an.",
Expand Down
7 changes: 7 additions & 0 deletions src/core/i18n/locales/el.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7781,6 +7781,13 @@ export const elMessages: DeepPartialMessageTree<LocaleMessages> = {
s3: "Δημιουργήστε νέο κλειδί αν δεν βλέπετε κανένα.",
s4: "Αντιγράψτε το κλειδί και επικολλήστε το στο LettuceAI.",
},
modelrunner: {
title: "Πώς να βρείτε το κλειδί API ModelRunner",
s1: "Επισκεφτείτε το modelrunner.ai και συνδεθείτε.",
s2: "Ανοίξτε το Settings και μετά το API Keys.",
s3: "Δημιουργήστε νέο κλειδί αν δεν βλέπετε κανένα.",
s4: "Αντιγράψτε το κλειδί και επικολλήστε το στο LettuceAI.",
},
anannas: {
title: "Πώς να βρείτε το κλειδί API Anannas",
s1: "Μεταβείτε στο dashboard.anannas.ai και συνδεθείτε.",
Expand Down
7 changes: 7 additions & 0 deletions src/core/i18n/locales/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8703,6 +8703,13 @@ export const enMessages = {
s3: "Create a new key if you do not see one.",
s4: "Copy the key and paste it into LettuceAI.",
},
modelrunner: {
title: "How to find your ModelRunner API key",
s1: "Visit modelrunner.ai and sign in.",
s2: "Open Settings, then API Keys.",
s3: "Create a new key if you do not see one.",
s4: "Copy the key and paste it into LettuceAI.",
},
anannas: {
title: "How to find your Anannas API key",
s1: "Go to dashboard.anannas.ai and log in.",
Expand Down
7 changes: 7 additions & 0 deletions src/core/i18n/locales/es.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7781,6 +7781,13 @@ export const esMessages: DeepPartialMessageTree<LocaleMessages> = {
s3: "Crea una nueva key si no ves ninguna.",
s4: "Copia la key y pégala en LettuceAI.",
},
modelrunner: {
title: "Cómo encontrar tu API key de ModelRunner",
s1: "Visita modelrunner.ai e inicia sesión.",
s2: "Abre Settings y luego API Keys.",
s3: "Crea una nueva key si no ves ninguna.",
s4: "Copia la key y pégala en LettuceAI.",
},
anannas: {
title: "Cómo encontrar tu API key de Anannas",
s1: "Ve a dashboard.anannas.ai e inicia sesión.",
Expand Down
7 changes: 7 additions & 0 deletions src/core/i18n/locales/fil.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7781,6 +7781,13 @@ export const filMessages: DeepPartialMessageTree<LocaleMessages> = {
s3: "Gumawa ng bagong key kung wala kang nakita.",
s4: "Kopyahin ang key at i-paste ito sa LettuceAI.",
},
modelrunner: {
title: "Paano mahanap ang iyong ModelRunner API key",
s1: "Bisitahin ang modelrunner.ai at mag-sign in.",
s2: "Buksan ang Settings, tapos ang API Keys.",
s3: "Gumawa ng bagong key kung wala kang nakita.",
s4: "Kopyahin ang key at i-paste ito sa LettuceAI.",
},
anannas: {
title: "Paano mahanap ang iyong Anannas API key",
s1: "Pumunta sa dashboard.anannas.ai at mag-log in.",
Expand Down
7 changes: 7 additions & 0 deletions src/core/i18n/locales/fr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7781,6 +7781,13 @@ export const frMessages: DeepPartialMessageTree<LocaleMessages> = {
s3: "Crée une nouvelle clé si tu n'en vois pas.",
s4: "Copie la clé et colle-la dans LettuceAI.",
},
modelrunner: {
title: "Comment trouver ta clé API ModelRunner",
s1: "Visite modelrunner.ai et connecte-toi.",
s2: "Ouvre Settings, puis API Keys.",
s3: "Crée une nouvelle clé si tu n'en vois pas.",
s4: "Copie la clé et colle-la dans LettuceAI.",
},
anannas: {
title: "Comment trouver ta clé API Anannas",
s1: "Va sur dashboard.anannas.ai et connecte-toi.",
Expand Down
7 changes: 7 additions & 0 deletions src/core/i18n/locales/hi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6965,6 +6965,13 @@ export const hiMessages: DeepPartialMessageTree<LocaleMessages> = {
s3: "यदि आपको कोई नहीं दिखे तो एक नई key बनाएँ।",
s4: "Key कॉपी करें और LettuceAI में पेस्ट करें।",
},
modelrunner: {
title: "अपनी ModelRunner API key कैसे खोजें",
s1: "modelrunner.ai पर जाएँ और साइन इन करें।",
s2: "Settings खोलें, फिर API Keys।",
s3: "यदि आपको कोई नहीं दिखे तो एक नई key बनाएँ।",
s4: "Key कॉपी करें और LettuceAI में पेस्ट करें।",
},
anannas: {
title: "अपनी Anannas API key कैसे खोजें",
s1: "dashboard.anannas.ai पर जाएँ और लॉग इन करें।",
Expand Down
7 changes: 7 additions & 0 deletions src/core/i18n/locales/id.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6965,6 +6965,13 @@ export const idMessages: DeepPartialMessageTree<LocaleMessages> = {
s3: "Buat kunci baru jika belum ada.",
s4: "Salin kunci dan tempelkan ke LettuceAI.",
},
modelrunner: {
title: "Cara menemukan kunci API ModelRunner Anda",
s1: "Kunjungi modelrunner.ai dan masuk.",
s2: "Buka Settings, lalu API Keys.",
s3: "Buat kunci baru jika belum ada.",
s4: "Salin kunci dan tempelkan ke LettuceAI.",
},
anannas: {
title: "Cara menemukan kunci API Anannas Anda",
s1: "Buka dashboard.anannas.ai dan masuk.",
Expand Down
7 changes: 7 additions & 0 deletions src/core/i18n/locales/it.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6965,6 +6965,13 @@ export const itMessages: DeepPartialMessageTree<LocaleMessages> = {
s3: "Crea una nuova chiave se non ne vedi una.",
s4: "Copia la chiave e incollala in LettuceAI.",
},
modelrunner: {
title: "Come trovare la tua chiave API ModelRunner",
s1: "Visita modelrunner.ai e accedi.",
s2: "Apri Settings e poi API Keys.",
s3: "Crea una nuova chiave se non ne vedi una.",
s4: "Copia la chiave e incollala in LettuceAI.",
},
anannas: {
title: "Come trovare la tua chiave API Anannas",
s1: "Vai su dashboard.anannas.ai e accedi.",
Expand Down
7 changes: 7 additions & 0 deletions src/core/i18n/locales/ja.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6965,6 +6965,13 @@ export const jaMessages: DeepPartialMessageTree<LocaleMessages> = {
s3: "見当たらない場合は新しいキーを作成します。",
s4: "キーをコピーしてLettuceAIに貼り付けます。",
},
modelrunner: {
title: "ModelRunner APIキーの見つけ方",
s1: "modelrunner.aiにアクセスしてサインインします。",
s2: "Settings を開き、API Keys に移動します。",
s3: "見当たらない場合は新しいキーを作成します。",
s4: "キーをコピーしてLettuceAIに貼り付けます。",
},
anannas: {
title: "Anannas APIキーの見つけ方",
s1: "dashboard.anannas.aiにアクセスしてログインします。",
Expand Down
7 changes: 7 additions & 0 deletions src/core/i18n/locales/ko.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7781,6 +7781,13 @@ export const koMessages: DeepPartialMessageTree<LocaleMessages> = {
s3: "없으면 새 키를 만드세요.",
s4: "키를 복사하여 LettuceAI에 붙여넣으세요.",
},
modelrunner: {
title: "ModelRunner API 키를 찾는 방법",
s1: "modelrunner.ai를 방문하여 로그인하세요.",
s2: "Settings를 연 다음 API Keys로 이동하세요.",
s3: "없으면 새 키를 만드세요.",
s4: "키를 복사하여 LettuceAI에 붙여넣으세요.",
},
anannas: {
title: "Anannas API 키를 찾는 방법",
s1: "dashboard.anannas.ai로 이동하여 로그인하세요.",
Expand Down
7 changes: 7 additions & 0 deletions src/core/i18n/locales/nl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7781,6 +7781,13 @@ export const nlMessages: DeepPartialMessageTree<LocaleMessages> = {
s3: "Maak een nieuwe sleutel aan als je er geen ziet.",
s4: "Kopieer de sleutel en plak hem in LettuceAI.",
},
modelrunner: {
title: "Hoe vind je je ModelRunner API-sleutel",
s1: "Bezoek modelrunner.ai en meld je aan.",
s2: "Open Settings en daarna API Keys.",
s3: "Maak een nieuwe sleutel aan als je er geen ziet.",
s4: "Kopieer de sleutel en plak hem in LettuceAI.",
},
anannas: {
title: "Hoe vind je je Anannas API-sleutel",
s1: "Ga naar dashboard.anannas.ai en log in.",
Expand Down
7 changes: 7 additions & 0 deletions src/core/i18n/locales/no.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7781,6 +7781,13 @@ export const noMessages: DeepPartialMessageTree<LocaleMessages> = {
s3: "Opprett en ny nøkkel hvis du ikke ser en.",
s4: "Kopier nøkkelen og lim den inn i LettuceAI.",
},
modelrunner: {
title: "Slik finner du ModelRunner API-nøkkelen",
s1: "Besøk modelrunner.ai og logg inn.",
s2: "Åpne Settings og deretter API Keys.",
s3: "Opprett en ny nøkkel hvis du ikke ser en.",
s4: "Kopier nøkkelen og lim den inn i LettuceAI.",
},
anannas: {
title: "Slik finner du Anannas API-nøkkelen",
s1: "Gå til dashboard.anannas.ai og logg inn.",
Expand Down
7 changes: 7 additions & 0 deletions src/core/i18n/locales/pl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7054,6 +7054,13 @@ export const plMessages: DeepPartialMessageTree<LocaleMessages> = {
s3: "Utwórz nowy klucz jeśli go nie widzisz.",
s4: "Skopiuj klucz i wklej go do LettuceAI.",
},
modelrunner: {
title: "Jak znaleźć klucz API ModelRunner",
s1: "Odwiedź modelrunner.ai i zaloguj się.",
s2: "Otwórz Settings, a następnie API Keys.",
s3: "Utwórz nowy klucz jeśli go nie widzisz.",
s4: "Skopiuj klucz i wklej go do LettuceAI.",
},
anannas: {
title: "Jak znaleźć klucz API Anannas",
s1: "Przejdź na dashboard.anannas.ai i zaloguj się.",
Expand Down
7 changes: 7 additions & 0 deletions src/core/i18n/locales/pt.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6965,6 +6965,13 @@ export const ptMessages: DeepPartialMessageTree<LocaleMessages> = {
s3: "Create a new key if you do not see one.",
s4: "Copy the key and paste it into LettuceAI.",
},
modelrunner: {
title: "Como encontrar a sua chave de API do ModelRunner",
s1: "Acesse modelrunner.ai e faça login.",
s2: "Abra Settings e depois API Keys.",
s3: "Crie uma nova chave se não vir nenhuma.",
s4: "Copie a chave e cole-a no LettuceAI.",
},
anannas: {
title: "How to find your Anannas API key",
s1: "Go to dashboard.anannas.ai and log in.",
Expand Down
7 changes: 7 additions & 0 deletions src/core/i18n/locales/ru.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7781,6 +7781,13 @@ export const ruMessages: DeepPartialMessageTree<LocaleMessages> = {
s3: "Создайте новый ключ, если вы его не видите.",
s4: "Скопируйте ключ и вставьте его в LettuceAI.",
},
modelrunner: {
title: "Как найти ключ API ModelRunner",
s1: "Посетите сайт modelrunner.ai и войдите в систему.",
s2: "Откройте Settings, затем API Keys.",
s3: "Создайте новый ключ, если вы его не видите.",
s4: "Скопируйте ключ и вставьте его в LettuceAI.",
},
anannas: {
title: "Как найти ключ API Anannas",
s1: "Перейдите на Dashboard.anannas.ai и войдите в систему.",
Expand Down
7 changes: 7 additions & 0 deletions src/core/i18n/locales/tr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7781,6 +7781,13 @@ export const trMessages: DeepPartialMessageTree<LocaleMessages> = {
s3: "Görmüyorsanız yeni bir anahtar oluşturun.",
s4: "Anahtarı kopyalayıp LettuceAI'ye yapıştırın.",
},
modelrunner: {
title: "ModelRunner API anahtarınızı nasıl bulursunuz",
s1: "modelrunner.ai adresini ziyaret edin ve oturum açın.",
s2: "Settings ve ardından API Keys bölümünü açın.",
s3: "Görmüyorsanız yeni bir anahtar oluşturun.",
s4: "Anahtarı kopyalayıp LettuceAI'ye yapıştırın.",
},
anannas: {
title: "_Nasıl yapılır? ",
s1: "Dashboard.anannas.ai adresine gidin ve giriş yapın.",
Expand Down
7 changes: 7 additions & 0 deletions src/core/i18n/locales/vi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6965,6 +6965,13 @@ export const viMessages: DeepPartialMessageTree<LocaleMessages> = {
s3: "Create a new key if you do not see one.",
s4: "Copy the key and paste it into LettuceAI.",
},
modelrunner: {
title: "Cách tìm khóa API ModelRunner của bạn",
s1: "Truy cập modelrunner.ai và đăng nhập.",
s2: "Mở Settings, rồi API Keys.",
s3: "Tạo khóa mới nếu bạn không thấy khóa nào.",
s4: "Sao chép khóa và dán vào LettuceAI.",
},
anannas: {
title: "How to find your Anannas API key",
s1: "Go to dashboard.anannas.ai and log in.",
Expand Down
7 changes: 7 additions & 0 deletions src/core/i18n/locales/zh-Hans.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7781,6 +7781,13 @@ export const zhHansMessages: DeepPartialMessageTree<LocaleMessages> = {
s3: "如未看到密钥请创建新密钥。",
s4: "复制密钥并粘贴到 LettuceAI 中。",
},
modelrunner: {
title: "如何找到你的 ModelRunner API 密钥",
s1: "访问 modelrunner.ai 并登录。",
s2: "打开 Settings,然后进入 API Keys。",
s3: "如未看到密钥请创建新密钥。",
s4: "复制密钥并粘贴到 LettuceAI 中。",
},
anannas: {
title: "如何找到你的 Anannas API 密钥",
s1: "前往 dashboard.anannas.ai 并登录。",
Expand Down
7 changes: 7 additions & 0 deletions src/core/i18n/locales/zh-Hant.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7781,6 +7781,13 @@ export const zhHantMessages: DeepPartialMessageTree<LocaleMessages> = {
s3: "如果看不到金鑰,請建立新金鑰。",
s4: "複製金鑰並貼入 LettuceAI。",
},
modelrunner: {
title: "如何找到您的 ModelRunner API 金鑰",
s1: "前往 modelrunner.ai 並登入。",
s2: "開啟 Settings,然後前往 API Keys。",
s3: "如果看不到金鑰,請建立新金鑰。",
s4: "複製金鑰並貼入 LettuceAI。",
},
anannas: {
title: "如何找到您的 Anannas API 金鑰",
s1: "前往 dashboard.anannas.ai 並登入。",
Expand Down
51 changes: 51 additions & 0 deletions src/core/storage/schemas.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2037,6 +2037,57 @@ export const PROVIDER_PARAMETER_SUPPORT = {
ollamaStop: false,
},
},

modelrunner: {
providerId: "modelrunner",
displayName: "ModelRunner",
reasoningSupport: "none" as ReasoningSupport,
supportedParameters: {
temperature: true,
topP: true,
maxOutputTokens: true,
contextLength: false,
frequencyPenalty: true,
presencePenalty: true,
topK: false,
reasoningEnabled: false,
reasoningEffort: false,
reasoningBudgetTokens: false,
llamaGpuLayers: false,
llamaThreads: false,
llamaThreadsBatch: false,
llamaSeed: false,
llamaRopeFreqBase: false,
llamaRopeFreqScale: false,
llamaOffloadKqv: false,
llamaBatchSize: false,
llamaKvType: false,
llamaFlashAttention: false,
llamaChatTemplateOverride: false,
llamaMmprojPath: false,
llamaChatTemplatePreset: false,
llamaRawCompletionFallback: false,
llamaSamplerProfile: false,
llamaSamplerOrder: false,
llamaMinP: false,
llamaTypicalP: false,
ollamaNumCtx: false,
ollamaNumPredict: false,
ollamaNumKeep: false,
ollamaNumBatch: false,
ollamaNumGpu: false,
ollamaNumThread: false,
ollamaTfsZ: false,
ollamaTypicalP: false,
ollamaMinP: false,
ollamaMirostat: false,
ollamaMirostatTau: false,
ollamaMirostatEta: false,
ollamaRepeatPenalty: false,
ollamaSeed: false,
ollamaStop: false,
},
},
ollama: {
providerId: "ollama",
displayName: "Ollama",
Expand Down
2 changes: 2 additions & 0 deletions src/core/utils/providerIcons.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import MoonShotAIIcon from "../../assets/moonshot_light.svg";
import GeminiIcon from "../../assets/gemini.svg";
import QwenIcon from "../../assets/qwen.svg";
import FeatherlessIcon from "../../assets/featherless.svg";
import ModelRunnerIcon from "../../assets/modelrunner.png";
import NvidiaIcon from "../../assets/nvidia.svg";
import ChutesAIIcon from "../../assets/chutes_ai.jpeg";
import OllamaIcon from "../../assets/ollama_light.png";
Expand Down Expand Up @@ -55,6 +56,7 @@ const ICON_MAP: Record<string, ReactElement> = {
qwen: <img src={QwenIcon} alt="Qwen" className="h-6 w-6" />,
groq: <img src={GroqIcon} alt="Groq" className="h-6 w-6" />,
featherless: <img src={FeatherlessIcon} alt="Featherless" className="h-6 w-6" />,
modelrunner: <img src={ModelRunnerIcon} alt="ModelRunner" className="h-6 w-6" />,
nvidia: <img src={NvidiaIcon} alt="NVIDIA" className="h-6 w-6" />,
chutes: <img src={ChutesAIIcon} alt="Chutes" className="h-6 w-6" />,
ollama: <img src={OllamaIcon} alt="Ollama" className="h-6 w-6" />,
Expand Down
2 changes: 2 additions & 0 deletions src/ui/pages/onboarding/ProviderSetup.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -452,6 +452,7 @@ function getProviderDescription(providerId: string, t: TFunction): string {
return t("onboarding.provider.descriptions.anthropic");
case "nanogpt":
case "featherless":
case "modelrunner":
case "openrouter":
return t("onboarding.provider.descriptions.aggregator");
case "openai-compatible":
Expand Down Expand Up @@ -491,6 +492,7 @@ function getProviderDescriptionShort(providerId: string, t: TFunction): string {
return t("onboarding.provider.descriptionsShort.anthropic");
case "nanogpt":
case "featherless":
case "modelrunner":
case "openrouter":
return t("onboarding.provider.descriptionsShort.aggregator");
case "openai-compatible":
Expand Down
5 changes: 5 additions & 0 deletions src/ui/pages/onboarding/WhereToFind.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,11 @@ function buildGuides(t: TFunction): Record<string, Guide> {
steps: guideSteps("featherless"),
url: "https://featherless.ai/",
},
modelrunner: {
title: guideTitle("modelrunner"),
steps: guideSteps("modelrunner"),
url: "https://modelrunner.ai/settings/api-keys",
},
anannas: {
title: guideTitle("anannas"),
steps: guideSteps("anannas"),
Expand Down
Loading