Skip to content

feat: add Requesty as a model provider#1599

Open
Thibaultjaigu wants to merge 1 commit into
MODSetter:devfrom
Thibaultjaigu:feat/requesty-provider
Open

feat: add Requesty as a model provider#1599
Thibaultjaigu wants to merge 1 commit into
MODSetter:devfrom
Thibaultjaigu:feat/requesty-provider

Conversation

@Thibaultjaigu

@Thibaultjaigu Thibaultjaigu commented Jul 13, 2026

Copy link
Copy Markdown

Summary

Adds Requesty — an OpenAI-compatible LLM router — as a model provider, mirroring the existing OpenRouter integration. Requesty exposes 400+ models through one endpoint, addressed as provider/model.

Targets dev per CONTRIBUTING.md.

Changes

Backend

  • app/services/requesty_model_normalizer.py — normalizes Requesty's /v1/models catalogue. Requesty's payload differs from OpenRouter's: capabilities are flat booleans (supports_tool_calling / supports_vision / supports_image_generation) rather than an architecture block plus a supported_parameters array, and context size is context_window (not context_length). This module maps those onto the same normalized shape the rest of the backend consumes, mirroring openrouter_model_normalizer.py.
  • app/services/provider_registry.py — Requesty ProviderSpec (OpenAI-compatible, base URL https://router.requesty.ai/v1, REQUESTY_API_KEY bearer auth)
  • app/services/model_connection_service.py — key verification branch + async live model discovery
  • app/services/quality_score.py — Requesty score entry (mirrors OpenRouter)
  • tests/unit/services/test_requesty_model_normalizer.py — unit tests mirroring the OpenRouter normalizer coverage

Frontend

  • Requesty provider icon + registration, metadata entry (with defaultBaseUrl), and base-url hint in the connect form

Testing

  • The 5 normalizer unit tests pass.
  • Verified live against https://router.requesty.ai/v1/models: the normalizer processed the real 605-model catalogue and produced 512 chat models (370 vision-capable), correctly reading context_window and the supports_* booleans.
  • ruff check clean on the new Python files.

The provider icon is a neutral monochrome currentColor placeholder — happy to swap in an official Requesty brand asset if you prefer.

I work at Requesty. This mirrors the existing OpenRouter provider as closely as possible. Happy to adjust or close it if it's not a fit.

High-level PR Summary

This PR integrates Requesty, an OpenAI-compatible LLM router providing access to 400+ models, as a new model provider. The implementation closely mirrors the existing OpenRouter integration, adding backend model normalization logic to handle Requesty's specific API schema (flat boolean capabilities like supports_tool_calling and supports_vision, and context_window sizing), along with provider registration, authentication, and model discovery. Frontend changes include adding the Requesty provider icon, metadata configuration with default base URL, and UI hints for the connection form. The normalizer filters for chat models with tool-calling support and sufficient context length (≥100k tokens), excluding certain providers like Amazon.

⏱️ Estimated Review Time: 15-30 minutes

💡 Review Order Suggestion
Order File Path
1 surfsense_backend/app/services/requesty_model_normalizer.py
2 surfsense_backend/tests/unit/services/test_requesty_model_normalizer.py
3 surfsense_backend/app/services/provider_registry.py
4 surfsense_backend/app/services/model_connection_service.py
5 surfsense_backend/app/services/quality_score.py
6 surfsense_web/components/icons/providers/requesty.svg
7 surfsense_web/components/icons/providers/index.ts
8 surfsense_web/lib/provider-icons.tsx
9 surfsense_web/components/settings/model-connections/provider-metadata.tsx
10 surfsense_web/components/settings/model-connections/default-connect-form.tsx

Need help? Join our Discord

Add Requesty (https://requesty.ai), an OpenAI-compatible LLM router, as a
model provider by mirroring the existing OpenRouter integration.

Backend:
- app/services/requesty_model_normalizer.py: normalizes Requesty's /v1/models
  catalogue, mapping its flat capability booleans (supports_tool_calling/
  supports_vision/supports_image_generation) and context_window field onto the
  shared normalized shape (Requesty differs from OpenRouter's architecture +
  supported_parameters + context_length layout)
- provider_registry.py: Requesty ProviderSpec (OpenAI-compatible, base URL
  https://router.requesty.ai/v1, REQUESTY_API_KEY bearer auth)
- model_connection_service.py: key verification + live model discovery
- quality_score.py: Requesty score entry
- unit tests mirroring the OpenRouter normalizer coverage

Frontend:
- Requesty provider icon + registration, metadata entry, and base-url hint

Signed-off-by: Thibault Jaigu <thibault.jaigu@gmail.com>
@coderabbitai

coderabbitai Bot commented Jul 13, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 910695c6-1c4c-4fc9-a885-432551c3e634

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@vercel

vercel Bot commented Jul 13, 2026

Copy link
Copy Markdown

@Thibaultjaigu is attempting to deploy a commit to the Rohan Verma's projects Team on Vercel.

A member of the Team first needs to authorize it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant