MCPcopy
hub / github.com/QuantumNous/new-api / fetchChannelUpstreamModelIDs

Function fetchChannelUpstreamModelIDs

controller/channel_upstream_update.go:258–343  ·  view source on GitHub ↗
(channel *model.Channel)

Source from the content-addressed store, hash-verified

256}
257
258func 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 {

Callers 2

FetchUpstreamModelsFunction · 0.85

Calls 9

FetchOllamaModelsFunction · 0.92
FetchGeminiModelsFunction · 0.92
UnmarshalFunction · 0.92
normalizeModelNamesFunction · 0.85
buildFetchModelsHeadersFunction · 0.85
GetResponseBodyFunction · 0.85
GetBaseURLMethod · 0.80
GetNextEnabledKeyMethod · 0.80
GetSettingMethod · 0.45

Tested by

no test coverage detected