mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-05-28 11:43:06 +08:00
### What problem does this PR solve? Add a Go driver for **FuturMix** (https://futurmix.ai/docs), one of the unchecked providers on the umbrella tracking issue #14736. FuturMix is documented as an "OpenAI-compatible API" aggregator over Claude / GPT / Gemini / DeepSeek (~22 models per their `/models` page). Until this PR, a tenant who configured `futurmix` as a model provider in the Go layer fell through to the default branch of `internal/entity/models/factory.go` and got the dummy driver. --------- Co-authored-by: sxxtony <sxxtony@users.noreply.github.com> Co-authored-by: Jin Hai <haijin.chn@gmail.com>
146 lines
4.7 KiB
Go
146 lines
4.7 KiB
Go
//
|
|
// Copyright 2026 The InfiniFlow Authors. All Rights Reserved.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
//
|
|
|
|
package models
|
|
|
|
import (
|
|
"strings"
|
|
)
|
|
|
|
// ModelFactory creates ModelDriver instances based on provider name
|
|
type ModelFactory struct {
|
|
}
|
|
|
|
// NewModelFactory creates a new ModelFactory
|
|
func NewModelFactory() *ModelFactory {
|
|
return &ModelFactory{}
|
|
}
|
|
|
|
// CreateModelDriver creates a ModelDriver for the given provider and model
|
|
func (f *ModelFactory) CreateModelDriver(providerName string, baseURL map[string]string, urlSuffix URLSuffix) (ModelDriver, error) {
|
|
providerLower := strings.ToLower(providerName)
|
|
switch providerLower {
|
|
case "anthropic":
|
|
return NewAnthropicModel(baseURL, urlSuffix), nil
|
|
case "zhipu-ai":
|
|
return NewZhipuAIModel(baseURL, urlSuffix), nil
|
|
case "deepseek":
|
|
return NewDeepSeekModel(baseURL, urlSuffix), nil
|
|
case "moonshot":
|
|
return NewMoonshotModel(baseURL, urlSuffix), nil
|
|
case "minimax":
|
|
return NewMinimaxModel(baseURL, urlSuffix), nil
|
|
case "gitee":
|
|
return NewGiteeModel(baseURL, urlSuffix), nil
|
|
case "siliconflow":
|
|
return NewSiliconflowModel(baseURL, urlSuffix), nil
|
|
case "google":
|
|
return NewGoogleModel(baseURL, urlSuffix), nil
|
|
case "aliyun":
|
|
return NewAliyunModel(baseURL, urlSuffix), nil
|
|
case "volcengine":
|
|
return NewVolcEngine(baseURL, urlSuffix), nil
|
|
case "vllm":
|
|
return NewVllmModel(baseURL, urlSuffix), nil
|
|
case "xai":
|
|
return NewXAIModel(baseURL, urlSuffix), nil
|
|
case "lmstudio":
|
|
return NewLmStudioModel(baseURL, urlSuffix), nil
|
|
case "ollama":
|
|
return NewOllamaModel(baseURL, urlSuffix), nil
|
|
case "openai":
|
|
return NewOpenAIModel(baseURL, urlSuffix), nil
|
|
case "groq":
|
|
return NewGroqModel(baseURL, urlSuffix), nil
|
|
case "azure-openai":
|
|
return NewAzureOpenAIModel(baseURL, urlSuffix), nil
|
|
case "nvidia":
|
|
return NewNvidiaModel(baseURL, urlSuffix), nil
|
|
case "openrouter":
|
|
return NewOpenRouterModel(baseURL, urlSuffix), nil
|
|
case "huggingface":
|
|
return NewHuggingFaceModel(baseURL, urlSuffix), nil
|
|
case "baidu":
|
|
return NewBaiduModel(baseURL, urlSuffix), nil
|
|
case "cohere":
|
|
return NewCoHereModel(baseURL, urlSuffix), nil
|
|
case "cometapi":
|
|
return NewCometAPIModel(baseURL, urlSuffix), nil
|
|
case "fishaudio":
|
|
return NewFishAudioModel(baseURL, urlSuffix), nil
|
|
case "mistral":
|
|
return NewMistralModel(baseURL, urlSuffix), nil
|
|
case "upstage":
|
|
return NewUpstageModel(baseURL, urlSuffix), nil
|
|
case "stepfun":
|
|
return NewStepFunModel(baseURL, urlSuffix), nil
|
|
case "baichuan":
|
|
return NewBaichuanModel(baseURL, urlSuffix), nil
|
|
case "jina":
|
|
return NewJinaModel(baseURL, urlSuffix), nil
|
|
case "localai":
|
|
return NewLocalAIModel(baseURL, urlSuffix), nil
|
|
case "xinference":
|
|
return NewXinferenceModel(baseURL, urlSuffix), nil
|
|
case "astraflow":
|
|
return NewAstraflowModel(baseURL, urlSuffix), nil
|
|
case "longcat":
|
|
return NewLongCatModel(baseURL, urlSuffix), nil
|
|
case "hunyuan":
|
|
return NewHunyuanModel(baseURL, urlSuffix), nil
|
|
case "tokenpony":
|
|
return NewTokenPonyModel(baseURL, urlSuffix), nil
|
|
case "novita":
|
|
return NewNovitaModel(baseURL, urlSuffix), nil
|
|
case "avian":
|
|
return NewAvianModel(baseURL, urlSuffix), nil
|
|
case "replicate":
|
|
return NewReplicateModel(baseURL, urlSuffix), nil
|
|
case "togetherai":
|
|
return NewTogetherAIModel(baseURL, urlSuffix), nil
|
|
case "ppio":
|
|
return NewPPIOModel(baseURL, urlSuffix), nil
|
|
case "voyage":
|
|
return NewVoyageModel(baseURL, urlSuffix), nil
|
|
case "paddleocr":
|
|
return NewPaddleOCRModel(baseURL, urlSuffix), nil
|
|
case "xunfei":
|
|
return NewXunFeiModel(baseURL, urlSuffix), nil
|
|
case "deepinfra":
|
|
return NewDeepInfraModel(baseURL, urlSuffix), nil
|
|
case "mineru":
|
|
return NewMinerUModel(baseURL, urlSuffix), nil
|
|
case "jiekouai":
|
|
return NewJieKouAIModel(baseURL, urlSuffix), nil
|
|
case "302.ai":
|
|
return NewAI302Model(baseURL, urlSuffix), nil
|
|
case "mineru_local":
|
|
return NewMinerLocalUModel(baseURL, urlSuffix), nil
|
|
case "futurmix":
|
|
return NewFuturMixModel(baseURL, urlSuffix), nil
|
|
case "perplexity":
|
|
return NewPerplexityModel(baseURL, urlSuffix), nil
|
|
case "gpustack":
|
|
return NewGPUStackModel(baseURL, urlSuffix), nil
|
|
case "n1n":
|
|
return NewN1NModel(baseURL, urlSuffix), nil
|
|
case "paddleocr_local":
|
|
return NewPaddleOCRLocalModel(baseURL, urlSuffix), nil
|
|
default:
|
|
return NewDummyModel(baseURL, urlSuffix), nil
|
|
}
|
|
}
|