sanbo
commited on
Commit
·
025ec95
1
Parent(s):
203588a
update sth. at 2024-12-24 00:00:21
Browse files- app241224.py +117 -7
- getm.py +38 -0
app241224.py
CHANGED
@@ -1,10 +1,14 @@
|
|
1 |
"""
|
2 |
curl -X GET http://localhost:7680/api/models
|
3 |
|
4 |
-
curl -X POST
|
5 |
-H "Content-Type: application/json" \
|
6 |
-d '{
|
7 |
-
"
|
|
|
|
|
|
|
|
|
8 |
}'
|
9 |
|
10 |
|
@@ -35,6 +39,24 @@ def get_models():
|
|
35 |
return json.dumps(models)
|
36 |
|
37 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
38 |
def chat_completion(
|
39 |
user_prompt, user_id: str = None, system_prompt="You are a helpful assistant.", model="Qwen2.5-72B",
|
40 |
project="DecentralGPT", stream=False, temperature=0.3, max_tokens=1024, top_p=0.5,
|
@@ -117,7 +139,87 @@ def chat_completion(
|
|
117 |
return "解析响应内容失败。"
|
118 |
return {}
|
119 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
120 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
121 |
@app.route('/api/models', methods=['GET'])
|
122 |
@app.route('/api/v1/models', methods=['GET'])
|
123 |
@app.route('/hf/v1/models', methods=['GET'])
|
@@ -132,12 +234,20 @@ def models():
|
|
132 |
def chat_completion_api():
|
133 |
"""处理用户请求并保留上下文"""
|
134 |
data = request.json
|
135 |
-
user_prompt = data.get("prompt")
|
136 |
user_id = data.get("user_id", str(uuid.uuid4())) # 如果未提供 user_id,生成随机值
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
141 |
)
|
142 |
|
143 |
# maybe \uxxxx
|
|
|
1 |
"""
|
2 |
curl -X GET http://localhost:7680/api/models
|
3 |
|
4 |
+
curl -X POST https://sanbo1200-degpt.hf.space/hf/v1/chat/completions \
|
5 |
-H "Content-Type: application/json" \
|
6 |
-d '{
|
7 |
+
"model": "Qwen2.5-72B",
|
8 |
+
"messages": [
|
9 |
+
{"role": "system", "content": "You are a helpful assistant."},
|
10 |
+
{"role": "user", "content": "What is the capital of France?"}
|
11 |
+
]
|
12 |
}'
|
13 |
|
14 |
|
|
|
39 |
return json.dumps(models)
|
40 |
|
41 |
|
42 |
+
# 新的方法,检查model是否有效并返回id
|
43 |
+
def get_model_by_id(model_id=None):
|
44 |
+
# 获取所有模型数据
|
45 |
+
models_data = json.loads(get_models())["data"]
|
46 |
+
|
47 |
+
# 提取所有有效的模型ID
|
48 |
+
valid_ids = [model["id"] for model in models_data]
|
49 |
+
|
50 |
+
# 如果model_id无效,默认返回Qwen2.5-72B
|
51 |
+
if model_id not in valid_ids:
|
52 |
+
model_id = "Qwen2.5-72B"
|
53 |
+
|
54 |
+
# 根据model_id获取对应的模型数据
|
55 |
+
model_data = next((model for model in models_data if model["id"] == model_id), None)
|
56 |
+
|
57 |
+
# 返回model_data的id字段
|
58 |
+
return model_data["id"] if model_data else None
|
59 |
+
|
60 |
def chat_completion(
|
61 |
user_prompt, user_id: str = None, system_prompt="You are a helpful assistant.", model="Qwen2.5-72B",
|
62 |
project="DecentralGPT", stream=False, temperature=0.3, max_tokens=1024, top_p=0.5,
|
|
|
139 |
return "解析响应内容失败。"
|
140 |
return {}
|
141 |
|
142 |
+
def chat_completion_messages(
|
143 |
+
messages, user_id: str = None, system_prompt="You are a helpful assistant.", model="Qwen2.5-72B",
|
144 |
+
project="DecentralGPT", stream=False, temperature=0.3, max_tokens=1024, top_p=0.5,
|
145 |
+
frequency_penalty=0, presence_penalty=0):
|
146 |
+
"""处理用户请求并保留上下文"""
|
147 |
+
url = 'https://usa-chat.degpt.ai/api/v0/chat/completion/proxy'
|
148 |
+
headers = {
|
149 |
+
'accept': 'application/json',
|
150 |
+
'accept-language': 'en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7',
|
151 |
+
'content-type': 'application/json',
|
152 |
+
'dnt': '1',
|
153 |
+
'origin': 'https://www.degpt.ai',
|
154 |
+
'priority': 'u=1, i',
|
155 |
+
'referer': 'https://www.degpt.ai/',
|
156 |
+
'sec-ch-ua': 'Google Chrome";v="131", "Chromium";v="131", "Not_A Brand";v="24"',
|
157 |
+
'sec-ch-ua-mobile': '?0',
|
158 |
+
'sec-ch-ua-platform': '"macOS"',
|
159 |
+
'sec-fetch-dest': 'empty',
|
160 |
+
'sec-fetch-mode': 'cors',
|
161 |
+
'sec-fetch-site': 'same-site',
|
162 |
+
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36'
|
163 |
+
}
|
164 |
|
165 |
+
# # 初始化或更新用户的对话历史
|
166 |
+
# if user_id is not None:
|
167 |
+
# if user_id not in user_contexts:
|
168 |
+
# user_contexts[user_id] = [{"role": "system", "content": system_prompt}]
|
169 |
+
|
170 |
+
# user_contexts[user_id].append({"role": "user", "content": user_prompt})
|
171 |
+
|
172 |
+
# # 检查是否需要修剪历史记录,保留 `system` 提示词
|
173 |
+
# while len(user_contexts[user_id]) > MAX_HISTORY_LENGTH:
|
174 |
+
# # 删除最早的用户问题和系统回复,但保留 `system` 提示词
|
175 |
+
# if len(user_contexts[user_id]) > 2:
|
176 |
+
# # 检查删除的条目是否有匹配的系统回复,如果没有,只删除用户输入
|
177 |
+
# if user_contexts[user_id][2]["role"] == "user":
|
178 |
+
# user_contexts[user_id] = [user_contexts[user_id][0]] + user_contexts[user_id][2:]
|
179 |
+
# else:
|
180 |
+
# user_contexts[user_id] = [user_contexts[user_id][0]] + user_contexts[user_id][2:]
|
181 |
+
# else:
|
182 |
+
# break
|
183 |
+
|
184 |
+
# messages = user_contexts[user_id]
|
185 |
+
# else:
|
186 |
+
# # 如果没有提供 user_id,不保留上下文
|
187 |
+
# messages = [{"role": "system", "content": system_prompt}, {"role": "user", "content": user_prompt}]
|
188 |
+
|
189 |
+
payload = {
|
190 |
+
"model": model,
|
191 |
+
"messages": messages,
|
192 |
+
"project": project,
|
193 |
+
"stream": stream,
|
194 |
+
"temperature": temperature,
|
195 |
+
"max_tokens": max_tokens,
|
196 |
+
"top_p": top_p,
|
197 |
+
"frequency_penalty": frequency_penalty,
|
198 |
+
"presence_penalty": presence_penalty
|
199 |
+
}
|
200 |
+
|
201 |
+
try:
|
202 |
+
response = requests.post(url, headers=headers, json=payload)
|
203 |
+
response.encoding = 'utf-8'
|
204 |
+
response.raise_for_status()
|
205 |
+
## print(response.text)
|
206 |
+
|
207 |
+
# # 获取响应并添加到上下文
|
208 |
+
# response_content = response.json()["choices"][0]["message"]["content"]
|
209 |
+
# # print(
|
210 |
+
# # f"=========== {user_id}:{user_prompt} ====================\r\n请求内容:{messages}\r\n完整响应:{response.text}")
|
211 |
+
|
212 |
+
# # 将系统的回复添加到用户上下文中
|
213 |
+
# if user_id is not None:
|
214 |
+
# user_contexts[user_id].append({"role": "assistant", "content": response_content})
|
215 |
+
return response.text
|
216 |
+
except requests.exceptions.RequestException as e:
|
217 |
+
print(f"请求失败: {e}")
|
218 |
+
return "请求失败,请检查网络或参数配置。"
|
219 |
+
except (KeyError, IndexError) as e:
|
220 |
+
print(f"解析响应时出错: {e}")
|
221 |
+
return "解析响应内容失败。"
|
222 |
+
return {}
|
223 |
@app.route('/api/models', methods=['GET'])
|
224 |
@app.route('/api/v1/models', methods=['GET'])
|
225 |
@app.route('/hf/v1/models', methods=['GET'])
|
|
|
234 |
def chat_completion_api():
|
235 |
"""处理用户请求并保留上下文"""
|
236 |
data = request.json
|
237 |
+
# user_prompt = data.get("prompt")
|
238 |
user_id = data.get("user_id", str(uuid.uuid4())) # 如果未提供 user_id,生成随机值
|
239 |
+
model=get_model_by_id(data.get("model"))
|
240 |
+
temperature=data.get("temperature", 0.3)
|
241 |
+
max_tokens =data.get("max_tokens", 1024)
|
242 |
+
messages = data.get("messages", [])
|
243 |
+
stream = data.get("stream", False)
|
244 |
+
response_content = chat_completion_messages(
|
245 |
+
messages=messages,
|
246 |
+
user_id=user_id,
|
247 |
+
temperature=temperature,
|
248 |
+
max_tokens=max_tokens,
|
249 |
+
stream=stream,
|
250 |
+
model=model
|
251 |
)
|
252 |
|
253 |
# maybe \uxxxx
|
getm.py
ADDED
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import json
|
2 |
+
|
3 |
+
# 保持不变的get_models方法
|
4 |
+
def get_models():
|
5 |
+
models = {
|
6 |
+
"object": "list",
|
7 |
+
"data": [
|
8 |
+
{"id": "Qwen2.5-72B", "object": "model", "created": 0, "owned_by": "Qwen"},
|
9 |
+
{"id": "Llama-3.1-Nemotron-70B", "object": "model", "created": 0, "owned_by": "Nemotron"},
|
10 |
+
{"id": "NVLM-D-72B", "object": "model", "created": 0, "owned_by": "NVDIA"},
|
11 |
+
{"id": "DeepSeek-Coder-V2", "object": "model", "created": 0, "owned_by": "DeepSeek"},
|
12 |
+
{"id": "Qwen2.5-Coder-32B", "object": "model", "created": 0, "owned_by": "Qwen"},
|
13 |
+
]
|
14 |
+
}
|
15 |
+
return json.dumps(models)
|
16 |
+
|
17 |
+
# 新的方法,检查model是否有效并返回id
|
18 |
+
def get_model_by_id(model_id=None):
|
19 |
+
# 获取所有模型数据
|
20 |
+
models_data = json.loads(get_models())["data"]
|
21 |
+
|
22 |
+
# 提取所有有效的模型ID
|
23 |
+
valid_ids = [model["id"] for model in models_data]
|
24 |
+
|
25 |
+
# 如果model_id无效,默认返回Qwen2.5-72B
|
26 |
+
if model_id not in valid_ids:
|
27 |
+
model_id = "Qwen2.5-72B"
|
28 |
+
|
29 |
+
# 根据model_id获取对应的模型数据
|
30 |
+
model_data = next((model for model in models_data if model["id"] == model_id), None)
|
31 |
+
|
32 |
+
# 返回model_data的id字段
|
33 |
+
return model_data["id"] if model_data else None
|
34 |
+
|
35 |
+
|
36 |
+
# 示例调用
|
37 |
+
print(get_model_by_id("Llama-3.1-Nemotron-70B")) # 返回指定模型
|
38 |
+
print(get_model_by_id("Invalid-ID")) # 返回默认模型 Qwen2.5-72B
|