Skip to content

Commit b257591

Browse files
committed
feat(模型管理): 支持阿里云百炼大模型
1 parent e1df4b2 commit b257591

File tree

4 files changed

+100
-2
lines changed

4 files changed

+100
-2
lines changed

apps/setting/models_provider/impl/aliyun_bai_lian_model_provider/aliyun_bai_lian_model_provider.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,13 @@
1313
ModelInfoManage
1414
from setting.models_provider.impl.aliyun_bai_lian_model_provider.credential.embedding import \
1515
AliyunBaiLianEmbeddingCredential
16+
from setting.models_provider.impl.aliyun_bai_lian_model_provider.credential.llm import BaiLianLLMModelCredential
1617
from setting.models_provider.impl.aliyun_bai_lian_model_provider.credential.reranker import \
1718
AliyunBaiLianRerankerCredential
1819
from setting.models_provider.impl.aliyun_bai_lian_model_provider.credential.stt import AliyunBaiLianSTTModelCredential
1920
from setting.models_provider.impl.aliyun_bai_lian_model_provider.credential.tts import AliyunBaiLianTTSModelCredential
2021
from setting.models_provider.impl.aliyun_bai_lian_model_provider.model.embedding import AliyunBaiLianEmbedding
22+
from setting.models_provider.impl.aliyun_bai_lian_model_provider.model.llm import BaiLianChatModel
2123
from setting.models_provider.impl.aliyun_bai_lian_model_provider.model.reranker import AliyunBaiLianReranker
2224
from setting.models_provider.impl.aliyun_bai_lian_model_provider.model.stt import AliyunBaiLianSpeechToText
2325
from setting.models_provider.impl.aliyun_bai_lian_model_provider.model.tts import AliyunBaiLianTextToSpeech
@@ -27,6 +29,7 @@
2729
aliyun_bai_lian_tts_model_credential = AliyunBaiLianTTSModelCredential()
2830
aliyun_bai_lian_stt_model_credential = AliyunBaiLianSTTModelCredential()
2931
aliyun_bai_lian_embedding_model_credential = AliyunBaiLianEmbeddingCredential()
32+
aliyun_bai_lian_llm_model_credential = BaiLianLLMModelCredential()
3033

3134
model_info_list = [ModelInfo('gte-rerank',
3235
'阿里巴巴通义实验室开发的GTE-Rerank文本排序系列模型,开发者可以通过LlamaIndex框架进行集成高质量文本检索、排序。',
@@ -41,11 +44,17 @@
4144
'通用文本向量,是通义实验室基于LLM底座的多语言文本统一向量模型,面向全球多个主流语种,提供高水准的向量服务,帮助开发者将文本数据快速转换为高质量的向量数据。',
4245
ModelTypeConst.EMBEDDING, aliyun_bai_lian_embedding_model_credential,
4346
AliyunBaiLianEmbedding),
47+
ModelInfo('qwen-turbo', '', ModelTypeConst.LLM, aliyun_bai_lian_llm_model_credential,
48+
BaiLianChatModel),
49+
ModelInfo('qwen-plus', '', ModelTypeConst.LLM, aliyun_bai_lian_llm_model_credential,
50+
BaiLianChatModel),
51+
ModelInfo('qwen-max', '', ModelTypeConst.LLM, aliyun_bai_lian_llm_model_credential,
52+
BaiLianChatModel)
4453
]
4554

4655
model_info_manage = ModelInfoManage.builder().append_model_info_list(model_info_list).append_default_model_info(
4756
model_info_list[1]).append_default_model_info(model_info_list[2]).append_default_model_info(
48-
model_info_list[3]).build()
57+
model_info_list[3]).append_default_model_info(model_info_list[4]).build()
4958

5059

5160
class AliyunBaiLianModelProvider(IModelProvider):
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
# coding=utf-8
2+
from typing import Dict
3+
4+
from langchain_core.messages import HumanMessage
5+
6+
from common import forms
7+
from common.exception.app_exception import AppApiException
8+
from common.forms import BaseForm, TooltipLabel
9+
from setting.models_provider.base_model_provider import BaseModelCredential, ValidCode
10+
11+
12+
class BaiLianLLMModelParams(BaseForm):
13+
temperature = forms.SliderField(TooltipLabel('温度', '较高的数值会使输出更加随机,而较低的数值会使其更加集中和确定'),
14+
required=True, default_value=0.7,
15+
_min=0.1,
16+
_max=1.0,
17+
_step=0.01,
18+
precision=2)
19+
20+
max_tokens = forms.SliderField(
21+
TooltipLabel('输出最大Tokens', '指定模型可生成的最大token个数'),
22+
required=True, default_value=800,
23+
_min=1,
24+
_max=100000,
25+
_step=1,
26+
precision=0)
27+
28+
29+
class BaiLianLLMModelCredential(BaseForm, BaseModelCredential):
30+
31+
def is_valid(self, model_type: str, model_name, model_credential: Dict[str, object], provider,
32+
raise_exception=False):
33+
model_type_list = provider.get_model_type_list()
34+
if not any(list(filter(lambda mt: mt.get('value') == model_type, model_type_list))):
35+
raise AppApiException(ValidCode.valid_error.value, f'{model_type} 模型类型不支持')
36+
37+
for key in ['api_base', 'api_key']:
38+
if key not in model_credential:
39+
if raise_exception:
40+
raise AppApiException(ValidCode.valid_error.value, f'{key} 字段为必填字段')
41+
else:
42+
return False
43+
try:
44+
model = provider.get_model(model_type, model_name, model_credential)
45+
model.invoke([HumanMessage(content='你好')])
46+
except Exception as e:
47+
if isinstance(e, AppApiException):
48+
raise e
49+
if raise_exception:
50+
raise AppApiException(ValidCode.valid_error.value, f'校验失败,请检查参数是否正确: {str(e)}')
51+
else:
52+
return False
53+
return True
54+
55+
def encryption_dict(self, model: Dict[str, object]):
56+
return {**model, 'api_key': super().encryption(model.get('api_key', ''))}
57+
58+
api_base = forms.TextInputField('API 域名', required=True)
59+
api_key = forms.PasswordInputField('API Key', required=True)
60+
61+
def get_model_params_setting_form(self, model_name):
62+
return BaiLianLLMModelParams()
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#!/usr/bin/env python
2+
# -*- coding: UTF-8 -*-
3+
from typing import List, Dict
4+
5+
from setting.models_provider.base_model_provider import MaxKBBaseModel
6+
from setting.models_provider.impl.base_chat_open_ai import BaseChatOpenAI
7+
8+
9+
class BaiLianChatModel(MaxKBBaseModel, BaseChatOpenAI):
10+
@staticmethod
11+
def is_cache_model():
12+
return False
13+
14+
@staticmethod
15+
def new_instance(model_type, model_name, model_credential: Dict[str, object], **model_kwargs):
16+
optional_params = MaxKBBaseModel.filter_optional_params(model_kwargs)
17+
return BaiLianChatModel(
18+
model=model_name,
19+
openai_api_base=model_credential.get('api_base'),
20+
openai_api_key=model_credential.get('api_key'),
21+
**optional_params
22+
)

ui/src/views/login/index.vue

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,12 @@ function redirectAuth(authType: string) {
158158
const redirectUrl = eval(`\`${config.redirectUrl}\``)
159159
let url
160160
if (authType === 'CAS') {
161-
url = `${config.ldpUri}?service=${encodeURIComponent(redirectUrl)}`
161+
url = config.ldpUri
162+
if (url.indexOf('?') !== -1) {
163+
url = `${config.ldpUri}&service=${encodeURIComponent(redirectUrl)}`
164+
} else {
165+
url = `${config.ldpUri}?service=${encodeURIComponent(redirectUrl)}`
166+
}
162167
}
163168
if (authType === 'OIDC') {
164169
url = `${config.authEndpoint}?client_id=${config.clientId}&redirect_uri=${redirectUrl}&response_type=code&scope=openid+profile+email`

0 commit comments

Comments
 (0)