(channel *model.Channel)
| 256 | } |
| 257 | |
| 258 | func fetchChannelUpstreamModelIDs(channel *model.Channel) ([]string, error) { |
| 259 | baseURL := constant.ChannelBaseURLs[channel.Type] |
| 260 | if channel.GetBaseURL() != "" { |
| 261 | baseURL = channel.GetBaseURL() |
| 262 | } |
| 263 | |
| 264 | if channel.Type == constant.ChannelTypeOllama { |
| 265 | key := strings.TrimSpace(strings.Split(channel.Key, "\n")[0]) |
| 266 | models, err := ollama.FetchOllamaModels(baseURL, key) |
| 267 | if err != nil { |
| 268 | return nil, err |
| 269 | } |
| 270 | return normalizeModelNames(lo.Map(models, func(item ollama.OllamaModel, _ int) string { |
| 271 | return item.Name |
| 272 | })), nil |
| 273 | } |
| 274 | |
| 275 | if channel.Type == constant.ChannelTypeGemini { |
| 276 | key, _, apiErr := channel.GetNextEnabledKey() |
| 277 | if apiErr != nil { |
| 278 | return nil, fmt.Errorf("获取渠道密钥失败: %w", apiErr) |
| 279 | } |
| 280 | key = strings.TrimSpace(key) |
| 281 | models, err := gemini.FetchGeminiModels(baseURL, key, channel.GetSetting().Proxy) |
| 282 | if err != nil { |
| 283 | return nil, err |
| 284 | } |
| 285 | return normalizeModelNames(models), nil |
| 286 | } |
| 287 | |
| 288 | var url string |
| 289 | switch channel.Type { |
| 290 | case constant.ChannelTypeAli: |
| 291 | url = fmt.Sprintf("%s/compatible-mode/v1/models", baseURL) |
| 292 | case constant.ChannelTypeZhipu_v4: |
| 293 | if plan, ok := constant.ChannelSpecialBases[baseURL]; ok && plan.OpenAIBaseURL != "" { |
| 294 | url = fmt.Sprintf("%s/models", plan.OpenAIBaseURL) |
| 295 | } else { |
| 296 | url = fmt.Sprintf("%s/api/paas/v4/models", baseURL) |
| 297 | } |
| 298 | case constant.ChannelTypeVolcEngine: |
| 299 | if plan, ok := constant.ChannelSpecialBases[baseURL]; ok && plan.OpenAIBaseURL != "" { |
| 300 | url = fmt.Sprintf("%s/v1/models", plan.OpenAIBaseURL) |
| 301 | } else { |
| 302 | url = fmt.Sprintf("%s/v1/models", baseURL) |
| 303 | } |
| 304 | case constant.ChannelTypeMoonshot: |
| 305 | if plan, ok := constant.ChannelSpecialBases[baseURL]; ok && plan.OpenAIBaseURL != "" { |
| 306 | url = fmt.Sprintf("%s/models", plan.OpenAIBaseURL) |
| 307 | } else { |
| 308 | url = fmt.Sprintf("%s/v1/models", baseURL) |
| 309 | } |
| 310 | default: |
| 311 | url = fmt.Sprintf("%s/v1/models", baseURL) |
| 312 | } |
| 313 | |
| 314 | key, _, apiErr := channel.GetNextEnabledKey() |
| 315 | if apiErr != nil { |
no test coverage detected