Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
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
1 change: 1 addition & 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
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