sanbo commited on
Commit
025ec95
·
1 Parent(s): 203588a

update sth. at 2024-12-24 00:00:21

Browse files
Files changed (2) hide show
  1. app241224.py +117 -7
  2. 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 http://127.0.0.1:7680/hf/v1/chat/completions \
5
  -H "Content-Type: application/json" \
6
  -d '{
7
- "prompt": "你是什么模型?"
 
 
 
 
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
- response_content = chat_completion(
139
- user_prompt,
140
- user_id=user_id
 
 
 
 
 
 
 
 
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