diff --git a/README.md b/README.md
index 6c00161c..48fd7181 100644
--- a/README.md
+++ b/README.md
@@ -118,6 +118,7 @@ MindWork AI Studio is a free desktop app for macOS, Windows, and Linux. It provi
- [Hetzner](https://experiments.hetzner.com) (experimental inference API running open-source models in the EU)
- [IONOS](https://cloud.ionos.com/managed/ai-model-hub) (AI Model Hub running open-source models in Germany)
- [LiteLLM](https://www.litellm.ai/) (an AI gateway you run yourself, in front of models from many providers)
+ - [Requesty](https://www.requesty.ai/) (an AI gateway with one API key for models from many providers)
- [Hugging Face](https://huggingface.co/) using their [inference providers](https://huggingface.co/docs/inference-providers/index) such as Cerebras, Nebius, Sambanova, Novita, Hyperbolic, Together AI, Fireworks, Hugging Face
- Self-hosted models using [llama.cpp](https://github.com/ggerganov/llama.cpp), [ollama](https://github.com/ollama/ollama), [LM Studio](https://lmstudio.ai/), and [vLLM](https://github.com/vllm-project/vllm)
- [Groq](https://groq.com/)
diff --git a/app/MindWork AI Studio/Assistants/I18N/allTexts.lua b/app/MindWork AI Studio/Assistants/I18N/allTexts.lua
index f0d2efe5..94166452 100644
--- a/app/MindWork AI Studio/Assistants/I18N/allTexts.lua
+++ b/app/MindWork AI Studio/Assistants/I18N/allTexts.lua
@@ -9301,9 +9301,6 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T1024253064"] = "Welcome to MindWork AI
-- Thank you for considering MindWork AI Studio for your AI needs. This app is designed to help you harness the power of Large Language Models (LLMs). Please note that this app doesn't come with an integrated LLM. Instead, you will need to bring an API key from a suitable provider.
UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T1146553980"] = "Thank you for considering MindWork AI Studio for your AI needs. This app is designed to help you harness the power of Large Language Models (LLMs). Please note that this app doesn't come with an integrated LLM. Instead, you will need to bring an API key from a suitable provider."
--- You are not tied to any single provider. Instead, you might choose the provider that best suits your needs. Right now, we support OpenAI (GPT5, o1, etc.), Perplexity, Mistral, Anthropic (Claude), Google Gemini, xAI (Grok), DeepSeek, Alibaba Cloud (Qwen), OpenRouter, Hetzner (experimental), IONOS, LiteLLM, Hugging Face, Groq, Fireworks, and self-hosted models using vLLM, llama.cpp, ollama, or LM Studio. For scientists and employees of research institutions, we also support Helmholtz and GWDG AI services. These are available through federated logins like eduGAIN to all 18 Helmholtz Centers, the Max Planck Society, most German, and many international universities.
-UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T1301599515"] = "You are not tied to any single provider. Instead, you might choose the provider that best suits your needs. Right now, we support OpenAI (GPT5, o1, etc.), Perplexity, Mistral, Anthropic (Claude), Google Gemini, xAI (Grok), DeepSeek, Alibaba Cloud (Qwen), OpenRouter, Hetzner (experimental), IONOS, LiteLLM, Hugging Face, Groq, Fireworks, and self-hosted models using vLLM, llama.cpp, ollama, or LM Studio. For scientists and employees of research institutions, we also support Helmholtz and GWDG AI services. These are available through federated logins like eduGAIN to all 18 Helmholtz Centers, the Max Planck Society, most German, and many international universities."
-
-- The app requires minimal storage for installation and operates with low memory usage. Additionally, it has a minimal impact on system resources, which is beneficial for battery life.
UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T144565305"] = "The app requires minimal storage for installation and operates with low memory usage. Additionally, it has a minimal impact on system resources, which is beneficial for battery life."
@@ -9355,6 +9352,9 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T3341379752"] = "Cost-effective"
-- Flexibility
UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T3723223888"] = "Flexibility"
+-- You are not tied to any single provider. Instead, you might choose the provider that best suits your needs. Right now, we support OpenAI (GPT5, o1, etc.), Perplexity, Mistral, Anthropic (Claude), Google Gemini, xAI (Grok), DeepSeek, Alibaba Cloud (Qwen), OpenRouter, Hetzner (experimental), IONOS, LiteLLM, Requesty, Hugging Face, Groq, Fireworks, and self-hosted models using vLLM, llama.cpp, ollama, or LM Studio. For scientists and employees of research institutions, we also support Helmholtz and GWDG AI services. These are available through federated logins like eduGAIN to all 18 Helmholtz Centers, the Max Planck Society, most German, and many international universities.
+UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T3834261447"] = "You are not tied to any single provider. Instead, you might choose the provider that best suits your needs. Right now, we support OpenAI (GPT5, o1, etc.), Perplexity, Mistral, Anthropic (Claude), Google Gemini, xAI (Grok), DeepSeek, Alibaba Cloud (Qwen), OpenRouter, Hetzner (experimental), IONOS, LiteLLM, Requesty, Hugging Face, Groq, Fireworks, and self-hosted models using vLLM, llama.cpp, ollama, or LM Studio. For scientists and employees of research institutions, we also support Helmholtz and GWDG AI services. These are available through federated logins like eduGAIN to all 18 Helmholtz Centers, the Max Planck Society, most German, and many international universities."
+
-- Privacy
UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T3959064551"] = "Privacy"
diff --git a/app/MindWork AI Studio/Models/Hosting/Hosts/HostRequesty.cs b/app/MindWork AI Studio/Models/Hosting/Hosts/HostRequesty.cs
new file mode 100644
index 00000000..bf54dbdf
--- /dev/null
+++ b/app/MindWork AI Studio/Models/Hosting/Hosts/HostRequesty.cs
@@ -0,0 +1,24 @@
+using AIStudio.Models.Matching;
+using AIStudio.Provider;
+
+namespace AIStudio.Models.Hosting.Hosts;
+
+///
+/// Requesty, a gateway which serves other people's models and says whose they are.
+///
+///
+/// Most names come as "vendor/model", the same shape OpenRouter uses, so the prefix is taken off
+/// and the vendor stated. Requesty also lists managed routing policies such as "gpt-5-mini@eu",
+/// which carry no prefix at all. Those have nothing to take off and go to the rules as they are.
+///
+public sealed class HostRequesty : ModelHost
+{
+ ///
+ public override LLMProviders Provider => LLMProviders.REQUESTY;
+
+ ///
+ public override ModelSource Source => new("https://docs.requesty.ai/features/managed-policies", new DateOnly(2026, 9, 25), "Models are named \"vendor/model\", apart from managed policies such as \"gpt-5-mini@eu\", and all of them are served through the OpenAI-compatible chat completion API.");
+
+ ///
+ public override bool TryUnwrap(in ModelId id, out ModelId inner, out ModelVendor? declaredVendor) => HostNaming.TrySplitOrganization(id, out inner, out declaredVendor);
+}
\ No newline at end of file
diff --git a/app/MindWork AI Studio/Pages/Home.razor.cs b/app/MindWork AI Studio/Pages/Home.razor.cs
index c140d900..5ee0b0a9 100644
--- a/app/MindWork AI Studio/Pages/Home.razor.cs
+++ b/app/MindWork AI Studio/Pages/Home.razor.cs
@@ -63,7 +63,7 @@ public partial class Home : MSGComponentBase
this.itemsAdvantages = [
new(this.T("Free of charge"), this.T("The app is free to use, both for personal and commercial purposes.")),
new(this.T("Democratization of AI"), this.T("We want to contribute to the democratization of AI. MindWork AI Studio runs even on low-cost hardware, including computers around 100 EUR such as Raspberry Pi. This makes the app and its full feature set accessible to people and families with limited budgets. You can start with local LLMs or use affordable cloud models.")),
- new(this.T("Independence"), this.T("You are not tied to any single provider. Instead, you might choose the provider that best suits your needs. Right now, we support OpenAI (GPT5, o1, etc.), Perplexity, Mistral, Anthropic (Claude), Google Gemini, xAI (Grok), DeepSeek, Alibaba Cloud (Qwen), OpenRouter, Hetzner (experimental), IONOS, LiteLLM, Hugging Face, Groq, Fireworks, and self-hosted models using vLLM, llama.cpp, ollama, or LM Studio. For scientists and employees of research institutions, we also support Helmholtz and GWDG AI services. These are available through federated logins like eduGAIN to all 18 Helmholtz Centers, the Max Planck Society, most German, and many international universities.")),
+ new(this.T("Independence"), this.T("You are not tied to any single provider. Instead, you might choose the provider that best suits your needs. Right now, we support OpenAI (GPT5, o1, etc.), Perplexity, Mistral, Anthropic (Claude), Google Gemini, xAI (Grok), DeepSeek, Alibaba Cloud (Qwen), OpenRouter, Hetzner (experimental), IONOS, LiteLLM, Requesty, Hugging Face, Groq, Fireworks, and self-hosted models using vLLM, llama.cpp, ollama, or LM Studio. For scientists and employees of research institutions, we also support Helmholtz and GWDG AI services. These are available through federated logins like eduGAIN to all 18 Helmholtz Centers, the Max Planck Society, most German, and many international universities.")),
new(this.T("Assistants"), this.T("You just want to quickly translate a text? AI Studio has so-called assistants for such and other tasks. No prompting is necessary when working with these assistants.")),
new(this.T("Unrestricted usage"), this.T("Unlike services like ChatGPT, which impose limits after intensive use, MindWork AI Studio offers unlimited usage through the providers API.")),
new(this.T("Cost-effective"), this.T("You only pay for what you use, which can be cheaper than monthly subscription services like ChatGPT Plus, especially if used infrequently. But beware, here be dragons: For extremely intensive usage, the API costs can be significantly higher. Unfortunately, providers currently do not offer a way to display current costs in the app. Therefore, check your account with the respective provider to see how your costs are developing. When available, use prepaid and set a cost limit.")),
diff --git a/app/MindWork AI Studio/Plugins/configuration/plugin.lua b/app/MindWork AI Studio/Plugins/configuration/plugin.lua
index c7f3d6a0..98633aca 100644
--- a/app/MindWork AI Studio/Plugins/configuration/plugin.lua
+++ b/app/MindWork AI Studio/Plugins/configuration/plugin.lua
@@ -906,8 +906,8 @@ CONFIG["SETTINGS"] = {}
-- Configure a custom confidence scheme.
-- This is used when DataConfidence.ConfidenceScheme is set to CUSTOM.
-- Allowed provider keys are: OPEN_AI, ANTHROPIC, MISTRAL, GOOGLE, X, DEEP_SEEK, ALIBABA_CLOUD,
--- PERPLEXITY, OPEN_ROUTER, HETZNER, IONOS, LITE_LLM, FIREWORKS, GROQ, HUGGINGFACE, SELF_HOSTED,
--- HELMHOLTZ, GWDG
+-- PERPLEXITY, OPEN_ROUTER, HETZNER, IONOS, LITE_LLM, REQUESTY, FIREWORKS, GROQ, HUGGINGFACE,
+-- SELF_HOSTED, HELMHOLTZ, GWDG
-- Allowed confidence values are: UNTRUSTED, VERY_LOW, LOW, MODERATE, MEDIUM, HIGH
--
-- Replaces, does not merge: a configuration with a higher priority replaces the whole
@@ -927,6 +927,7 @@ CONFIG["SETTINGS"] = {}
-- ["HETZNER"] = "HIGH",
-- ["IONOS"] = "HIGH",
-- ["LITE_LLM"] = "MODERATE",
+-- ["REQUESTY"] = "MODERATE",
-- ["FIREWORKS"] = "MODERATE",
-- ["GROQ"] = "MODERATE",
-- ["HUGGINGFACE"] = "MODERATE",
diff --git a/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua b/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua
index e555badf..d788c1ea 100644
--- a/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua
+++ b/app/MindWork AI Studio/Plugins/languages/de-de-43065dbc-78d0-45b7-92be-f14c2926e2dc/plugin.lua
@@ -9303,9 +9303,6 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T1024253064"] = "Willkommen bei MindWork
-- Thank you for considering MindWork AI Studio for your AI needs. This app is designed to help you harness the power of Large Language Models (LLMs). Please note that this app doesn't come with an integrated LLM. Instead, you will need to bring an API key from a suitable provider.
UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T1146553980"] = "Vielen Dank, dass Sie MindWork AI Studio für Ihre KI-Anwendungen in Betracht ziehen. Diese App wurde entwickelt, um Ihnen die Nutzung von leistungsstarken Sprachmodellen (LLMs) zu ermöglichen. Bitte beachten Sie, dass die App kein integriertes LLM enthält. Stattdessen benötigen Sie einen API-Schlüssel von einem passenden Anbieter."
--- You are not tied to any single provider. Instead, you might choose the provider that best suits your needs. Right now, we support OpenAI (GPT5, o1, etc.), Perplexity, Mistral, Anthropic (Claude), Google Gemini, xAI (Grok), DeepSeek, Alibaba Cloud (Qwen), OpenRouter, Hetzner (experimental), IONOS, LiteLLM, Hugging Face, Groq, Fireworks, and self-hosted models using vLLM, llama.cpp, ollama, or LM Studio. For scientists and employees of research institutions, we also support Helmholtz and GWDG AI services. These are available through federated logins like eduGAIN to all 18 Helmholtz Centers, the Max Planck Society, most German, and many international universities.
-UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T1301599515"] = "Sie sind nicht an einen einzigen Anbieter gebunden. Stattdessen können Sie den Anbieter wählen, der am besten zu Ihren Anforderungen passt. Derzeit unterstützen wir OpenAI (GPT5, o1 usw.), Perplexity, Mistral, Anthropic (Claude), Google Gemini, xAI (Grok), DeepSeek, Alibaba Cloud (Qwen), OpenRouter, Hetzner (experimentell), IONOS, LiteLLM, Hugging Face, Groq, Fireworks sowie selbst gehostete Modelle mit vLLM, llama.cpp, ollama oder LM Studio. Für Wissenschaftlerinnen und Wissenschaftler sowie Mitarbeitende von Forschungseinrichtungen unterstützen wir außerdem die KI-Dienste von Helmholtz und GWDG. Diese sind über föderierte Logins wie eduGAIN für alle 18 Helmholtz-Zentren, die Max-Planck-Gesellschaft, die meisten deutschen sowie viele internationale Universitäten verfügbar."
-
-- The app requires minimal storage for installation and operates with low memory usage. Additionally, it has a minimal impact on system resources, which is beneficial for battery life.
UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T144565305"] = "Die App benötigt nur wenig Speicherplatz für die Installation und verwendet wenig Arbeitsspeicher. Außerdem hat sie einen minimalen Einfluss auf die Systemressourcen, was sich positiv auf die Akkulaufzeit auswirkt."
@@ -9357,6 +9354,9 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T3341379752"] = "Kosteneffizient"
-- Flexibility
UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T3723223888"] = "Flexibilität"
+-- You are not tied to any single provider. Instead, you might choose the provider that best suits your needs. Right now, we support OpenAI (GPT5, o1, etc.), Perplexity, Mistral, Anthropic (Claude), Google Gemini, xAI (Grok), DeepSeek, Alibaba Cloud (Qwen), OpenRouter, Hetzner (experimental), IONOS, LiteLLM, Requesty, Hugging Face, Groq, Fireworks, and self-hosted models using vLLM, llama.cpp, ollama, or LM Studio. For scientists and employees of research institutions, we also support Helmholtz and GWDG AI services. These are available through federated logins like eduGAIN to all 18 Helmholtz Centers, the Max Planck Society, most German, and many international universities.
+UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T3834261447"] = "Sie sind nicht an einen einzigen Anbieter gebunden. Stattdessen können Sie den Anbieter wählen, der am besten zu Ihren Anforderungen passt. Derzeit unterstützen wir OpenAI (GPT5, o1 usw.), Perplexity, Mistral, Anthropic (Claude), Google Gemini, xAI (Grok), DeepSeek, Alibaba Cloud (Qwen), OpenRouter, Hetzner (experimentell), IONOS, LiteLLM, Requesty, Hugging Face, Groq, Fireworks sowie selbst gehostete Modelle mit vLLM, llama.cpp, ollama oder LM Studio. Für Wissenschaftlerinnen und Wissenschaftler sowie Mitarbeitende von Forschungseinrichtungen unterstützen wir außerdem die KI-Dienste von Helmholtz und GWDG. Diese sind über föderierte Logins wie eduGAIN für alle 18 Helmholtz-Zentren, die Max-Planck-Gesellschaft, die meisten deutschen sowie viele internationale Universitäten verfügbar."
+
-- Privacy
UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T3959064551"] = "Datenschutz"
diff --git a/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua b/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua
index df9b2a7c..dde8422a 100644
--- a/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua
+++ b/app/MindWork AI Studio/Plugins/languages/en-us-97dfb1ba-50c4-4440-8dfa-6575daf543c8/plugin.lua
@@ -9303,9 +9303,6 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T1024253064"] = "Welcome to MindWork AI
-- Thank you for considering MindWork AI Studio for your AI needs. This app is designed to help you harness the power of Large Language Models (LLMs). Please note that this app doesn't come with an integrated LLM. Instead, you will need to bring an API key from a suitable provider.
UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T1146553980"] = "Thank you for considering MindWork AI Studio for your AI needs. This app is designed to help you harness the power of Large Language Models (LLMs). Please note that this app doesn't come with an integrated LLM. Instead, you will need to bring an API key from a suitable provider."
--- You are not tied to any single provider. Instead, you might choose the provider that best suits your needs. Right now, we support OpenAI (GPT5, o1, etc.), Perplexity, Mistral, Anthropic (Claude), Google Gemini, xAI (Grok), DeepSeek, Alibaba Cloud (Qwen), OpenRouter, Hetzner (experimental), IONOS, LiteLLM, Hugging Face, Groq, Fireworks, and self-hosted models using vLLM, llama.cpp, ollama, or LM Studio. For scientists and employees of research institutions, we also support Helmholtz and GWDG AI services. These are available through federated logins like eduGAIN to all 18 Helmholtz Centers, the Max Planck Society, most German, and many international universities.
-UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T1301599515"] = "You are not tied to any single provider. Instead, you might choose the provider that best suits your needs. Right now, we support OpenAI (GPT5, o1, etc.), Perplexity, Mistral, Anthropic (Claude), Google Gemini, xAI (Grok), DeepSeek, Alibaba Cloud (Qwen), OpenRouter, Hetzner (experimental), IONOS, LiteLLM, Hugging Face, Groq, Fireworks, and self-hosted models using vLLM, llama.cpp, ollama, or LM Studio. For scientists and employees of research institutions, we also support Helmholtz and GWDG AI services. These are available through federated logins like eduGAIN to all 18 Helmholtz Centers, the Max Planck Society, most German, and many international universities."
-
-- The app requires minimal storage for installation and operates with low memory usage. Additionally, it has a minimal impact on system resources, which is beneficial for battery life.
UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T144565305"] = "The app requires minimal storage for installation and operates with low memory usage. Additionally, it has a minimal impact on system resources, which is beneficial for battery life."
@@ -9357,6 +9354,9 @@ UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T3341379752"] = "Cost-effective"
-- Flexibility
UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T3723223888"] = "Flexibility"
+-- You are not tied to any single provider. Instead, you might choose the provider that best suits your needs. Right now, we support OpenAI (GPT5, o1, etc.), Perplexity, Mistral, Anthropic (Claude), Google Gemini, xAI (Grok), DeepSeek, Alibaba Cloud (Qwen), OpenRouter, Hetzner (experimental), IONOS, LiteLLM, Requesty, Hugging Face, Groq, Fireworks, and self-hosted models using vLLM, llama.cpp, ollama, or LM Studio. For scientists and employees of research institutions, we also support Helmholtz and GWDG AI services. These are available through federated logins like eduGAIN to all 18 Helmholtz Centers, the Max Planck Society, most German, and many international universities.
+UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T3834261447"] = "You are not tied to any single provider. Instead, you might choose the provider that best suits your needs. Right now, we support OpenAI (GPT5, o1, etc.), Perplexity, Mistral, Anthropic (Claude), Google Gemini, xAI (Grok), DeepSeek, Alibaba Cloud (Qwen), OpenRouter, Hetzner (experimental), IONOS, LiteLLM, Requesty, Hugging Face, Groq, Fireworks, and self-hosted models using vLLM, llama.cpp, ollama, or LM Studio. For scientists and employees of research institutions, we also support Helmholtz and GWDG AI services. These are available through federated logins like eduGAIN to all 18 Helmholtz Centers, the Max Planck Society, most German, and many international universities."
+
-- Privacy
UI_TEXT_CONTENT["AISTUDIO::PAGES::HOME::T3959064551"] = "Privacy"
diff --git a/app/MindWork AI Studio/Plugins/models/plugin.lua b/app/MindWork AI Studio/Plugins/models/plugin.lua
index d68f2b3a..7aa01301 100644
--- a/app/MindWork AI Studio/Plugins/models/plugin.lua
+++ b/app/MindWork AI Studio/Plugins/models/plugin.lua
@@ -109,7 +109,7 @@ MODELS = {}
-- -- the same name means different things depending on who serves it.
-- -- Allowed values are: OPEN_AI, ANTHROPIC, MISTRAL, GOOGLE, X, DEEP_SEEK,
-- -- ALIBABA_CLOUD, PERPLEXITY, OPEN_ROUTER, HETZNER, IONOS, LITE_LLM,
--- -- FIREWORKS, GROQ, HUGGINGFACE, SELF_HOSTED, HELMHOLTZ, GWDG
+-- -- REQUESTY, FIREWORKS, GROQ, HUGGINGFACE, SELF_HOSTED, HELMHOLTZ, GWDG
-- ["ONLY_ON"] = "SELF_HOSTED",
--
-- -- Optional: restrict this entry to models of one vendor. Only gateways
diff --git a/app/MindWork AI Studio/Provider/LLMProviders.cs b/app/MindWork AI Studio/Provider/LLMProviders.cs
index f682bd0b..115b4803 100644
--- a/app/MindWork AI Studio/Provider/LLMProviders.cs
+++ b/app/MindWork AI Studio/Provider/LLMProviders.cs
@@ -19,6 +19,7 @@ public enum LLMProviders
HETZNER = 16,
IONOS = 17,
LITE_LLM = 18,
+ REQUESTY = 19,
FIREWORKS = 5,
GROQ = 6,
diff --git a/app/MindWork AI Studio/Provider/LLMProvidersExtensions.cs b/app/MindWork AI Studio/Provider/LLMProvidersExtensions.cs
index 3a10e5d0..a07c65f4 100644
--- a/app/MindWork AI Studio/Provider/LLMProvidersExtensions.cs
+++ b/app/MindWork AI Studio/Provider/LLMProvidersExtensions.cs
@@ -14,6 +14,7 @@ using AIStudio.Provider.Mistral;
using AIStudio.Provider.OpenAI;
using AIStudio.Provider.OpenRouter;
using AIStudio.Provider.Perplexity;
+using AIStudio.Provider.Requesty;
using AIStudio.Provider.SelfHosted;
using AIStudio.Provider.X;
using AIStudio.Settings;
@@ -62,6 +63,7 @@ public static class LLMProvidersExtensions
LLMProviders.HETZNER => "Hetzner (Experimental)",
LLMProviders.IONOS => "IONOS",
LLMProviders.LITE_LLM => "LiteLLM",
+ LLMProviders.REQUESTY => "Requesty",
LLMProviders.GROQ => "Groq",
LLMProviders.FIREWORKS => "Fireworks.ai",
@@ -100,6 +102,7 @@ public static class LLMProvidersExtensions
LLMProviders.HETZNER => "Hetzner",
LLMProviders.IONOS => "IONOS",
LLMProviders.LITE_LLM => "LiteLLM",
+ LLMProviders.REQUESTY => "Requesty",
LLMProviders.GROQ => "Groq",
LLMProviders.FIREWORKS => "Fireworks.ai",
@@ -170,6 +173,8 @@ public static class LLMProvidersExtensions
// of a self-hosted model here and let the user assign the level themselves.
LLMProviders.LITE_LLM => Confidence.USER_OPERATED_GATEWAY.WithSources("https://docs.litellm.ai/docs/data_security").WithLevel(settingsManager.GetConfiguredConfidenceLevel(llmProvider)),
+ LLMProviders.REQUESTY => Confidence.UNKNOWN.WithSources("https://www.requesty.ai/privacy", "https://www.requesty.ai/terms").WithLevel(settingsManager.GetConfiguredConfidenceLevel(llmProvider)),
+
LLMProviders.SELF_HOSTED => Confidence.SELF_HOSTED.WithLevel(settingsManager.GetConfiguredConfidenceLevel(llmProvider)),
LLMProviders.HELMHOLTZ => Confidence.GDPR_NO_TRAINING.WithRegion("Europe, Germany").WithSources("https://helmholtz.cloud/services/?serviceID=d7d5c597-a2f6-4bd1-b71e-4d6499d98570").WithLevel(settingsManager.GetConfiguredConfidenceLevel(llmProvider)),
@@ -208,6 +213,7 @@ public static class LLMProvidersExtensions
LLMProviders.DEEP_SEEK => false,
LLMProviders.PERPLEXITY => false,
LLMProviders.HETZNER => false,
+ LLMProviders.REQUESTY => false,
//
// Hugging Face serves embeddings, but not through the router endpoint we chat with: that
@@ -254,6 +260,7 @@ public static class LLMProvidersExtensions
LLMProviders.X => false,
LLMProviders.DEEP_SEEK => false,
LLMProviders.PERPLEXITY => false,
+ LLMProviders.REQUESTY => false,
//
// Hugging Face transcribes audio, but like embeddings, not through the router endpoint we
@@ -319,6 +326,7 @@ public static class LLMProvidersExtensions
LLMProviders.HETZNER => new ProviderHetzner { InstanceName = instanceName, ConfiguredProviderId = configuredProviderId, AdditionalJsonApiParameters = expertProviderApiParameter, TokenizerPath = tokenizerPath, IsEnterpriseConfiguration = isEnterpriseConfiguration },
LLMProviders.IONOS => new ProviderIONOS { InstanceName = instanceName, ConfiguredProviderId = configuredProviderId, AdditionalJsonApiParameters = expertProviderApiParameter, TokenizerPath = tokenizerPath, IsEnterpriseConfiguration = isEnterpriseConfiguration },
LLMProviders.LITE_LLM => new ProviderLiteLLM(hostname) { InstanceName = instanceName, ConfiguredProviderId = configuredProviderId, AdditionalJsonApiParameters = expertProviderApiParameter, TokenizerPath = tokenizerPath, IsEnterpriseConfiguration = isEnterpriseConfiguration },
+ LLMProviders.REQUESTY => new ProviderRequesty { InstanceName = instanceName, ConfiguredProviderId = configuredProviderId, AdditionalJsonApiParameters = expertProviderApiParameter, TokenizerPath = tokenizerPath, IsEnterpriseConfiguration = isEnterpriseConfiguration },
LLMProviders.GROQ => new ProviderGroq { InstanceName = instanceName, ConfiguredProviderId = configuredProviderId, AdditionalJsonApiParameters = expertProviderApiParameter, TokenizerPath = tokenizerPath, IsEnterpriseConfiguration = isEnterpriseConfiguration },
LLMProviders.FIREWORKS => new ProviderFireworks { InstanceName = instanceName, ConfiguredProviderId = configuredProviderId, AdditionalJsonApiParameters = expertProviderApiParameter, TokenizerPath = tokenizerPath, IsEnterpriseConfiguration = isEnterpriseConfiguration },
@@ -357,6 +365,7 @@ public static class LLMProvidersExtensions
LLMProviders.OPEN_ROUTER => "https://openrouter.ai/keys",
LLMProviders.HETZNER => "https://experiments.hetzner.com",
LLMProviders.IONOS => "https://cloud.ionos.com/compute/sign-up",
+ LLMProviders.REQUESTY => "https://app.requesty.ai/api-keys",
LLMProviders.GROQ => "https://console.groq.com/",
LLMProviders.FIREWORKS => "https://fireworks.ai/login",
@@ -384,6 +393,7 @@ public static class LLMProvidersExtensions
LLMProviders.HUGGINGFACE => "https://huggingface.co/settings/billing",
LLMProviders.HETZNER => "https://experiments.hetzner.com",
LLMProviders.IONOS => "https://dcd.ionos.com/latest/?page=dcd-ai-model-hub",
+ LLMProviders.REQUESTY => "https://app.requesty.ai/",
_ => string.Empty,
};
@@ -404,6 +414,7 @@ public static class LLMProvidersExtensions
LLMProviders.HUGGINGFACE => true,
LLMProviders.HETZNER => true,
LLMProviders.IONOS => true,
+ LLMProviders.REQUESTY => true,
_ => false,
};
@@ -473,6 +484,7 @@ public static class LLMProvidersExtensions
LLMProviders.HETZNER => true,
LLMProviders.IONOS => true,
LLMProviders.LITE_LLM => true,
+ LLMProviders.REQUESTY => true,
LLMProviders.GROQ => true,
LLMProviders.FIREWORKS => true,
@@ -502,6 +514,7 @@ public static class LLMProvidersExtensions
LLMProviders.OPEN_ROUTER => true,
LLMProviders.HETZNER => true,
LLMProviders.IONOS => true,
+ LLMProviders.REQUESTY => true,
LLMProviders.GROQ => true,
LLMProviders.FIREWORKS => true,
diff --git a/app/MindWork AI Studio/Provider/LLMProvidersIconExtensions.cs b/app/MindWork AI Studio/Provider/LLMProvidersIconExtensions.cs
index 66264cac..0caa1386 100644
--- a/app/MindWork AI Studio/Provider/LLMProvidersIconExtensions.cs
+++ b/app/MindWork AI Studio/Provider/LLMProvidersIconExtensions.cs
@@ -31,6 +31,7 @@ public static class LLMProvidersIconExtensions
LLMProviders.HETZNER => $"{ICON_ROOT}/hetzner.svg",
LLMProviders.IONOS => $"{ICON_ROOT}/ionos.svg",
LLMProviders.LITE_LLM => $"{ICON_ROOT}/litellm.svg",
+ LLMProviders.REQUESTY => $"{ICON_ROOT}/requesty.svg",
LLMProviders.GROQ => $"{ICON_ROOT}/groq.svg",
LLMProviders.FIREWORKS => $"{ICON_ROOT}/fireworks.svg",
LLMProviders.HUGGINGFACE => $"{ICON_ROOT}/hugging-face.svg",
diff --git a/app/MindWork AI Studio/Provider/Reasoning/ReasoningDispatcher.cs b/app/MindWork AI Studio/Provider/Reasoning/ReasoningDispatcher.cs
index 1dc9006b..0695495a 100644
--- a/app/MindWork AI Studio/Provider/Reasoning/ReasoningDispatcher.cs
+++ b/app/MindWork AI Studio/Provider/Reasoning/ReasoningDispatcher.cs
@@ -108,6 +108,7 @@ public static class ReasoningDispatcher
LLMProviders.HETZNER or
LLMProviders.IONOS or
LLMProviders.LITE_LLM or
+ LLMProviders.REQUESTY or
LLMProviders.X or
LLMProviders.DEEP_SEEK or
LLMProviders.GROQ or
diff --git a/app/MindWork AI Studio/Provider/Requesty/ProviderRequesty.cs b/app/MindWork AI Studio/Provider/Requesty/ProviderRequesty.cs
new file mode 100644
index 00000000..299856a3
--- /dev/null
+++ b/app/MindWork AI Studio/Provider/Requesty/ProviderRequesty.cs
@@ -0,0 +1,162 @@
+using System.Net.Http.Headers;
+using System.Runtime.CompilerServices;
+
+using AIStudio.Chat;
+using AIStudio.Models.Live;
+using AIStudio.Provider.OpenAI;
+using AIStudio.Settings;
+
+namespace AIStudio.Provider.Requesty;
+
+public sealed class ProviderRequesty() : BaseProvider(LLMProviders.REQUESTY, new Uri("https://router.requesty.ai/v1/"), ExternalHttpTrustPolicy.SYSTEM_TRUST_ONLY, LOGGER)
+{
+ private const string PROJECT_WEBSITE = "https://github.com/MindWorkAI/AI-Studio";
+ private const string PROJECT_NAME = "MindWork AI Studio";
+
+ private static readonly ILogger LOGGER = Program.LOGGER_FACTORY.CreateLogger();
+
+ #region Implementation of IProvider
+
+ ///
+ public override string Id => LLMProviders.REQUESTY.ToSecretId();
+
+ ///
+ public override string InstanceName { get; set; } = "Requesty";
+
+ ///
+ public override bool HasModelLoadingCapability => true;
+
+ ///
+ public override async IAsyncEnumerable StreamChatCompletion(Model chatModel, ChatThread chatThread, SettingsManager settingsManager, [EnumeratorCancellation] CancellationToken token = default)
+ {
+ await foreach (var content in this.StreamOpenAICompatibleChatCompletion(
+ "Requesty",
+ chatModel,
+ chatThread,
+ settingsManager,
+ async (systemPrompt, apiParameters, tools) =>
+ {
+ // Build the list of messages:
+ var messages = await chatThread.Blocks.BuildMessagesUsingNestedImageUrlAsync(this.CreateSettingsProvider(chatModel));
+
+ return new ChatCompletionAPIRequest
+ {
+ Model = chatModel.Id,
+
+ // Build the messages:
+ // - First of all the system prompt
+ // - Then none-empty user and AI messages
+ Messages = [systemPrompt, ..messages],
+
+ // Right now, we only support streaming completions:
+ Stream = true,
+ Tools = tools,
+ AdditionalApiParameters = apiParameters
+ };
+ },
+ headersAction: headers =>
+ {
+ // Set custom headers for project identification:
+ headers.Add("HTTP-Referer", PROJECT_WEBSITE);
+ headers.Add("X-Title", PROJECT_NAME);
+ },
+ token: token))
+ yield return content;
+ }
+
+ #pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
+ ///
+ public override async IAsyncEnumerable StreamImageCompletion(Model imageModel, string promptPositive, string promptNegative = FilterOperator.String.Empty, ImageURL referenceImageURL = default, [EnumeratorCancellation] CancellationToken token = default)
+ {
+ yield break;
+ }
+ #pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
+
+ ///
+ public override Task TranscribeAudioAsync(Model transcriptionModel, string audioFilePath, SettingsManager settingsManager, CancellationToken token = default)
+ {
+ return Task.FromResult(TranscriptionResult.Failure());
+ }
+
+ ///
+ public override Task>> EmbedTextAsync(Model embeddingModel, SettingsManager settingsManager, CancellationToken token = default, params List texts)
+ {
+ throw this.CreateEmbeddingsNotSupportedException();
+ }
+
+ ///
+ public override Task GetTextModels(string? apiKeyProvisional = null, CancellationToken token = default)
+ {
+ return this.LoadModels(SecretStoreType.LLM_PROVIDER, apiKeyProvisional, token);
+ }
+
+ ///
+ public override Task GetImageModels(string? apiKeyProvisional = null, CancellationToken token = default)
+ {
+ return Task.FromResult(ModelLoadResult.FromModels([]));
+ }
+
+ ///
+ public override Task GetEmbeddingModels(string? apiKeyProvisional = null, CancellationToken token = default)
+ {
+ return Task.FromResult(ModelLoadResult.FromModels([]));
+ }
+
+ ///
+ public override Task GetTranscriptionModels(string? apiKeyProvisional = null, CancellationToken token = default)
+ {
+ return Task.FromResult(ModelLoadResult.FromModels([]));
+ }
+
+ #endregion
+
+ ///
+ /// Loads the managed policies and the full model catalog, and offers both as one list.
+ ///
+ ///
+ /// Requesty lists its managed policies, such as "gpt-5-mini@eu", on a route of their own, and
+ /// the catalog does not contain them. Both lists are read before anything is reported, because
+ /// what is reported replaces everything this instance said before. When the managed route
+ /// fails, the catalog alone is still offered.
+ ///
+ /// Where the API key is stored.
+ /// An API key which is not stored yet.
+ /// The cancellation token to use.
+ /// The chat models.
+ private async Task LoadModels(SecretStoreType storeType, string? apiKeyProvisional, CancellationToken token)
+ {
+ IList managedModels = [];
+ await this.LoadModelsResponse(
+ storeType,
+ "models/managed",
+ modelResponse =>
+ {
+ managedModels = modelResponse.Data;
+ return [];
+ },
+ apiKeyProvisional,
+ requestConfigurator: ConfigureRequest,
+ token: token);
+
+ return await this.LoadModelsResponse(
+ storeType,
+ "models",
+ modelResponse => managedModels.Concat(modelResponse.Data)
+ .DistinctBy(n => n.Id)
+ .Select(n => new Model(n.Id, null))
+ .Where(model => model.IsChatModel(this.Provider)),
+ apiKeyProvisional,
+ requestConfigurator: ConfigureRequest,
+ listingFactory: modelResponse => managedModels.Concat(modelResponse.Data)
+ .DistinctBy(n => n.Id)
+ .Select(n => ModelListing.For(n.Id, n.ContextWindowTokens)),
+ token: token);
+ }
+
+ private static void ConfigureRequest(HttpRequestMessage request, string secretKey)
+ {
+ request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", secretKey);
+ request.Headers.Add("HTTP-Referer", PROJECT_WEBSITE);
+ request.Headers.Add("X-Title", PROJECT_NAME);
+ }
+}
\ No newline at end of file
diff --git a/app/MindWork AI Studio/Provider/Requesty/RequestyModel.cs b/app/MindWork AI Studio/Provider/Requesty/RequestyModel.cs
new file mode 100644
index 00000000..35ac8205
--- /dev/null
+++ b/app/MindWork AI Studio/Provider/Requesty/RequestyModel.cs
@@ -0,0 +1,10 @@
+using System.Text.Json.Serialization;
+
+namespace AIStudio.Provider.Requesty;
+
+///
+/// A data model for a Requesty model from the API.
+///
+/// The model's ID.
+/// How much the model reads and writes in one conversation, in tokens.
+public readonly record struct RequestyModel(string Id, [property: JsonPropertyName("context_window")] int? ContextWindowTokens);
\ No newline at end of file
diff --git a/app/MindWork AI Studio/Provider/Requesty/RequestyModelsResponse.cs b/app/MindWork AI Studio/Provider/Requesty/RequestyModelsResponse.cs
new file mode 100644
index 00000000..17f7a2e8
--- /dev/null
+++ b/app/MindWork AI Studio/Provider/Requesty/RequestyModelsResponse.cs
@@ -0,0 +1,7 @@
+namespace AIStudio.Provider.Requesty;
+
+///
+/// A data model for the response from the Requesty models endpoints.
+///
+/// The list of models.
+public readonly record struct RequestyModelsResponse(IList Data);
\ No newline at end of file
diff --git a/app/MindWork AI Studio/wwwroot/changelog/v26.9.1.md b/app/MindWork AI Studio/wwwroot/changelog/v26.9.1.md
index 360ffbb6..71bc6e73 100644
--- a/app/MindWork AI Studio/wwwroot/changelog/v26.9.1.md
+++ b/app/MindWork AI Studio/wwwroot/changelog/v26.9.1.md
@@ -40,6 +40,7 @@
- Added an optional API key to every server you host yourself, among them LM Studio, llama.cpp, and whisper.cpp. Such a server may ask for one itself or sit behind a login your organization placed in front of it. So far, only Ollama and vLLM could be given a key.
- Added a setting for the audio quality used when your speech and your audio and video files are transcribed. AI Studio prepares every recording before it goes to your transcription provider, and you now decide how much detail it keeps: a lower quality travels faster, a higher one gives the transcription model more to work with. You find it in the app settings, right below your transcription provider. Thanks, Dominic Neuburg (`donework`), for this contribution.
- Added organization-wide management for the audio quality used when transcribing. IT departments can set the quality their organization works with and lock it, or leave it as a default their colleagues are free to change.
+- Added Requesty as a new LLM provider for chats. Requesty is an AI gateway that gives you models from many providers with one API key. The model list includes its managed routing policies, such as models kept in the EU. We have not evaluated its trust level yet.
- Improved loading web content in the assistants: it now uses the same reader as the Read Web Page tool, which extracts the main content of a page more reliably and skips navigation and boilerplate. Pages from your own network, including local servers, keep working as before. When a page cannot be read, AI Studio now says why instead of leaving the field empty.
- Improved the app icon. The previous one was generated by an image model; the new one was created based on it and keeps the familiar green landscape with the chat bubble. Because it is now a vector drawing, it stays sharp everywhere it appears: in your taskbar or dock, in the window list, and on the start screen while AI Studio is loading.
- Improved how AI Studio works out what a model can do. Every model family now stands on its own, together with the page it was read from, and our build refuses rules which contradict each other or name no source. That way, mistakes are caught before they ever reach you.
diff --git a/app/MindWork AI Studio/wwwroot/images/provider-icons/README.md b/app/MindWork AI Studio/wwwroot/images/provider-icons/README.md
index 4bf0d75b..67aca49d 100644
--- a/app/MindWork AI Studio/wwwroot/images/provider-icons/README.md
+++ b/app/MindWork AI Studio/wwwroot/images/provider-icons/README.md
@@ -9,6 +9,7 @@ All provider icons are shipped with AI Studio and loaded locally. No icon trigge
- `openai*.svg` uses the OpenAI mark path from [Simple Icons 15.15.0](https://github.com/simple-icons/simple-icons/blob/15.15.0/icons/openai.svg) and black/white variants following the [OpenAI Design Guidelines](https://openai.com/brand/).
- `fireworks.svg` is adapted from the [Fireworks AI site icon](https://fireworks.ai/icon0.svg).
- `groq.svg` is adapted from the [Groq site icon](https://groq.com/favicon.svg).
+- `requesty.svg` is adapted from the [Requesty site icon](https://www.requesty.ai/apple-icon.png).
- `litellm.svg` is the bullet train emoji from [Twemoji 17.0.3](https://github.com/jdecked/twemoji/tree/v17.0.3), licensed under [CC-BY 4.0](https://creativecommons.org/licenses/by/4.0/). LiteLLM has no mark of its own and identifies itself with that emoji. Retrieved on 2026-08-30.
- `provider*.svg` and `self-hosted*.svg` are neutral project-owned fallback graphics.
- `gwdg.svg`, `openrouter.svg`, `google.svg` and `helmholtz.svg` were created by taking the official logo from their respective websites as images and creating a svg from them.
diff --git a/app/MindWork AI Studio/wwwroot/images/provider-icons/requesty.svg b/app/MindWork AI Studio/wwwroot/images/provider-icons/requesty.svg
new file mode 100644
index 00000000..e7bff286
--- /dev/null
+++ b/app/MindWork AI Studio/wwwroot/images/provider-icons/requesty.svg
@@ -0,0 +1 @@
+
diff --git a/app/Tests/Models/Corpus/CapabilitySnapshot.txt b/app/Tests/Models/Corpus/CapabilitySnapshot.txt
index f684fa3e..c5d643ff 100644
--- a/app/Tests/Models/Corpus/CapabilitySnapshot.txt
+++ b/app/Tests/Models/Corpus/CapabilitySnapshot.txt
@@ -189,6 +189,8 @@ PERPLEXITY | sonar-deep-research | ALWAYS_REASONING, CHAT_COMPLETION_API, MULTIP
PERPLEXITY | sonar-pro | CHAT_COMPLETION_API, MULTIPLE_IMAGE_INPUT, TEXT_INPUT, TEXT_OUTPUT, WEB_SEARCH | CHAT | (unknown) | (unknown) | (unknown)
PERPLEXITY | sonar-reasoning | ALWAYS_REASONING, CHAT_COMPLETION_API, MULTIPLE_IMAGE_INPUT, TEXT_INPUT, TEXT_OUTPUT, WEB_SEARCH | CHAT | (unknown) | (unknown) | (unknown)
PERPLEXITY | sonar-reasoning-pro | ALWAYS_REASONING, CHAT_COMPLETION_API, MULTIPLE_IMAGE_INPUT, TEXT_INPUT, TEXT_OUTPUT, WEB_SEARCH | CHAT | (unknown) | (unknown) | (unknown)
+REQUESTY | anthropic/claude-opus-5 | CHAT_COMPLETION_API, FUNCTION_CALLING, MULTIPLE_IMAGE_INPUT, REASONING_BY_DEFAULT, TEXT_INPUT, TEXT_OUTPUT | CHAT | 1000000 | 600 per request | PROVIDER_API /v1/messages/count_tokens
+REQUESTY | google/gemma-4-31b-it | CHAT_COMPLETION_API, FUNCTION_CALLING, MULTIPLE_IMAGE_INPUT, OPTIONAL_REASONING, TEXT_INPUT, TEXT_OUTPUT | CHAT | (unknown) | (unknown) | (unknown)
SELF_HOSTED | | (nothing) | CHAT | (unknown) | (unknown) | (unknown)
SELF_HOSTED | --- | CHAT_COMPLETION_API, FUNCTION_CALLING, TEXT_INPUT, TEXT_OUTPUT | CHAT | (unknown) | (unknown) | (unknown)
SELF_HOSTED | 01-ai/yi-large | CHAT_COMPLETION_API, TEXT_INPUT, TEXT_OUTPUT | CHAT | (unknown) | (unknown) | (unknown)
diff --git a/app/Tests/Models/Corpus/ModelCorpus.cs b/app/Tests/Models/Corpus/ModelCorpus.cs
index 1cfcdbf5..9da909c9 100644
--- a/app/Tests/Models/Corpus/ModelCorpus.cs
+++ b/app/Tests/Models/Corpus/ModelCorpus.cs
@@ -237,6 +237,8 @@ public static class ModelCorpus
new(LITE_LLM, "azure/gpt-5.6", QUOTED_AS_A_NAME_SHAPE),
new(LITE_LLM, "bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0", NAMED_BY_NO_RULE),
new(LITE_LLM, "the-fast-one", NAMED_BY_NO_RULE),
+ new(REQUESTY, "anthropic/claude-opus-5", QUOTED_AS_A_NAME_SHAPE),
+ new(REQUESTY, "google/gemma-4-31b-it", NAMED_BY_A_RULE),
];
///
diff --git a/app/Tests/Provider/ModelListMetadataTests.cs b/app/Tests/Provider/ModelListMetadataTests.cs
index bc42bc76..e0a3cadb 100644
--- a/app/Tests/Provider/ModelListMetadataTests.cs
+++ b/app/Tests/Provider/ModelListMetadataTests.cs
@@ -2,6 +2,7 @@ using System.Text.Json;
using AIStudio.Provider.Groq;
using AIStudio.Provider.OpenRouter;
+using AIStudio.Provider.Requesty;
using MistralModelsResponse = AIStudio.Provider.Mistral.ModelsResponse;
using SelfHostedModelsResponse = AIStudio.Provider.SelfHosted.ModelsResponse;
@@ -105,6 +106,19 @@ public sealed class ModelListMetadataTests
Assert.That(response.Data[0].ContextWindowTokens, Is.EqualTo(131_072));
}
+ [Test]
+ public void RequestyStatesTheWindowAsTheContextWindow()
+ {
+ var response = JsonSerializer.Deserialize("""
+ {
+ "object": "list",
+ "data": [ { "id": "openai/gpt-4o-mini", "object": "model", "api": "chat", "context_window": 128000, "max_output_tokens": 16384 } ]
+ }
+ """, AS_THE_PROVIDERS_READ_IT);
+
+ Assert.That(response.Data[0].ContextWindowTokens, Is.EqualTo(128_000));
+ }
+
[Test]
public void MistralStatesTheWindowAsAMaximumLength()
{
diff --git a/documentation/Models.md b/documentation/Models.md
index 9cb6b0e4..3d66241d 100644
--- a/documentation/Models.md
+++ b/documentation/Models.md
@@ -108,7 +108,7 @@ Both are documented for administrators in `documentation/Enterprise IT.md`. Mode
## Live Metadata From The Model Lists
-Some providers state the context window in the model list they answer with anyway. AI Studio reads it where it is there: OpenRouter (`context_length`), Groq (`context_window`), Mistral (`max_context_length`), the Hugging Face router (per inference provider), and any OpenAI-compatible self-hosted engine that fills `max_model_len`, which vLLM does.
+Some providers state the context window in the model list they answer with anyway. AI Studio reads it where it is there: OpenRouter (`context_length`), Groq (`context_window`), Requesty (`context_window`), Mistral (`max_context_length`), the Hugging Face router (per inference provider), and any OpenAI-compatible self-hosted engine that fills `max_model_len`, which vLLM does.
Three things to know when adding another one:
diff --git a/runtime/packaging/linux/org.mindworkai.AIStudio.metainfo.xml b/runtime/packaging/linux/org.mindworkai.AIStudio.metainfo.xml
index e8e9fc05..c42d7d77 100644
--- a/runtime/packaging/linux/org.mindworkai.AIStudio.metainfo.xml
+++ b/runtime/packaging/linux/org.mindworkai.AIStudio.metainfo.xml
@@ -31,8 +31,8 @@
Independence: You are not tied to any single provider. Choose the providers that best
suit your needs, including OpenAI, Perplexity, Mistral, Anthropic, Google Gemini, xAI,
- DeepSeek, Alibaba Cloud, OpenRouter, Hetzner, IONOS, LiteLLM, Hugging Face, Groq,
- Fireworks, Helmholtz, GWDG, and self-hosted models.
+ DeepSeek, Alibaba Cloud, OpenRouter, Hetzner, IONOS, LiteLLM, Requesty, Hugging Face,
+ Groq, Fireworks, Helmholtz, GWDG, and self-hosted models.
Assistants: Use ready-made assistants for common business and other tasks without writing prompts yourself.