feat:add several mainstream model providers
This commit is contained in:
@@ -24,7 +24,7 @@
|
||||
- 模型参数(parameters):包括 base_url、api_key、provider 等
|
||||
- 租户ID(tenant_id):建议使用小于10000的租户ID,避免冲突
|
||||
|
||||
**支持的服务商(provider)**:`generic`(自定义)、`openai`、`aliyun`、`zhipu`、`volcengine`、`hunyuan`、`deepseek`、`minimax`、`mimo`、`siliconflow`、`jina`、`openrouter`、`gemini`
|
||||
**支持的服务商(provider)**:`generic`(自定义)、`openai`、`aliyun`、`zhipu`、`volcengine`、`hunyuan`、`deepseek`、`minimax`、`mimo`、`siliconflow`、`jina`、`openrouter`、`gemini`、`modelscope`、`moonshot`、`qianfan`、`qiniu`、`longcat`、`gpustack`
|
||||
|
||||
### 2. 执行 SQL 插入语句
|
||||
|
||||
|
||||
+27
-20
@@ -17,21 +17,27 @@ WeKnora 支持多种主流 AI 模型服务商,在创建模型时可通过 `pro
|
||||
|
||||
### 支持的服务商列表
|
||||
|
||||
| 服务商标识 | 名称 | 支持的模型类型 |
|
||||
| -------------- | ------------------ | ------------------------------- |
|
||||
| `generic` | 自定义API OpenAI 兼容 | Chat, Embedding, Rerank, VLLM |
|
||||
| `aliyun` | 阿里云 DashScope | Chat, Embedding, Rerank, VLLM |
|
||||
| `zhipu` | 智谱 AI | Chat, Embedding, Rerank, VLLM |
|
||||
| `volcengine` | 火山引擎 | Chat, Embedding, VLLM |
|
||||
| `hunyuan` | 腾讯混元 | Chat, Embedding, VLLM |
|
||||
| `deepseek` | DeepSeek | Chat |
|
||||
| `minimax` | MiniMax | Chat, Embedding, VLLM |
|
||||
| `mimo` | 小米 Mimo | Chat |
|
||||
| `siliconflow` | 硅基流动 | Chat, Embedding, Rerank |
|
||||
| `jina` | Jina AI | Embedding, Rerank |
|
||||
| `openrouter` | OpenRouter | Chat |
|
||||
| `openai` | OpenAI | Chat, Embedding, VLLM |
|
||||
| `gemini` | Google Gemini | Chat, Embedding, VLLM |
|
||||
| 服务商标识 | 名称 | 支持的模型类型 |
|
||||
| -------------- | ---------------------------- | ------------------------------- |
|
||||
| `generic` | 自定义 (OpenAI兼容接口) | Chat, Embedding, Rerank, VLLM |
|
||||
| `openai` | OpenAI | Chat, Embedding, Rerank, VLLM |
|
||||
| `aliyun` | 阿里云 DashScope | Chat, Embedding, Rerank, VLLM |
|
||||
| `zhipu` | 智谱 BigModel | Chat, Embedding, Rerank, VLLM |
|
||||
| `volcengine` | 火山引擎 Volcengine | Chat, Embedding, VLLM |
|
||||
| `hunyuan` | 腾讯混元 Hunyuan | Chat, Embedding |
|
||||
| `deepseek` | DeepSeek | Chat |
|
||||
| `minimax` | MiniMax | Chat |
|
||||
| `mimo` | 小米 MiMo | Chat |
|
||||
| `siliconflow` | 硅基流动 SiliconFlow | Chat, Embedding, Rerank, VLLM |
|
||||
| `jina` | Jina | Embedding, Rerank |
|
||||
| `openrouter` | OpenRouter | Chat, VLLM |
|
||||
| `gemini` | Google Gemini | Chat |
|
||||
| `modelscope` | 魔搭 ModelScope | Chat, Embedding, VLLM |
|
||||
| `moonshot` | 月之暗面 Moonshot | Chat, VLLM |
|
||||
| `qianfan` | 百度千帆 Baidu Cloud | Chat, Embedding, Rerank, VLLM |
|
||||
| `qiniu` | 七牛云 Qiniu | Chat |
|
||||
| `longcat` | LongCat AI | Chat |
|
||||
| `gpustack` | GPUStack | Chat, Embedding, Rerank, VLLM |
|
||||
|
||||
## GET `/models/providers` - 获取模型服务商列表
|
||||
|
||||
@@ -64,7 +70,7 @@ curl --location 'http://localhost:8080/api/v1/models/providers?model_type=embedd
|
||||
{
|
||||
"value": "aliyun",
|
||||
"label": "阿里云 DashScope",
|
||||
"description": "阿里云百炼大模型服务",
|
||||
"description": "qwen-plus, tongyi-embedding-vision-plus, qwen3-rerank, etc.",
|
||||
"defaultUrls": {
|
||||
"chat": "https://dashscope.aliyuncs.com/compatible-mode/v1",
|
||||
"embedding": "https://dashscope.aliyuncs.com/compatible-mode/v1",
|
||||
@@ -74,13 +80,14 @@ curl --location 'http://localhost:8080/api/v1/models/providers?model_type=embedd
|
||||
},
|
||||
{
|
||||
"value": "zhipu",
|
||||
"label": "智谱 AI",
|
||||
"description": "智谱清言大模型",
|
||||
"label": "智谱 BigModel",
|
||||
"description": "glm-4.7, embedding-3, rerank, etc.",
|
||||
"defaultUrls": {
|
||||
"chat": "https://open.bigmodel.cn/api/paas/v4",
|
||||
"embedding": "https://open.bigmodel.cn/api/paas/v4/embeddings"
|
||||
"embedding": "https://open.bigmodel.cn/api/paas/v4/embeddings",
|
||||
"rerank": "https://open.bigmodel.cn/api/paas/v4/rerank"
|
||||
},
|
||||
"modelTypes": ["chat", "embedding", "vllm"]
|
||||
"modelTypes": ["chat", "embedding", "rerank", "vllm"]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1654,7 +1654,7 @@ export default {
|
||||
description: 'qwen-plus, tongyi-embedding-vision-plus, qwen3-rerank, etc.',
|
||||
},
|
||||
zhipu: {
|
||||
label: 'Zhipu AI',
|
||||
label: 'Zhipu BigModel',
|
||||
description: 'glm-4.7, embedding-3, rerank, etc.',
|
||||
},
|
||||
openrouter: {
|
||||
@@ -1662,7 +1662,7 @@ export default {
|
||||
description: 'openai/gpt-5.2-chat, google/gemini-3-flash-preview, etc.',
|
||||
},
|
||||
generic: {
|
||||
label: 'Custom API',
|
||||
label: 'Custom (OpenAI-compatible)',
|
||||
description: 'Generic API endpoint',
|
||||
},
|
||||
siliconflow: {
|
||||
@@ -1670,7 +1670,7 @@ export default {
|
||||
description: 'deepseek-ai/DeepSeek-V3.1, etc.',
|
||||
},
|
||||
jina: {
|
||||
label: 'Jina AI',
|
||||
label: 'Jina',
|
||||
description: 'jina-clip-v1, jina-embeddings-v2-base-zh, etc.',
|
||||
},
|
||||
volcengine: {
|
||||
@@ -1699,7 +1699,27 @@ export default {
|
||||
},
|
||||
gpustack: {
|
||||
label: 'GPUStack',
|
||||
description: 'Self-hosted GPU cluster platform, OpenAI-compatible API',
|
||||
description: 'Choose your deployed model on GPUStack',
|
||||
},
|
||||
modelscope: {
|
||||
label: 'ModelScope',
|
||||
description: 'Qwen/Qwen3-8B, Qwen/Qwen3-Embedding-8B, etc.',
|
||||
},
|
||||
qiniu: {
|
||||
label: 'Qiniu Cloud',
|
||||
description: 'deepseek/deepseek-v3.2-251201, z-ai/glm-4.7, etc.',
|
||||
},
|
||||
moonshot: {
|
||||
label: 'Moonshot',
|
||||
description: 'kimi-k2-turbo-preview, moonshot-v1-8k-vision-preview, etc.',
|
||||
},
|
||||
qianfan: {
|
||||
label: 'Baidu Qianfan',
|
||||
description: 'ernie-5.0-thinking-preview, embedding-v1, bce-reranker-base, etc.',
|
||||
},
|
||||
longcat: {
|
||||
label: 'LongCat AI',
|
||||
description: 'LongCat-Flash-Chat, LongCat-Flash-Thinking, etc.',
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
@@ -983,6 +983,87 @@ export default {
|
||||
baseUrlEmpty: "Base URL은 비워둘 수 없습니다",
|
||||
baseUrlInvalid: "Base URL 형식이 올바르지 않습니다. 유효한 URL을 입력해주세요",
|
||||
},
|
||||
// Provider related translations
|
||||
providerLabel: "제공업체",
|
||||
providerPlaceholder: "모델 제공업체 선택",
|
||||
providers: {
|
||||
openai: {
|
||||
label: "OpenAI",
|
||||
description: "gpt-5.2, gpt-5-mini 등",
|
||||
},
|
||||
aliyun: {
|
||||
label: "Aliyun DashScope",
|
||||
description: "qwen-plus, tongyi-embedding-vision-plus, qwen3-rerank 등",
|
||||
},
|
||||
zhipu: {
|
||||
label: "Zhipu BigModel",
|
||||
description: "glm-4.7, embedding-3, rerank, etc.",
|
||||
},
|
||||
openrouter: {
|
||||
label: "OpenRouter",
|
||||
description: "openai/gpt-5.2-chat, google/gemini-3-flash-preview 등",
|
||||
},
|
||||
generic: {
|
||||
label: "사용자 정의 (OpenAI 호환)",
|
||||
description: "Generic API endpoint",
|
||||
},
|
||||
siliconflow: {
|
||||
label: "SiliconFlow",
|
||||
description: "deepseek-ai/DeepSeek-V3.1 등",
|
||||
},
|
||||
jina: {
|
||||
label: "Jina",
|
||||
description: "jina-clip-v1, jina-embeddings-v2-base-zh, etc.",
|
||||
},
|
||||
volcengine: {
|
||||
label: "Volcengine",
|
||||
description: "doubao-1-5-pro-32k-250115, doubao-embedding-vision-250615 등",
|
||||
},
|
||||
deepseek: {
|
||||
label: "DeepSeek",
|
||||
description: "deepseek-chat, deepseek-reasoner 등",
|
||||
},
|
||||
hunyuan: {
|
||||
label: "Hunyuan",
|
||||
description: "hunyuan-pro, hunyuan-standard, hunyuan-embedding 등",
|
||||
},
|
||||
minimax: {
|
||||
label: "MiniMax",
|
||||
description: "MiniMax-M2.1, MiniMax-M2.1-lightning 등",
|
||||
},
|
||||
mimo: {
|
||||
label: "MiMo",
|
||||
description: "mimo-v2-flash",
|
||||
},
|
||||
gemini: {
|
||||
label: "Google Gemini",
|
||||
description: "gemini-3-flash-preview, gemini-2.5-pro 등",
|
||||
},
|
||||
gpustack: {
|
||||
label: "GPUStack",
|
||||
description: "Choose your deployed model on GPUStack",
|
||||
},
|
||||
modelscope: {
|
||||
label: "ModelScope",
|
||||
description: "Qwen/Qwen3-8B, Qwen/Qwen3-Embedding-8B, etc.",
|
||||
},
|
||||
qiniu: {
|
||||
label: "Qiniu Cloud",
|
||||
description: "deepseek/deepseek-v3.2-251201, z-ai/glm-4.7, etc.",
|
||||
},
|
||||
moonshot: {
|
||||
label: "Moonshot",
|
||||
description: "kimi-k2-turbo-preview, moonshot-v1-8k-vision-preview, etc.",
|
||||
},
|
||||
qianfan: {
|
||||
label: "Baidu Qianfan",
|
||||
description: "ernie-5.0-thinking-preview, embedding-v1, bce-reranker-base, etc.",
|
||||
},
|
||||
longcat: {
|
||||
label: "LongCat AI",
|
||||
description: "LongCat-Flash-Chat, LongCat-Flash-Thinking, etc.",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
language: {
|
||||
@@ -1155,9 +1236,9 @@ export default {
|
||||
messages: {
|
||||
deleted: "삭제됨",
|
||||
deleteFailed: "삭제 실패",
|
||||
file: "파일",
|
||||
knowledgeBase: "지식베이스",
|
||||
noResult: "결과 없음",
|
||||
file: "파일",
|
||||
knowledgeBase: "지식베이스",
|
||||
noResult: "결과 없음",
|
||||
},
|
||||
features: {
|
||||
knowledgeGraph: "지식 그래프 활성화됨",
|
||||
|
||||
@@ -904,7 +904,7 @@ export default {
|
||||
description: 'qwen-plus, tongyi-embedding-vision-plus, qwen3-rerank, etc.',
|
||||
},
|
||||
zhipu: {
|
||||
label: 'Zhipu AI',
|
||||
label: 'Zhipu BigModel',
|
||||
description: 'glm-4.7, embedding-3, rerank, etc.',
|
||||
},
|
||||
openrouter: {
|
||||
@@ -912,7 +912,7 @@ export default {
|
||||
description: 'openai/gpt-5.2-chat, google/gemini-3-flash-preview, etc.',
|
||||
},
|
||||
generic: {
|
||||
label: 'Пользовательский API',
|
||||
label: 'Пользовательский (OpenAI-совместимый)',
|
||||
description: 'Generic API endpoint',
|
||||
},
|
||||
siliconflow: {
|
||||
@@ -920,7 +920,7 @@ export default {
|
||||
description: 'deepseek-ai/DeepSeek-V3.1, etc.',
|
||||
},
|
||||
jina: {
|
||||
label: 'Jina AI',
|
||||
label: 'Jina',
|
||||
description: 'jina-clip-v1, jina-embeddings-v2-base-zh, etc.',
|
||||
},
|
||||
volcengine: {
|
||||
@@ -949,7 +949,27 @@ export default {
|
||||
},
|
||||
gpustack: {
|
||||
label: 'GPUStack',
|
||||
description: 'Приватная платформа GPU-кластеров, OpenAI-совместимый API',
|
||||
description: 'Choose your deployed model on GPUStack',
|
||||
},
|
||||
modelscope: {
|
||||
label: 'ModelScope',
|
||||
description: 'Qwen/Qwen3-8B, Qwen/Qwen3-Embedding-8B, etc.',
|
||||
},
|
||||
qiniu: {
|
||||
label: 'Qiniu Cloud',
|
||||
description: 'deepseek/deepseek-v3.2-251201, z-ai/glm-4.7, etc.',
|
||||
},
|
||||
moonshot: {
|
||||
label: 'Moonshot',
|
||||
description: 'kimi-k2-turbo-preview, moonshot-v1-8k-vision-preview, etc.',
|
||||
},
|
||||
qianfan: {
|
||||
label: 'Baidu Qianfan',
|
||||
description: 'ernie-5.0-thinking-preview, embedding-v1, bce-reranker-base, etc.',
|
||||
},
|
||||
longcat: {
|
||||
label: 'LongCat AI',
|
||||
description: 'LongCat-Flash-Chat, LongCat-Flash-Thinking, etc.',
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
@@ -1181,43 +1181,43 @@ export default {
|
||||
providers: {
|
||||
openai: {
|
||||
label: "OpenAI",
|
||||
description: "OpenAI 官方 API",
|
||||
description: "gpt-5.2, gpt-5-mini, etc.",
|
||||
},
|
||||
aliyun: {
|
||||
label: "阿里云 DashScope",
|
||||
description: "支持 Qwen、DeepSeek 等模型",
|
||||
description: "qwen-plus, tongyi-embedding-vision-plus, qwen3-rerank, etc.",
|
||||
},
|
||||
zhipu: {
|
||||
label: "智谱 AI",
|
||||
description: "支持 GLM-4 系列模型",
|
||||
label: "智谱 BigModel",
|
||||
description: "glm-4.7, embedding-3, rerank, etc.",
|
||||
},
|
||||
openrouter: {
|
||||
label: "OpenRouter",
|
||||
description: "多模型聚合平台",
|
||||
description: "openai/gpt-5.2-chat, google/gemini-3-flash-preview, etc.",
|
||||
},
|
||||
generic: {
|
||||
label: "自定义 API",
|
||||
description: "OpenAI 兼容的自定义端点",
|
||||
label: "自定义 (OpenAI兼容接口)",
|
||||
description: "Generic API endpoint (OpenAI-compatible)",
|
||||
},
|
||||
siliconflow: {
|
||||
label: "SiliconFlow",
|
||||
description: "硅基流动,支持多种模型",
|
||||
label: "硅基流动 SiliconFlow",
|
||||
description: "deepseek-ai/DeepSeek-V3.1, etc.",
|
||||
},
|
||||
jina: {
|
||||
label: "Jina AI",
|
||||
description: "专注于 Embedding 和 Rerank",
|
||||
label: "Jina",
|
||||
description: "jina-clip-v1, jina-embeddings-v2-base-zh, etc.",
|
||||
},
|
||||
volcengine: {
|
||||
label: "火山引擎",
|
||||
description: "doubao-1-5-pro-32k, doubao-embedding-vision 等",
|
||||
label: "火山引擎 Volcengine",
|
||||
description: "doubao-1-5-pro-32k-250115, doubao-embedding-vision-250615, etc.",
|
||||
},
|
||||
deepseek: {
|
||||
label: "DeepSeek",
|
||||
description: "deepseek-chat, deepseek-reasoner 等",
|
||||
},
|
||||
hunyuan: {
|
||||
label: "腾讯混元",
|
||||
description: "hunyuan-pro, hunyuan-standard, hunyuan-embedding 等",
|
||||
label: "腾讯混元 Hunyuan",
|
||||
description: "hunyuan-pro, hunyuan-standard, hunyuan-embedding, etc.",
|
||||
},
|
||||
minimax: {
|
||||
label: "MiniMax",
|
||||
@@ -1233,7 +1233,27 @@ export default {
|
||||
},
|
||||
gpustack: {
|
||||
label: "GPUStack",
|
||||
description: "私有化 GPU 集群部署平台,OpenAI 兼容 API",
|
||||
description: "Choose your deployed model on GPUStack",
|
||||
},
|
||||
modelscope: {
|
||||
label: "魔搭 ModelScope",
|
||||
description: "Qwen/Qwen3-8B, Qwen/Qwen3-Embedding-8B, etc.",
|
||||
},
|
||||
qiniu: {
|
||||
label: "七牛云 Qiniu",
|
||||
description: "deepseek/deepseek-v3.2-251201, z-ai/glm-4.7, etc.",
|
||||
},
|
||||
moonshot: {
|
||||
label: "月之暗面 Moonshot",
|
||||
description: "kimi-k2-turbo-preview, moonshot-v1-8k-vision-preview, etc.",
|
||||
},
|
||||
qianfan: {
|
||||
label: "百度千帆 Baidu Cloud",
|
||||
description: "ernie-5.0-thinking-preview, embedding-v1, bce-reranker-base, etc.",
|
||||
},
|
||||
longcat: {
|
||||
label: "LongCat AI",
|
||||
description: "LongCat-Flash-Chat, LongCat-Flash-Thinking, etc.",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -17,8 +17,8 @@ func init() {
|
||||
func (p *GenericProvider) Info() ProviderInfo {
|
||||
return ProviderInfo{
|
||||
Name: ProviderGeneric,
|
||||
DisplayName: "自定义 (OpenAI格式兼容接口)",
|
||||
Description: "Generic API endpoint",
|
||||
DisplayName: "自定义 (OpenAI兼容接口)",
|
||||
Description: "Generic API endpoint (OpenAI-compatible)",
|
||||
DefaultURLs: map[types.ModelType]string{}, // 需要用户自行配置填写
|
||||
ModelTypes: []types.ModelType{
|
||||
types.ModelTypeKnowledgeQA,
|
||||
|
||||
@@ -8,9 +8,9 @@ import (
|
||||
|
||||
const (
|
||||
// GPUStackBaseURL GPUStack API BaseURL (OpenAI 兼容模式)
|
||||
GPUStackBaseURL = "http://your_gpustack_server_url/v1-openai"
|
||||
GPUStackEmbeddingBaseURL = "http://your_gpustack_server_url/v1-openai/embeddings"
|
||||
GPUStackRerankBaseURL = "http://your_gpustack_server_url/v1/rerank"
|
||||
GPUStackBaseURL = "http://your_gpustack_server_url/v1-openai"
|
||||
// GPUStackRerankBaseURL GPUStack Rerank API 虽然兼容OpenAI,但路径不同 (/v1/rerank 而非 /v1-openai/rerank)
|
||||
GPUStackRerankBaseURL = "http://your_gpustack_server_url/v1"
|
||||
)
|
||||
|
||||
// GPUStackProvider 实现 GPUStack 的 Provider 接口
|
||||
@@ -28,7 +28,7 @@ func (p *GPUStackProvider) Info() ProviderInfo {
|
||||
Description: "Choose your deployed model on GPUStack",
|
||||
DefaultURLs: map[types.ModelType]string{
|
||||
types.ModelTypeKnowledgeQA: GPUStackBaseURL,
|
||||
types.ModelTypeEmbedding: GPUStackEmbeddingBaseURL,
|
||||
types.ModelTypeEmbedding: GPUStackBaseURL,
|
||||
types.ModelTypeRerank: GPUStackRerankBaseURL,
|
||||
types.ModelTypeVLLM: GPUStackBaseURL,
|
||||
},
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
package provider
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/Tencent/WeKnora/internal/types"
|
||||
)
|
||||
|
||||
const (
|
||||
LongCatBaseURL = "https://api.longcat.chat/openai/v1"
|
||||
)
|
||||
|
||||
// LongCatProvider 实现 LongCat AI 的 Provider 接口
|
||||
type LongCatProvider struct{}
|
||||
|
||||
func init() {
|
||||
Register(&LongCatProvider{})
|
||||
}
|
||||
|
||||
// Info 返回 LongCat provider 的元数据
|
||||
func (p *LongCatProvider) Info() ProviderInfo {
|
||||
return ProviderInfo{
|
||||
Name: ProviderLongCat,
|
||||
DisplayName: "LongCat AI",
|
||||
Description: "LongCat-Flash-Chat, LongCat-Flash-Thinking, etc.",
|
||||
DefaultURLs: map[types.ModelType]string{
|
||||
types.ModelTypeKnowledgeQA: LongCatBaseURL,
|
||||
},
|
||||
ModelTypes: []types.ModelType{
|
||||
types.ModelTypeKnowledgeQA,
|
||||
},
|
||||
RequiresAuth: true,
|
||||
}
|
||||
}
|
||||
|
||||
// ValidateConfig 验证 LongCat provider 配置
|
||||
func (p *LongCatProvider) ValidateConfig(config *Config) error {
|
||||
if config.BaseURL == "" {
|
||||
return fmt.Errorf("base URL is required for LongCat provider")
|
||||
}
|
||||
if config.APIKey == "" {
|
||||
return fmt.Errorf("API key is required for LongCat provider")
|
||||
}
|
||||
if config.ModelName == "" {
|
||||
return fmt.Errorf("model name is required")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
package provider
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/Tencent/WeKnora/internal/types"
|
||||
)
|
||||
|
||||
const (
|
||||
// ModelScopeBaseURL ModelScope API BaseURL (OpenAI 兼容模式)
|
||||
ModelScopeBaseURL = "https://api-inference.modelscope.cn/v1"
|
||||
)
|
||||
|
||||
// ModelScopeProvider 实现 ModelScope (魔搭) 的 Provider 接口
|
||||
type ModelScopeProvider struct{}
|
||||
|
||||
func init() {
|
||||
Register(&ModelScopeProvider{})
|
||||
}
|
||||
|
||||
// Info 返回 ModelScope provider 的元数据
|
||||
func (p *ModelScopeProvider) Info() ProviderInfo {
|
||||
return ProviderInfo{
|
||||
Name: ProviderModelScope,
|
||||
DisplayName: "魔搭 ModelScope",
|
||||
Description: "Qwen/Qwen3-8B, Qwen/Qwen3-Embedding-8B, etc.",
|
||||
DefaultURLs: map[types.ModelType]string{
|
||||
types.ModelTypeKnowledgeQA: ModelScopeBaseURL,
|
||||
types.ModelTypeEmbedding: ModelScopeBaseURL,
|
||||
types.ModelTypeVLLM: ModelScopeBaseURL,
|
||||
},
|
||||
ModelTypes: []types.ModelType{
|
||||
types.ModelTypeKnowledgeQA,
|
||||
types.ModelTypeEmbedding,
|
||||
types.ModelTypeVLLM,
|
||||
},
|
||||
RequiresAuth: true,
|
||||
}
|
||||
}
|
||||
|
||||
// ValidateConfig 验证 ModelScope provider 配置
|
||||
func (p *ModelScopeProvider) ValidateConfig(config *Config) error {
|
||||
if config.BaseURL == "" {
|
||||
return fmt.Errorf("base URL is required for ModelScope provider")
|
||||
}
|
||||
if config.APIKey == "" {
|
||||
return fmt.Errorf("API key is required for ModelScope provider")
|
||||
}
|
||||
if config.ModelName == "" {
|
||||
return fmt.Errorf("model name is required")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
package provider
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/Tencent/WeKnora/internal/types"
|
||||
)
|
||||
|
||||
const (
|
||||
MoonshotBaseURL = "https://api.moonshot.ai/v1"
|
||||
)
|
||||
|
||||
// MoonshotProvider 实现 Moonshot AI (Kimi) 的 Provider 接口
|
||||
type MoonshotProvider struct{}
|
||||
|
||||
func init() {
|
||||
Register(&MoonshotProvider{})
|
||||
}
|
||||
|
||||
// Info 返回 Moonshot provider 的元数据
|
||||
func (p *MoonshotProvider) Info() ProviderInfo {
|
||||
return ProviderInfo{
|
||||
Name: ProviderMoonshot,
|
||||
DisplayName: "月之暗面 Moonshot",
|
||||
Description: "kimi-k2-turbo-preview, moonshot-v1-8k-vision-preview, etc.",
|
||||
DefaultURLs: map[types.ModelType]string{
|
||||
types.ModelTypeKnowledgeQA: MoonshotBaseURL,
|
||||
types.ModelTypeVLLM: MoonshotBaseURL,
|
||||
},
|
||||
ModelTypes: []types.ModelType{
|
||||
types.ModelTypeKnowledgeQA,
|
||||
types.ModelTypeVLLM,
|
||||
},
|
||||
RequiresAuth: true,
|
||||
}
|
||||
}
|
||||
|
||||
// ValidateConfig 验证 Moonshot provider 配置
|
||||
func (p *MoonshotProvider) ValidateConfig(config *Config) error {
|
||||
if config.BaseURL == "" {
|
||||
return fmt.Errorf("base URL is required for Moonshot provider")
|
||||
}
|
||||
if config.APIKey == "" {
|
||||
return fmt.Errorf("API key is required for Moonshot provider")
|
||||
}
|
||||
if config.ModelName == "" {
|
||||
return fmt.Errorf("model name is required")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -41,6 +41,16 @@ const (
|
||||
ProviderMimo ProviderName = "mimo"
|
||||
// GPUStack (私有化部署)
|
||||
ProviderGPUStack ProviderName = "gpustack"
|
||||
// 月之暗面 Moonshot (Kimi)
|
||||
ProviderMoonshot ProviderName = "moonshot"
|
||||
// 魔搭 ModelScope
|
||||
ProviderModelScope ProviderName = "modelscope"
|
||||
// 百度千帆
|
||||
ProviderQianfan ProviderName = "qianfan"
|
||||
// 七牛云
|
||||
ProviderQiniu ProviderName = "qiniu"
|
||||
// 美团 LongCat AI
|
||||
ProviderLongCat ProviderName = "longcat"
|
||||
)
|
||||
|
||||
// AllProviders 返回所有注册的提供者名称
|
||||
@@ -54,11 +64,16 @@ func AllProviders() []ProviderName {
|
||||
ProviderSiliconFlow,
|
||||
ProviderDeepSeek,
|
||||
ProviderMiniMax,
|
||||
ProviderMoonshot,
|
||||
ProviderModelScope,
|
||||
ProviderQianfan,
|
||||
ProviderQiniu,
|
||||
ProviderOpenAI,
|
||||
ProviderGemini,
|
||||
ProviderOpenRouter,
|
||||
ProviderJina,
|
||||
ProviderMimo,
|
||||
ProviderLongCat,
|
||||
ProviderGPUStack,
|
||||
}
|
||||
}
|
||||
@@ -213,6 +228,16 @@ func DetectProvider(baseURL string) ProviderName {
|
||||
return ProviderMimo
|
||||
case containsAny(baseURL, "gpustack"):
|
||||
return ProviderGPUStack
|
||||
case containsAny(baseURL, "modelscope.cn"):
|
||||
return ProviderModelScope
|
||||
case containsAny(baseURL, "qiniuapi.com", "qiniu"):
|
||||
return ProviderQiniu
|
||||
case containsAny(baseURL, "moonshot.ai"):
|
||||
return ProviderMoonshot
|
||||
case containsAny(baseURL, "qianfan.baidubce.com", "baidubce.com"):
|
||||
return ProviderQianfan
|
||||
case containsAny(baseURL, "longcat.chat"):
|
||||
return ProviderLongCat
|
||||
default:
|
||||
return ProviderGeneric
|
||||
}
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
package provider
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/Tencent/WeKnora/internal/types"
|
||||
)
|
||||
|
||||
const (
|
||||
QianfanBaseURL = "https://qianfan.baidubce.com/v2"
|
||||
)
|
||||
|
||||
// QianfanProvider 实现百度千帆的 Provider 接口
|
||||
type QianfanProvider struct{}
|
||||
|
||||
func init() {
|
||||
Register(&QianfanProvider{})
|
||||
}
|
||||
|
||||
// Info 返回百度千帆 provider 的元数据
|
||||
func (p *QianfanProvider) Info() ProviderInfo {
|
||||
return ProviderInfo{
|
||||
Name: ProviderQianfan,
|
||||
DisplayName: "百度千帆 Baidu Cloud",
|
||||
Description: "ernie-5.0-thinking-preview, embedding-v1, bce-reranker-base, etc.",
|
||||
DefaultURLs: map[types.ModelType]string{
|
||||
types.ModelTypeKnowledgeQA: QianfanBaseURL,
|
||||
types.ModelTypeEmbedding: QianfanBaseURL,
|
||||
types.ModelTypeRerank: QianfanBaseURL,
|
||||
types.ModelTypeVLLM: QianfanBaseURL,
|
||||
},
|
||||
ModelTypes: []types.ModelType{
|
||||
types.ModelTypeKnowledgeQA,
|
||||
types.ModelTypeEmbedding,
|
||||
types.ModelTypeRerank,
|
||||
types.ModelTypeVLLM,
|
||||
},
|
||||
RequiresAuth: true,
|
||||
}
|
||||
}
|
||||
|
||||
// ValidateConfig 验证百度千帆 provider 配置
|
||||
func (p *QianfanProvider) ValidateConfig(config *Config) error {
|
||||
if config.BaseURL == "" {
|
||||
return fmt.Errorf("base URL is required for Qianfan provider")
|
||||
}
|
||||
if config.APIKey == "" {
|
||||
return fmt.Errorf("API key is required for Qianfan provider")
|
||||
}
|
||||
if config.ModelName == "" {
|
||||
return fmt.Errorf("model name is required")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package provider
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/Tencent/WeKnora/internal/types"
|
||||
)
|
||||
|
||||
const (
|
||||
// QiniuBaseURL 七牛云 API BaseURL (OpenAI 兼容模式)
|
||||
QiniuBaseURL = "https://api.qnaigc.com/v1"
|
||||
)
|
||||
|
||||
// QiniuProvider 实现七牛云的 Provider 接口
|
||||
type QiniuProvider struct{}
|
||||
|
||||
func init() {
|
||||
Register(&QiniuProvider{})
|
||||
}
|
||||
|
||||
// Info 返回七牛云 provider 的元数据
|
||||
func (p *QiniuProvider) Info() ProviderInfo {
|
||||
return ProviderInfo{
|
||||
Name: ProviderQiniu,
|
||||
DisplayName: "七牛云 Qiniu",
|
||||
Description: "deepseek/deepseek-v3.2-251201, z-ai/glm-4.7, etc.",
|
||||
DefaultURLs: map[types.ModelType]string{
|
||||
types.ModelTypeKnowledgeQA: QiniuBaseURL,
|
||||
},
|
||||
ModelTypes: []types.ModelType{
|
||||
types.ModelTypeKnowledgeQA,
|
||||
},
|
||||
RequiresAuth: true,
|
||||
}
|
||||
}
|
||||
|
||||
// ValidateConfig 验证七牛云 provider 配置
|
||||
func (p *QiniuProvider) ValidateConfig(config *Config) error {
|
||||
if config.BaseURL == "" {
|
||||
return fmt.Errorf("base URL is required for Qiniu provider")
|
||||
}
|
||||
if config.APIKey == "" {
|
||||
return fmt.Errorf("API key is required for Qiniu provider")
|
||||
}
|
||||
if config.ModelName == "" {
|
||||
return fmt.Errorf("model name is required")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user