Skip to content
Open
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
5 changes: 5 additions & 0 deletions .changeset/requesty-provider.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"task-master-ai": minor
---

Add Requesty as a supported AI provider. Requesty is an OpenAI-compatible LLM router that exposes many upstream models behind a single endpoint using `provider/model` naming. Configure it with `REQUESTY_API_KEY` and select a model such as `openai/gpt-4o-mini` or `anthropic/claude-sonnet-4-5`.
1 change: 1 addition & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ GOOGLE_API_KEY=YOUR_GOOGLE_KEY_HERE
MISTRAL_API_KEY=YOUR_MISTRAL_KEY_HERE
GROQ_API_KEY=YOUR_GROQ_KEY_HERE
OPENROUTER_API_KEY=YOUR_OPENROUTER_KEY_HERE
REQUESTY_API_KEY=YOUR_REQUESTY_KEY_HERE
XAI_API_KEY=YOUR_XAI_KEY_HERE
AZURE_OPENAI_API_KEY=YOUR_AZURE_KEY_HERE
OLLAMA_API_KEY=YOUR_OLLAMA_API_KEY_HERE
Expand Down
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ At least one (1) of the following is required:
- Perplexity API key (for research model)
- xAI API Key (for research or main model)
- OpenRouter API Key (for research or main model)
- Requesty API Key (for research or main model)
- Claude Code (no API key required - requires Claude Code CLI)
- Codex CLI (OAuth via ChatGPT subscription - requires Codex CLI)

Expand Down Expand Up @@ -140,6 +141,7 @@ MCP (Model Control Protocol) lets you run Task Master directly from your editor.
"MISTRAL_API_KEY": "YOUR_MISTRAL_KEY_HERE",
"GROQ_API_KEY": "YOUR_GROQ_KEY_HERE",
"OPENROUTER_API_KEY": "YOUR_OPENROUTER_KEY_HERE",
"REQUESTY_API_KEY": "YOUR_REQUESTY_KEY_HERE",
"XAI_API_KEY": "YOUR_XAI_KEY_HERE",
"AZURE_OPENAI_API_KEY": "YOUR_AZURE_KEY_HERE",
"OLLAMA_API_KEY": "YOUR_OLLAMA_API_KEY_HERE"
Expand Down Expand Up @@ -170,6 +172,7 @@ MCP (Model Control Protocol) lets you run Task Master directly from your editor.
"MISTRAL_API_KEY": "YOUR_MISTRAL_KEY_HERE",
"GROQ_API_KEY": "YOUR_GROQ_KEY_HERE",
"OPENROUTER_API_KEY": "YOUR_OPENROUTER_KEY_HERE",
"REQUESTY_API_KEY": "YOUR_REQUESTY_KEY_HERE",
"XAI_API_KEY": "YOUR_XAI_KEY_HERE",
"AZURE_OPENAI_API_KEY": "YOUR_AZURE_KEY_HERE",
"OLLAMA_API_KEY": "YOUR_OLLAMA_API_KEY_HERE"
Expand Down
1 change: 1 addition & 0 deletions assets/env.example
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ MISTRAL_API_KEY="your_mistral_key_here" # Optional, for Mistral AI
XAI_API_KEY="YOUR_XAI_KEY_HERE" # Optional, for xAI AI models.
GROQ_API_KEY="YOUR_GROQ_KEY_HERE" # Optional, for Groq models.
OPENROUTER_API_KEY="YOUR_OPENROUTER_KEY_HERE" # Optional, for OpenRouter models.
REQUESTY_API_KEY="YOUR_REQUESTY_KEY_HERE" # Optional, for Requesty models.
AZURE_OPENAI_API_KEY="your_azure_key_here" # Optional, for Azure OpenAI models (requires endpoint in .taskmaster/config.json).
OLLAMA_API_KEY="your_ollama_api_key_here" # Optional: For remote Ollama servers that require authentication.
GITHUB_API_KEY="your_github_api_key_here" # Optional: For GitHub import/export features. Format: ghp_... or github_pat_...
1 change: 1 addition & 0 deletions docs/configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ The `TASK_MASTER_TOOLS` environment variable controls which tools are loaded by
- `MISTRAL_API_KEY`: Your Mistral API key.
- `AZURE_OPENAI_API_KEY`: Your Azure OpenAI API key (also requires `AZURE_OPENAI_ENDPOINT`).
- `OPENROUTER_API_KEY`: Your OpenRouter API key.
- `REQUESTY_API_KEY`: Your Requesty API key.
- `XAI_API_KEY`: Your X-AI API key.
- **Optional Endpoint Overrides:**
- **Per-role `baseURL` in `.taskmasterconfig`:** You can add a `baseURL` property to any model role (`main`, `research`, `fallback`) to override the default API endpoint for that provider. If omitted, the provider's standard endpoint is used.
Expand Down
12 changes: 12 additions & 0 deletions docs/models.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,12 @@
| openrouter | mistralai/mistral-small-3.1-24b-instruct | — | 0.1 | 0.3 |
| openrouter | mistralai/devstral-small | — | 0.1 | 0.3 |
| openrouter | mistralai/mistral-nemo | — | 0.03 | 0.07 |
| requesty | openai/gpt-4o-mini | — | 0.15 | 0.6 |
| requesty | openai/gpt-4o | — | 2.5 | 10 |
| requesty | openai/gpt-4.1-mini | — | 0.4 | 1.6 |
| requesty | anthropic/claude-sonnet-4-5 | 0.77 | 3 | 15 |
| requesty | google/gemini-2.5-flash | — | 0.3 | 2.5 |
| requesty | deepseek/deepseek-chat | — | 0.27 | 1.1 |
| zai | glm-4.6 | 0.68 | 0.6 | 2.2 |
| zai | glm-4.5 | 0.65 | 0.6 | 2.2 |
| zai | glm-4.5-air | 0.62 | 0.2 | 1.1 |
Expand Down Expand Up @@ -250,6 +256,12 @@
| openrouter | qwen/qwen3-235b-a22b | — | 0.14 | 2 |
| openrouter | mistralai/mistral-small-3.1-24b-instruct | — | 0.1 | 0.3 |
| openrouter | mistralai/mistral-nemo | — | 0.03 | 0.07 |
| requesty | openai/gpt-4o-mini | — | 0.15 | 0.6 |
| requesty | openai/gpt-4o | — | 2.5 | 10 |
| requesty | openai/gpt-4.1-mini | — | 0.4 | 1.6 |
| requesty | anthropic/claude-sonnet-4-5 | 0.77 | 3 | 15 |
| requesty | google/gemini-2.5-flash | — | 0.3 | 2.5 |
| requesty | deepseek/deepseek-chat | — | 0.27 | 1.1 |
| zai | glm-4.6 | 0.68 | 0.6 | 2.2 |
| zai | glm-4.5 | 0.65 | 0.6 | 2.2 |
| zai | glm-4.5-air | 0.62 | 0.2 | 1.1 |
Expand Down
2 changes: 2 additions & 0 deletions llms-install.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ Add the following configuration to the user's MCP settings file (`.cursor/mcp.js
"GOOGLE_API_KEY": "user_will_add_their_key_here",
"MISTRAL_API_KEY": "user_will_add_their_key_here",
"OPENROUTER_API_KEY": "user_will_add_their_key_here",
"REQUESTY_API_KEY": "user_will_add_their_key_here",
"XAI_API_KEY": "user_will_add_their_key_here"
}
}
Expand All @@ -42,6 +43,7 @@ Inform the user they need **at least one** API key from the following providers:
- **Perplexity** (for research features) - Highly recommended
- **Mistral** (for Mistral models)
- **OpenRouter** (access to multiple models)
- **Requesty** (access to multiple models)
- **xAI** (for Grok models)

The user will be able to define 3 separate roles (can be the same provider or separate providers) for main AI operations, research operations (research providers/models only), and a fallback model in case of errors.
Expand Down
2 changes: 2 additions & 0 deletions packages/tm-core/src/common/constants/providers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ export const VALIDATED_PROVIDERS = [
'mistral',
'azure',
'openrouter',
'requesty',
'bedrock',
'ollama'
] as const;
Expand All @@ -28,6 +29,7 @@ export const CUSTOM_PROVIDERS = {
VERTEX: 'vertex',
BEDROCK: 'bedrock',
OPENROUTER: 'openrouter',
REQUESTY: 'requesty',
OLLAMA: 'ollama',
LMSTUDIO: 'lmstudio',
OPENAI_COMPATIBLE: 'openai-compatible',
Expand Down
2 changes: 2 additions & 0 deletions scripts/modules/ai-services-unified.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ import {
OpenAIProvider,
OpenRouterAIProvider,
PerplexityAIProvider,
RequestyProvider,
VertexAIProvider,
XAIProvider,
ZAICodingProvider,
Expand All @@ -71,6 +72,7 @@ const PROVIDERS = {
xai: new XAIProvider(),
groq: new GroqProvider(),
openrouter: new OpenRouterAIProvider(),
requesty: new RequestyProvider(),
ollama: new OllamaAIProvider(),
'openai-compatible': new OpenAICompatibleProvider({
name: 'OpenAI Compatible',
Expand Down
5 changes: 5 additions & 0 deletions scripts/modules/config-manager.js
Original file line number Diff line number Diff line change
Expand Up @@ -900,6 +900,7 @@ function isApiKeySet(providerName, session = null, projectRoot = null) {
mistral: 'MISTRAL_API_KEY',
azure: 'AZURE_OPENAI_API_KEY',
openrouter: 'OPENROUTER_API_KEY',
requesty: 'REQUESTY_API_KEY',
Comment thread
Thibaultjaigu marked this conversation as resolved.
Resolved
xai: 'XAI_API_KEY',
zai: 'ZAI_API_KEY',
'zai-coding': 'ZAI_API_KEY',
Expand Down Expand Up @@ -977,6 +978,10 @@ function getMcpApiKeyStatus(providerName, projectRoot = null) {
apiKeyToCheck = mcpEnv.OPENROUTER_API_KEY;
placeholderValue = 'YOUR_OPENROUTER_API_KEY_HERE';
break;
case 'requesty':
apiKeyToCheck = mcpEnv.REQUESTY_API_KEY;
placeholderValue = 'YOUR_REQUESTY_API_KEY_HERE';
break;
case 'google':
apiKeyToCheck = mcpEnv.GOOGLE_API_KEY;
placeholderValue = 'YOUR_GOOGLE_API_KEY_HERE';
Expand Down
68 changes: 68 additions & 0 deletions scripts/modules/supported-models.json
Original file line number Diff line number Diff line change
Expand Up @@ -1042,6 +1042,74 @@
"reason": "Free OpenRouter models are not supported due to severe rate limits, lack of tool use support, and other reliability issues that make them impractical for production use."
}
],
"requesty": [
{
"id": "openai/gpt-4o-mini",
"swe_score": 0,
"cost_per_1m_tokens": {
"input": 0.15,
"output": 0.6
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 16384,
"supported": true
},
{
"id": "openai/gpt-4o",
"swe_score": 0,
"cost_per_1m_tokens": {
"input": 2.5,
"output": 10
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 16384,
"supported": true
},
{
"id": "openai/gpt-4.1-mini",
"swe_score": 0,
"cost_per_1m_tokens": {
"input": 0.4,
"output": 1.6
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 32768,
"supported": true
},
{
"id": "anthropic/claude-sonnet-4-5",
"swe_score": 0.77,
"cost_per_1m_tokens": {
"input": 3,
"output": 15
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 64000,
"supported": true
},
{
"id": "google/gemini-2.5-flash",
"swe_score": 0,
"cost_per_1m_tokens": {
"input": 0.3,
"output": 2.5
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 65536,
"supported": true
},
{
"id": "deepseek/deepseek-chat",
"swe_score": 0,
"cost_per_1m_tokens": {
"input": 0.27,
"output": 1.1
},
"allowed_roles": ["main", "fallback"],
"max_tokens": 8192,
"supported": true
}
],
"zai": [
{
"id": "glm-4.6",
Expand Down
1 change: 1 addition & 0 deletions src/ai-providers/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ export { OpenAIProvider } from './openai.js';
export { XAIProvider } from './xai.js';
export { GroqProvider } from './groq.js';
export { OpenRouterAIProvider } from './openrouter.js';
export { RequestyProvider } from './requesty.js';
export { OllamaAIProvider } from './ollama.js';
export { BedrockAIProvider } from './bedrock.js';
export { AzureProvider } from './azure.js';
Expand Down
24 changes: 24 additions & 0 deletions src/ai-providers/requesty.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
/**
* requesty.js
* AI provider implementation for Requesty models.
* Requesty is an OpenAI-compatible LLM router that exposes many upstream
* models (openai/..., anthropic/..., google/..., deepseek/...) behind a
* single OpenAI-compatible endpoint, using `provider/model` naming
* (the same convention as OpenRouter).
*/

import { OpenAICompatibleProvider } from './openai-compatible.js';

/**
* Requesty provider using its OpenAI-compatible router endpoint.
*/
export class RequestyProvider extends OpenAICompatibleProvider {
constructor() {
super({
name: 'Requesty',
apiKeyEnvVar: 'REQUESTY_API_KEY',
requiresApiKey: true,
defaultBaseURL: 'https://router.requesty.ai/v1'
});
}
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Resolved