mirror of
https://github.com/bytedance/deer-flow.git
synced 2026-10-26 05:06:59 +00:00
feat(wizard): add Opper as an LLM provider (#6399)
* feat(wizard): add Opper as an LLM provider Opper (https://opper.ai) is an EU-hosted AI gateway: 700+ models from 50+ providers behind one OpenAI-compatible API and one key. This adds it to the setup wizard's LLM_PROVIDERS next to OpenRouter, with the same shape: langchain_openai:ChatOpenAI pointed at https://api.opper.ai/v3/compat, env var OPPER_API_KEY. Models use Opper's bare model ids: claude-sonnet-4-6 (default), gpt-5.5, gemini-3.8-flash and gpt-5.4-mini. Because the GPT ids are bare, langchain-openai drops the 0.7 temperature for them the same way it does for direct OpenAI gpt-5 models. Checked: python -m py_compile scripts/wizard/providers.py, and each model id against Opper's public model list (GET https://api.opper.ai/v3/models). Not run locally: make lint and make test. Disclosure: Opper is my startup. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * docs: add Opper to the config example and READMEs Add an Opper model example next to the other OpenAI-compatible gateways, as requested in review: - config.example.yaml: commented opper-claude-sonnet-4-6 block after the other gateway examples (ChatOpenAI + base_url, OPPER_API_KEY) - README.md and the translated READMEs: the same entry in the manual model configuration examples, after OpenRouter - .env.example and backend/docs/CONFIGURATION.md: OPPER_API_KEY, in the shape of the Novita lines claude-sonnet-4-6 is a pooled id in Opper's public catalogue (GET https://api.opper.ai/v3/models). config.example.yaml still parses with yaml.safe_load; config_version is unchanged because the schema is. Disclosure: Opper is my startup. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
a4427625cf
commit
f154cfd221
@ -40,6 +40,7 @@ UNBROWSE_API_KEY=your-unbrowse-api-key
|
||||
# DEEPSEEK_API_KEY=your-deepseek-api-key
|
||||
# NOVITA_API_KEY=your-novita-api-key # OpenAI-compatible, see https://novita.ai
|
||||
# MINIMAX_API_KEY=your-minimax-api-key # OpenAI-compatible, see https://platform.minimax.io
|
||||
# OPPER_API_KEY=your-opper-api-key # OpenAI-compatible, see https://opper.ai
|
||||
# OpenAI-compatible Images API (used by the image-generation skill)
|
||||
# IMAGE_GENERATION_PROVIDER=openai # openai-compatible is also accepted
|
||||
# IMAGE_GENERATION_API_KEY=your-image-generation-api-key
|
||||
|
||||
@ -268,6 +268,13 @@ For MindIE XML tool calls, see the
|
||||
api_key: $OPENROUTER_API_KEY
|
||||
base_url: https://openrouter.ai/api/v1
|
||||
|
||||
- name: opper-claude-sonnet-4-6
|
||||
display_name: Claude Sonnet 4.6 (Opper)
|
||||
use: langchain_openai:ChatOpenAI
|
||||
model: claude-sonnet-4-6
|
||||
api_key: $OPPER_API_KEY
|
||||
base_url: https://api.opper.ai/v3/compat
|
||||
|
||||
- name: gpt-5-responses
|
||||
display_name: GPT-5 (Responses API)
|
||||
use: langchain_openai:ChatOpenAI
|
||||
|
||||
@ -149,6 +149,13 @@ Ce prompt est destiné aux coding agents. Il leur demande de cloner le dépôt s
|
||||
api_key: $OPENROUTER_API_KEY
|
||||
base_url: https://openrouter.ai/api/v1
|
||||
|
||||
- name: opper-claude-sonnet-4-6
|
||||
display_name: Claude Sonnet 4.6 (Opper)
|
||||
use: langchain_openai:ChatOpenAI
|
||||
model: claude-sonnet-4-6
|
||||
api_key: $OPPER_API_KEY
|
||||
base_url: https://api.opper.ai/v3/compat
|
||||
|
||||
- name: gpt-5-responses
|
||||
display_name: GPT-5 (Responses API)
|
||||
use: langchain_openai:ChatOpenAI
|
||||
|
||||
@ -140,6 +140,13 @@ DeerFlow がまだ clone されていなければ先に clone してから、htt
|
||||
api_key: $OPENROUTER_API_KEY
|
||||
base_url: https://openrouter.ai/api/v1
|
||||
|
||||
- name: opper-claude-sonnet-4-6
|
||||
display_name: Claude Sonnet 4.6 (Opper)
|
||||
use: langchain_openai:ChatOpenAI
|
||||
model: claude-sonnet-4-6
|
||||
api_key: $OPPER_API_KEY
|
||||
base_url: https://api.opper.ai/v3/compat
|
||||
|
||||
- name: gpt-5-responses
|
||||
display_name: GPT-5 (Responses API)
|
||||
use: langchain_openai:ChatOpenAI
|
||||
|
||||
@ -200,6 +200,13 @@ Para o endpoint oficial do Gemini compatível com OpenAI, do Google, use o [perf
|
||||
api_key: $OPENROUTER_API_KEY
|
||||
base_url: https://openrouter.ai/api/v1
|
||||
|
||||
- name: opper-claude-sonnet-4-6
|
||||
display_name: Claude Sonnet 4.6 (Opper)
|
||||
use: langchain_openai:ChatOpenAI
|
||||
model: claude-sonnet-4-6
|
||||
api_key: $OPPER_API_KEY
|
||||
base_url: https://api.opper.ai/v3/compat
|
||||
|
||||
- name: gpt-5-responses
|
||||
display_name: GPT-5 (Responses API)
|
||||
use: langchain_openai:ChatOpenAI
|
||||
|
||||
@ -152,6 +152,13 @@ DeerFlow интегрирован с инструментарием для ум
|
||||
api_key: $OPENROUTER_API_KEY
|
||||
base_url: https://openrouter.ai/api/v1
|
||||
|
||||
- name: opper-claude-sonnet-4-6
|
||||
display_name: Claude Sonnet 4.6 (Opper)
|
||||
use: langchain_openai:ChatOpenAI
|
||||
model: claude-sonnet-4-6
|
||||
api_key: $OPPER_API_KEY
|
||||
base_url: https://api.opper.ai/v3/compat
|
||||
|
||||
- name: gpt-5-responses
|
||||
display_name: GPT-5 (Responses API)
|
||||
use: langchain_openai:ChatOpenAI
|
||||
|
||||
@ -152,6 +152,13 @@ DeerFlow 新近集成了 BytePlus 自研的智能搜索与抓取工具集——[
|
||||
api_key: $OPENROUTER_API_KEY
|
||||
base_url: https://openrouter.ai/api/v1
|
||||
|
||||
- name: opper-claude-sonnet-4-6
|
||||
display_name: Claude Sonnet 4.6 (Opper)
|
||||
use: langchain_openai:ChatOpenAI
|
||||
model: claude-sonnet-4-6
|
||||
api_key: $OPPER_API_KEY
|
||||
base_url: https://api.opper.ai/v3/compat
|
||||
|
||||
- name: gpt-5-responses
|
||||
display_name: GPT-5 (Responses API)
|
||||
use: langchain_openai:ChatOpenAI
|
||||
|
||||
@ -1405,6 +1405,7 @@ models:
|
||||
- `DEEPSEEK_API_KEY` - DeepSeek API key
|
||||
- `MIMO_API_KEY` - Xiaomi MiMo API key
|
||||
- `NOVITA_API_KEY` - Novita API key (OpenAI-compatible endpoint)
|
||||
- `OPPER_API_KEY` - Opper API key (OpenAI-compatible endpoint)
|
||||
- `TAVILY_API_KEY` - Tavily search API key
|
||||
- `BRAVE_SEARCH_API_KEY` - Brave Search API key for `web_search` and `image_search`
|
||||
- `SERPER_API_KEY` - Serper (Google Search/Images API) key for `web_search` and `image_search`
|
||||
|
||||
@ -759,6 +759,22 @@ models:
|
||||
# thinking:
|
||||
# type: disabled
|
||||
|
||||
# Example: Opper (OpenAI-compatible)
|
||||
# Opper is an EU-hosted AI gateway: 700+ models from 50+ providers behind one
|
||||
# OpenAI-compatible API, so it uses the same ChatOpenAI + base_url pattern as
|
||||
# other OpenAI-compatible gateways. Model ids are bare names such as
|
||||
# claude-sonnet-4-6; browse them at https://api.opper.ai/v3/models. See https://opper.ai
|
||||
# - name: opper-claude-sonnet-4-6
|
||||
# display_name: Claude Sonnet 4.6 (Opper)
|
||||
# use: langchain_openai:ChatOpenAI
|
||||
# model: claude-sonnet-4-6
|
||||
# api_key: $OPPER_API_KEY
|
||||
# base_url: https://api.opper.ai/v3/compat
|
||||
# request_timeout: 600.0
|
||||
# max_retries: 2
|
||||
# max_tokens: 8192
|
||||
# temperature: 0.7
|
||||
|
||||
# Example: vLLM 0.19.0 (OpenAI-compatible, with reasoning toggle)
|
||||
# DeerFlow's vLLM provider preserves vLLM reasoning across tool-call turns and
|
||||
# toggles Qwen-style reasoning by writing
|
||||
|
||||
@ -495,6 +495,23 @@ LLM_PROVIDERS: list[LLMProvider] = [
|
||||
"temperature": 0.7,
|
||||
},
|
||||
),
|
||||
LLMProvider(
|
||||
name="opper",
|
||||
display_name="Opper",
|
||||
description="EU-hosted AI gateway, 700+ models behind one OpenAI-compatible API",
|
||||
use="langchain_openai:ChatOpenAI",
|
||||
models=["claude-sonnet-4-6", "gpt-5.5", "gemini-3.8-flash", "gpt-5.4-mini"],
|
||||
default_model="claude-sonnet-4-6",
|
||||
env_var="OPPER_API_KEY",
|
||||
package="langchain-openai",
|
||||
extra_config={
|
||||
"base_url": "https://api.opper.ai/v3/compat",
|
||||
"request_timeout": 600.0,
|
||||
"max_retries": 2,
|
||||
"max_tokens": 8192,
|
||||
"temperature": 0.7,
|
||||
},
|
||||
),
|
||||
LLMProvider(
|
||||
name="vllm",
|
||||
display_name="vLLM",
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user