diff --git a/docs/config-zh.md b/docs/config-zh.md index 30277e2..f1c839d 100644 --- a/docs/config-zh.md +++ b/docs/config-zh.md @@ -36,7 +36,7 @@ | :----------------------- | :-------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------- | :--------------------------------------------- | | `llms[].name` | `string` | LLM 的名称 (或称 'id')。例如 `my-favorite-gemini-king`。用于在其他配置部分 (如 `api.llm`, `storage.feed.embedding_llm` 等) 引用此 LLM。 | | 是 | | `llms[].default` | `bool` | 此 LLM 是否为默认 LLM。只能有一个 LLM 是默认的。 | `false` | 否 (但如果依赖默认行为,则必须有一个为 `true`) | -| `llms[].provider` | `string` | LLM 的提供商, 可选值为 `openai`, `openrouter`, `deepseek`, `gemini`, `volc`, `siliconflow` 之一。例如 `openai`。 | | 是 | +| `llms[].provider` | `string` | LLM 的提供商, 可选值为 `openai`, `openrouter`, `requesty`, `deepseek`, `gemini`, `volc`, `siliconflow` 之一。例如 `openai`。 | | 是 | | `llms[].endpoint` | `string` | LLM 的自定义端点。例如 `https://api.openai.com/v1`。 | (提供商特定默认值) | 否 | | `llms[].api_key` | `string` | LLM 的 API 密钥。 | | 是 | | `llms[].model` | `string` | LLM 的模型。例如 `gpt-4o-mini`。如果用于生成任务 (如总结),则不能为空。如果此 LLM 被使用,则不能与 `embedding_model` 同时为空。 | | 条件性必需 | diff --git a/docs/config.md b/docs/config.md index 5230c54..1c0f674 100644 --- a/docs/config.md +++ b/docs/config.md @@ -36,7 +36,7 @@ This section defines the list of available Large Language Models. At least one L | :----------------------- | :-------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------- | :--------------------------------------------------------- | | `llms[].name` | `string` | Name (or 'id') of the LLM. E.g., `my-favorite-gemini-king`. Used to refer to this LLM in other configuration sections (e.g., `api.llm`, `storage.feed.embedding_llm`). | | Yes | | `llms[].default` | `bool` | Whether this LLM is the default LLM. Only one LLM can be the default. | `false` | No (but one must be `true` if relying on default behavior) | -| `llms[].provider` | `string` | Provider of the LLM, one of `openai`, `openrouter`, `deepseek`, `gemini`, `volc`, `siliconflow`. E.g., `openai`. | | Yes | +| `llms[].provider` | `string` | Provider of the LLM, one of `openai`, `openrouter`, `requesty`, `deepseek`, `gemini`, `volc`, `siliconflow`. E.g., `openai`. | | Yes | | `llms[].endpoint` | `string` | Custom endpoint for the LLM. E.g., `https://api.openai.com/v1`. | (Provider-specific default) | No | | `llms[].api_key` | `string` | API key for the LLM. | | Yes | | `llms[].model` | `string` | Model of the LLM. E.g., `gpt-4o-mini`. Cannot be empty if used for generation tasks (e.g., summarization). If this LLM is used, cannot be empty along with `embedding_model`. | | Conditionally Required | diff --git a/pkg/config/config.go b/pkg/config/config.go index cbfc2a4..62bfc28 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -85,7 +85,7 @@ type App struct { type LLM struct { Name string `yaml:"name,omitempty" json:"name,omitempty" desc:"The name (or call it 'id') of the LLM. e.g. my-favorite-gemini-king. It is required when api.llm is set."` Default bool `yaml:"default,omitempty" json:"default,omitempty" desc:"Whether this LLM is the default LLM. Only one LLM can be the default."` - Provider string `yaml:"provider,omitempty" json:"provider,omitempty" desc:"The provider of the LLM, one of openai, openrouter, deepseek, gemini, volc, siliconflow. e.g. openai"` + Provider string `yaml:"provider,omitempty" json:"provider,omitempty" desc:"The provider of the LLM, one of openai, openrouter, requesty, deepseek, gemini, volc, siliconflow. e.g. openai"` Endpoint string `yaml:"endpoint,omitempty" json:"endpoint,omitempty" desc:"The custom endpoint of the LLM. e.g. https://api.openai.com/v1"` APIKey string `yaml:"api_key,omitempty" json:"api_key,omitempty" desc:"The API key of the LLM. It is required when api.llm is set."` Model string `yaml:"model,omitempty" json:"model,omitempty" desc:"The model of the LLM. e.g. gpt-4o-mini. Can not be empty with embedding_model at same time when api.llm is set."` diff --git a/pkg/llm/llm.go b/pkg/llm/llm.go index 91fb21d..7b23f41 100644 --- a/pkg/llm/llm.go +++ b/pkg/llm/llm.go @@ -78,6 +78,7 @@ type ProviderType string const ( ProviderTypeOpenAI ProviderType = "openai" ProviderTypeOpenRouter ProviderType = "openrouter" + ProviderTypeRequesty ProviderType = "requesty" ProviderTypeDeepSeek ProviderType = "deepseek" ProviderTypeGemini ProviderType = "gemini" ProviderTypeVolc ProviderType = "volc" // Rename MaaS to ARK. 😄 @@ -87,6 +88,7 @@ const ( var defaultEndpoints = map[ProviderType]string{ ProviderTypeOpenAI: "https://api.openai.com/v1", ProviderTypeOpenRouter: "https://openrouter.ai/api/v1", + ProviderTypeRequesty: "https://router.requesty.ai/v1", ProviderTypeDeepSeek: "https://api.deepseek.com/v1", ProviderTypeGemini: "https://generativelanguage.googleapis.com/v1beta", ProviderTypeVolc: "https://ark.cn-beijing.volces.com/api/v3", @@ -101,7 +103,7 @@ func (c *Config) Validate() error { //nolint:cyclop switch c.Provider { case "": c.Provider = ProviderTypeOpenAI - case ProviderTypeOpenAI, ProviderTypeOpenRouter, ProviderTypeDeepSeek, + case ProviderTypeOpenAI, ProviderTypeOpenRouter, ProviderTypeRequesty, ProviderTypeDeepSeek, ProviderTypeGemini, ProviderTypeVolc, ProviderTypeSiliconFlow: default: return errors.Errorf("invalid provider: %s", c.Provider) @@ -329,7 +331,7 @@ func (f *factory) Get(name string) LLM { func (f *factory) new(c *Config) LLM { switch c.Provider { - case ProviderTypeOpenAI, ProviderTypeOpenRouter, ProviderTypeDeepSeek, ProviderTypeVolc, ProviderTypeSiliconFlow: //nolint:lll + case ProviderTypeOpenAI, ProviderTypeOpenRouter, ProviderTypeRequesty, ProviderTypeDeepSeek, ProviderTypeVolc, ProviderTypeSiliconFlow: //nolint:lll return newCached(newOpenAI(c), f.Dependencies().KVStorage) case ProviderTypeGemini: