Langchain-Chatchat
84 строки · 2.8 Кб
1import json
2import time
3import hashlib
4
5from fastchat.conversation import Conversation
6from server.model_workers.base import *
7from server.utils import get_httpx_client
8from fastchat import conversation as conv
9import json
10from typing import List, Literal, Dict
11import requests
12
13
14class TianGongWorker(ApiModelWorker):
15def __init__(
16self,
17*,
18controller_addr: str = None,
19worker_addr: str = None,
20model_names: List[str] = ["tiangong-api"],
21version: Literal["SkyChat-MegaVerse"] = "SkyChat-MegaVerse",
22**kwargs,
23):
24kwargs.update(model_names=model_names, controller_addr=controller_addr, worker_addr=worker_addr)
25kwargs.setdefault("context_len", 32768)
26super().__init__(**kwargs)
27self.version = version
28
29def do_chat(self, params: ApiChatParams) -> Dict:
30params.load_config(self.model_names[0])
31
32url = 'https://sky-api.singularity-ai.com/saas/api/v4/generate'
33data = {
34"messages": params.messages,
35"model": "SkyChat-MegaVerse"
36}
37timestamp = str(int(time.time()))
38sign_content = params.api_key + params.secret_key + timestamp
39sign_result = hashlib.md5(sign_content.encode('utf-8')).hexdigest()
40headers = {
41"app_key": params.api_key,
42"timestamp": timestamp,
43"sign": sign_result,
44"Content-Type": "application/json",
45"stream": "true" # or change to "false" 不处理流式返回内容
46}
47
48# 发起请求并获取响应
49response = requests.post(url, headers=headers, json=data, stream=True)
50
51text = ""
52# 处理响应流
53for line in response.iter_lines(chunk_size=None, decode_unicode=True):
54if line:
55# 处理接收到的数据
56# print(line.decode('utf-8'))
57resp = json.loads(line)
58if resp["code"] == 200:
59text += resp['resp_data']['reply']
60yield {
61"error_code": 0,
62"text": text
63}
64else:
65data = {
66"error_code": resp["code"],
67"text": resp["code_msg"]
68}
69self.logger.error(f"请求天工 API 时出错:{data}")
70yield data
71
72def get_embeddings(self, params):
73print("embedding")
74print(params)
75
76def make_conv_template(self, conv_template: str = None, model_path: str = None) -> Conversation:
77return conv.Conversation(
78name=self.model_names[0],
79system_message="",
80messages=[],
81roles=["user", "system"],
82sep="\n### ",
83stop_str="###",
84)
85