注入火山引擎大模型的接口代码
This commit is contained in:
parent
37f15185b6
commit
627d739720
@ -198,6 +198,12 @@ ZHIPUAI_API_KEY = ""
|
|||||||
ZHIPUAI_MODEL = "chatglm_turbo"
|
ZHIPUAI_MODEL = "chatglm_turbo"
|
||||||
|
|
||||||
|
|
||||||
|
# # 火山引擎YUNQUE大模型
|
||||||
|
# YUNQUE_SECRET_KEY = ""
|
||||||
|
# YUNQUE_ACCESS_KEY = ""
|
||||||
|
# YUNQUE_MODEL = ""
|
||||||
|
|
||||||
|
|
||||||
# Claude API KEY
|
# Claude API KEY
|
||||||
ANTHROPIC_API_KEY = ""
|
ANTHROPIC_API_KEY = ""
|
||||||
|
|
||||||
|
|||||||
@ -594,6 +594,23 @@ if "deepseekcoder" in AVAIL_LLM_MODELS: # deepseekcoder
|
|||||||
})
|
})
|
||||||
except:
|
except:
|
||||||
print(trimmed_format_exc())
|
print(trimmed_format_exc())
|
||||||
|
# if "skylark" in AVAIL_LLM_MODELS:
|
||||||
|
# try:
|
||||||
|
# from .bridge_skylark2 import predict_no_ui_long_connection as skylark_noui
|
||||||
|
# from .bridge_skylark2 import predict as skylark_ui
|
||||||
|
# model_info.update({
|
||||||
|
# "skylark": {
|
||||||
|
# "fn_with_ui": skylark_ui,
|
||||||
|
# "fn_without_ui": skylark_noui,
|
||||||
|
# "endpoint": None,
|
||||||
|
# "max_token": 4096,
|
||||||
|
# "tokenizer": tokenizer_gpt35,
|
||||||
|
# "token_cnt": get_token_num_gpt35,
|
||||||
|
# }
|
||||||
|
# })
|
||||||
|
# except:
|
||||||
|
# print(trimmed_format_exc())
|
||||||
|
|
||||||
|
|
||||||
# <-- 用于定义和切换多个azure模型 -->
|
# <-- 用于定义和切换多个azure模型 -->
|
||||||
AZURE_CFG_ARRAY = get_conf("AZURE_CFG_ARRAY")
|
AZURE_CFG_ARRAY = get_conf("AZURE_CFG_ARRAY")
|
||||||
|
|||||||
67
request_llms/bridge_skylark2.py
Normal file
67
request_llms/bridge_skylark2.py
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
import time
|
||||||
|
from toolbox import update_ui, get_conf, update_ui_lastest_msg
|
||||||
|
from toolbox import check_packages, report_exception
|
||||||
|
|
||||||
|
model_name = '云雀大模型'
|
||||||
|
|
||||||
|
def validate_key():
|
||||||
|
YUNQUE_SECRET_KEY = get_conf("YUNQUE_SECRET_KEY")
|
||||||
|
if YUNQUE_SECRET_KEY == '': return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
def predict_no_ui_long_connection(inputs, llm_kwargs, history=[], sys_prompt="", observe_window=[], console_slience=False):
|
||||||
|
"""
|
||||||
|
⭐ 多线程方法
|
||||||
|
函数的说明请见 request_llms/bridge_all.py
|
||||||
|
"""
|
||||||
|
watch_dog_patience = 5
|
||||||
|
response = ""
|
||||||
|
|
||||||
|
if validate_key() is False:
|
||||||
|
raise RuntimeError('请配置YUNQUE_SECRET_KEY')
|
||||||
|
|
||||||
|
from .com_skylark2api import YUNQUERequestInstance
|
||||||
|
sri = YUNQUERequestInstance()
|
||||||
|
for response in sri.generate(inputs, llm_kwargs, history, sys_prompt):
|
||||||
|
if len(observe_window) >= 1:
|
||||||
|
observe_window[0] = response
|
||||||
|
if len(observe_window) >= 2:
|
||||||
|
if (time.time()-observe_window[1]) > watch_dog_patience: raise RuntimeError("程序终止。")
|
||||||
|
return response
|
||||||
|
|
||||||
|
def predict(inputs, llm_kwargs, plugin_kwargs, chatbot, history=[], system_prompt='', stream = True, additional_fn=None):
|
||||||
|
"""
|
||||||
|
⭐ 单线程方法
|
||||||
|
函数的说明请见 request_llms/bridge_all.py
|
||||||
|
"""
|
||||||
|
chatbot.append((inputs, ""))
|
||||||
|
yield from update_ui(chatbot=chatbot, history=history)
|
||||||
|
|
||||||
|
# 尝试导入依赖,如果缺少依赖,则给出安装建议
|
||||||
|
try:
|
||||||
|
check_packages(["zhipuai"])
|
||||||
|
except:
|
||||||
|
yield from update_ui_lastest_msg(f"导入软件依赖失败。使用该模型需要额外依赖,安装方法```pip install --upgrade zhipuai```。",
|
||||||
|
chatbot=chatbot, history=history, delay=0)
|
||||||
|
return
|
||||||
|
|
||||||
|
if validate_key() is False:
|
||||||
|
yield from update_ui_lastest_msg(lastmsg="[Local Message] 请配置HUOSHAN_API_KEY", chatbot=chatbot, history=history, delay=0)
|
||||||
|
return
|
||||||
|
|
||||||
|
if additional_fn is not None:
|
||||||
|
from core_functional import handle_core_functionality
|
||||||
|
inputs, history = handle_core_functionality(additional_fn, inputs, history, chatbot)
|
||||||
|
|
||||||
|
# 开始接收回复
|
||||||
|
from .com_skylark2api import YUNQUERequestInstance
|
||||||
|
sri = YUNQUERequestInstance()
|
||||||
|
for response in sri.generate(inputs, llm_kwargs, history, system_prompt):
|
||||||
|
chatbot[-1] = (inputs, response)
|
||||||
|
yield from update_ui(chatbot=chatbot, history=history)
|
||||||
|
|
||||||
|
# 总结输出
|
||||||
|
if response == f"[Local Message] 等待{model_name}响应中 ...":
|
||||||
|
response = f"[Local Message] {model_name}响应异常 ..."
|
||||||
|
history.extend([inputs, response])
|
||||||
|
yield from update_ui(chatbot=chatbot, history=history)
|
||||||
95
request_llms/com_skylark2api.py
Normal file
95
request_llms/com_skylark2api.py
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
from toolbox import get_conf
|
||||||
|
import threading
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
|
|
||||||
|
timeout_bot_msg = '[Local Message] Request timeout. Network error.'
|
||||||
|
#os.environ['VOLC_ACCESSKEY'] = ''
|
||||||
|
#os.environ['VOLC_SECRETKEY'] = ''
|
||||||
|
|
||||||
|
class YUNQUERequestInstance():
|
||||||
|
def __init__(self):
|
||||||
|
|
||||||
|
self.time_to_yield_event = threading.Event()
|
||||||
|
self.time_to_exit_event = threading.Event()
|
||||||
|
|
||||||
|
self.result_buf = ""
|
||||||
|
|
||||||
|
def generate(self, inputs, llm_kwargs, history, system_prompt):
|
||||||
|
# import _thread as thread
|
||||||
|
from volcengine.maas import MaasService, MaasException
|
||||||
|
|
||||||
|
maas = MaasService('maas-api.ml-platform-cn-beijing.volces.com', 'cn-beijing')
|
||||||
|
|
||||||
|
YUNQUE_SECRET_KEY, YUNQUE_ACCESS_KEY,YUNQUE_MODEL = get_conf("YUNQUE_SECRET_KEY", "YUNQUE_ACCESS_KEY","YUNQUE_MODEL")
|
||||||
|
maas.set_ak(YUNQUE_ACCESS_KEY) #填写 VOLC_ACCESSKEY
|
||||||
|
maas.set_sk(YUNQUE_SECRET_KEY) #填写 'VOLC_SECRETKEY'
|
||||||
|
|
||||||
|
self.result_buf = ""
|
||||||
|
|
||||||
|
req = {
|
||||||
|
"model": {
|
||||||
|
"name": YUNQUE_MODEL,
|
||||||
|
"version": "1.0", # use default version if not specified.
|
||||||
|
},
|
||||||
|
"parameters": {
|
||||||
|
"max_new_tokens": 4000, # 输出文本的最大tokens限制
|
||||||
|
"min_new_tokens": 1, # 输出文本的最小tokens限制
|
||||||
|
"temperature": llm_kwargs['temperature'], # 用于控制生成文本的随机性和创造性,Temperature值越大随机性越大,取值范围0~1
|
||||||
|
"top_p": llm_kwargs['top_p'], # 用于控制输出tokens的多样性,TopP值越大输出的tokens类型越丰富,取值范围0~1
|
||||||
|
"top_k": 0, # 选择预测值最大的k个token进行采样,取值范围0-1000,0表示不生效
|
||||||
|
"max_prompt_tokens": 4000, # 最大输入 token 数,如果给出的 prompt 的 token 长度超过此限制,取最后 max_prompt_tokens 个 token 输入模型。
|
||||||
|
},
|
||||||
|
"messages": self.generate_message_payload(inputs, llm_kwargs, history, system_prompt)
|
||||||
|
}
|
||||||
|
|
||||||
|
response = maas.stream_chat(req)
|
||||||
|
|
||||||
|
for resp in response:
|
||||||
|
self.result_buf += resp.choice.message.content
|
||||||
|
yield self.result_buf
|
||||||
|
'''
|
||||||
|
for event in response.events():
|
||||||
|
if event.event == "add":
|
||||||
|
self.result_buf += event.data
|
||||||
|
yield self.result_buf
|
||||||
|
elif event.event == "error" or event.event == "interrupted":
|
||||||
|
raise RuntimeError("Unknown error:" + event.data)
|
||||||
|
elif event.event == "finish":
|
||||||
|
yield self.result_buf
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
raise RuntimeError("Unknown error:" + str(event))
|
||||||
|
|
||||||
|
logging.info(f'[raw_input] {inputs}')
|
||||||
|
logging.info(f'[response] {self.result_buf}')
|
||||||
|
'''
|
||||||
|
return self.result_buf
|
||||||
|
|
||||||
|
def generate_message_payload(inputs, llm_kwargs, history, system_prompt):
|
||||||
|
from volcengine.maas import ChatRole
|
||||||
|
conversation_cnt = len(history) // 2
|
||||||
|
messages = [{"role": ChatRole.USER, "content": system_prompt},
|
||||||
|
{"role": ChatRole.ASSISTANT, "content": "Certainly!"}]
|
||||||
|
if conversation_cnt:
|
||||||
|
for index in range(0, 2 * conversation_cnt, 2):
|
||||||
|
what_i_have_asked = {}
|
||||||
|
what_i_have_asked["role"] = ChatRole.USER
|
||||||
|
what_i_have_asked["content"] = history[index]
|
||||||
|
what_gpt_answer = {}
|
||||||
|
what_gpt_answer["role"] = ChatRole.ASSISTANT
|
||||||
|
what_gpt_answer["content"] = history[index + 1]
|
||||||
|
if what_i_have_asked["content"] != "":
|
||||||
|
if what_gpt_answer["content"] == "":
|
||||||
|
continue
|
||||||
|
if what_gpt_answer["content"] == timeout_bot_msg:
|
||||||
|
continue
|
||||||
|
messages.append(what_i_have_asked)
|
||||||
|
messages.append(what_gpt_answer)
|
||||||
|
else:
|
||||||
|
messages[-1]['content'] = what_gpt_answer['content']
|
||||||
|
what_i_ask_now = {}
|
||||||
|
what_i_ask_now["role"] = ChatRole.USER
|
||||||
|
what_i_ask_now["content"] = inputs
|
||||||
|
messages.append(what_i_ask_now)
|
||||||
|
return messages
|
||||||
Loading…
x
Reference in New Issue
Block a user