From 9c546b34f3f86d0c058b5d705fc6626d48928450 Mon Sep 17 00:00:00 2001 From: Matt Rubens <2600+mrubens@users.noreply.github.com> Date: Tue, 4 Aug 2026 20:50:31 +0000 Subject: [PATCH 1/2] docs: add Requesty provider guide --- apps/docs/docs.json | 1 + apps/docs/logo/integrations/requesty.png | Bin 0 -> 9273 bytes apps/docs/models.mdx | 1 + apps/docs/providers/inference/requesty.mdx | 51 ++++++++++++++++++ .../setup/SetupDocs.client.test.tsx | 1 + .../src/app/(onboarding)/setup/setup-docs.ts | 1 + 6 files changed, 55 insertions(+) create mode 100644 apps/docs/logo/integrations/requesty.png create mode 100644 apps/docs/providers/inference/requesty.mdx diff --git a/apps/docs/docs.json b/apps/docs/docs.json index a4a8bde95..132c3a292 100644 --- a/apps/docs/docs.json +++ b/apps/docs/docs.json @@ -79,6 +79,7 @@ "providers/inference/opencode", "providers/inference/opencode-go", "providers/inference/openrouter", + "providers/inference/requesty", "providers/inference/together-ai", "providers/inference/vercel-ai-gateway", "providers/inference/vllm", diff --git a/apps/docs/logo/integrations/requesty.png b/apps/docs/logo/integrations/requesty.png new file mode 100644 index 0000000000000000000000000000000000000000..1ca4d0a2e74d98aca0ec9febd1f14ffd1cd912cb GIT binary patch literal 9273 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 literal 0 HcmV?d00001 diff --git a/apps/docs/models.mdx b/apps/docs/models.mdx index c716bb9e9..4555eab2c 100644 --- a/apps/docs/models.mdx +++ b/apps/docs/models.mdx @@ -53,6 +53,7 @@ These connections use metered API billing or a provider-managed gateway: | [OpenAI](/providers/inference/openai) | OpenAI API key | OpenAI API project | | [OpenCode Zen](/providers/inference/opencode) | OpenCode API key | OpenCode account | | [OpenRouter](/providers/inference/openrouter) | OpenRouter API key | OpenRouter balance and key limit | +| [Requesty](/providers/inference/requesty) | Requesty API key | Requesty organization | | [Together AI](/providers/inference/together-ai) | Together AI API key | Together AI account | | [Vercel AI Gateway](/providers/inference/vercel-ai-gateway) | AI Gateway API key | Vercel team | | [xAI](/providers/inference/xai) | xAI API key | xAI API team | diff --git a/apps/docs/providers/inference/requesty.mdx b/apps/docs/providers/inference/requesty.mdx new file mode 100644 index 000000000..4aa878f74 --- /dev/null +++ b/apps/docs/providers/inference/requesty.mdx @@ -0,0 +1,51 @@ +--- +title: Requesty +icon: '/logo/integrations/requesty.png' +description: Route Roomote model calls through Requesty's multi-provider AI gateway. +--- + +Requesty is a multi-provider inference gateway with centralized routing, +fallbacks, usage analytics, and cost controls. Use it when you want one +connection for models from several vendors. + +## Get an API key + +Sign up for Requesty and create a key on the [API Keys page](https://app.requesty.ai/api-keys). +Add credits or configure billing and any key-level spending limits before +connecting the key to Roomote. + +## Configuration + +Add **Requesty** in **Settings > Models** and paste the key, or configure: + +```sh +REQUESTY_API_KEY=... +``` + +Roomote exposes its recommended Requesty models under the `requesty/` +prefix. Some model IDs include a region suffix such as `@eu`. Apply the +recommended mapping or select models individually for each role. + +## Cost behavior + +Requesty bills routed model usage according to the account's plan, provider +pricing, and any bring-your-own-key configuration. Roomote records token usage +and estimates model cost from metadata, but Requesty's usage dashboard and bill +are authoritative. See [Requesty pricing](https://www.requesty.ai/pricing) for +current terms. + +## Verify setup + +1. save `REQUESTY_API_KEY` +2. confirm Requesty models appear in **Settings > Models** +3. apply the recommended mapping or assign a model to the coding role +4. run a small task and confirm it appears in [Requesty analytics](https://app.requesty.ai/analytics) + +## Common issues + +- **The key is rejected.** Confirm it is active and belongs to the intended + Requesty organization. +- **A model cannot be routed.** Check model availability, approved-model rules, + routing policies, regional support, and account balance in Requesty. +- **A spending limit blocks tasks.** Raise the applicable Requesty key or + organization limit, or choose a model with available budget. diff --git a/apps/web/src/app/(onboarding)/setup/SetupDocs.client.test.tsx b/apps/web/src/app/(onboarding)/setup/SetupDocs.client.test.tsx index 6ef8b7678..5f6bc71d6 100644 --- a/apps/web/src/app/(onboarding)/setup/SetupDocs.client.test.tsx +++ b/apps/web/src/app/(onboarding)/setup/SetupDocs.client.test.tsx @@ -54,6 +54,7 @@ describe('SetupDocs', () => { ['opencode', 'opencode'], ['opencode-go', 'opencode-go'], ['openrouter', 'openrouter'], + ['requesty', 'requesty'], ['togetherai', 'together-ai'], ['vercel', 'vercel-ai-gateway'], ['vllm', 'vllm'], diff --git a/apps/web/src/app/(onboarding)/setup/setup-docs.ts b/apps/web/src/app/(onboarding)/setup/setup-docs.ts index fa9db79aa..988374701 100644 --- a/apps/web/src/app/(onboarding)/setup/setup-docs.ts +++ b/apps/web/src/app/(onboarding)/setup/setup-docs.ts @@ -68,6 +68,7 @@ const MODEL_PROVIDER_DOC_PATHS: Partial< opencode: 'providers/inference/opencode', 'opencode-go': 'providers/inference/opencode-go', openrouter: 'providers/inference/openrouter', + requesty: 'providers/inference/requesty', togetherai: 'providers/inference/together-ai', vercel: 'providers/inference/vercel-ai-gateway', vllm: 'providers/inference/vllm', From c344ce3a554b99eae85c2dd60c690084c05e6fad Mon Sep 17 00:00:00 2001 From: Matt Rubens <2600+mrubens@users.noreply.github.com> Date: Tue, 4 Aug 2026 20:58:47 +0000 Subject: [PATCH 2/2] docs: complete Requesty environment references --- apps/docs/environment-variables.mdx | 1 + apps/docs/models.mdx | 13 +++++++------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/apps/docs/environment-variables.mdx b/apps/docs/environment-variables.mdx index 7894de280..ff27fb411 100644 --- a/apps/docs/environment-variables.mdx +++ b/apps/docs/environment-variables.mdx @@ -183,6 +183,7 @@ as per-task auth tokens or workspace paths. | `R_PLANNING_MODEL_REASONING_EFFORT` | Optional | Reasoning level for the advisor model. | | `R_MODEL_ENV_KEYS` | Optional | Comma- or space-separated list of extra provider key env vars to forward to task workers. | | `OPENROUTER_API_KEY` | Provider key | OpenRouter API key. Can also be saved from **Settings > Models**. | +| `REQUESTY_API_KEY` | Provider key | Requesty API key. Can also be saved from **Settings > Models**. | | `AI_GATEWAY_API_KEY` | Provider key | Vercel AI Gateway API key. | | `BASETEN_API_KEY` | Provider key | Baseten API key. | | `TOGETHER_API_KEY` | Provider key | Together AI API key. | diff --git a/apps/docs/models.mdx b/apps/docs/models.mdx index 4555eab2c..7fafd53da 100644 --- a/apps/docs/models.mdx +++ b/apps/docs/models.mdx @@ -155,12 +155,13 @@ R_EXPLORE_MODEL=openrouter/openai/gpt-5.6-luna ``` Roomote automatically makes common provider configuration available to the -model runtime, including OpenRouter, Vercel AI Gateway, OpenAI, Azure OpenAI, -Azure AI Foundry, Anthropic, Google Gemini, Moonshot, Kimi for Coding, MiniMax, -Z.AI, OpenCode, Amazon Bedrock, xAI, and GitHub Copilot. For gateway-supported -providers, credentials stay on the control plane and model requests are proxied -instead of forwarding the credentials into task workers. Use `R_MODEL_ENV_KEYS` -when a provider key uses a custom env var name and must be forwarded: +model runtime, including OpenRouter, Requesty, Vercel AI Gateway, OpenAI, Azure +OpenAI, Azure AI Foundry, Anthropic, Google Gemini, Moonshot, Kimi for Coding, +MiniMax, Z.AI, OpenCode, Amazon Bedrock, xAI, and GitHub Copilot. For +gateway-supported providers, credentials stay on the control plane and model +requests are proxied instead of forwarding the credentials into task workers. +Use `R_MODEL_ENV_KEYS` when a provider key uses a custom env var name and must be +forwarded: ```sh R_MODEL_ENV_KEYS=CUSTOM_PROVIDER_API_KEY