dan92 commited on
Commit
9cc93bf
·
verified ·
1 Parent(s): 990d54f

Upload 8 files

Browse files
Files changed (2) hide show
  1. app/api/config.py +5 -5
  2. app/api/utils.py +40 -53
app/api/config.py CHANGED
@@ -24,16 +24,16 @@ class Settings(BaseSettings):
24
  'accept-language': 'zh-CN,zh;q=0.9',
25
  'content-type': 'application/json',
26
  'origin': 'http://216.24.57.252',
27
- 'priority': 'u=1, i',
28
- 'sec-ch-ua': '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"',
 
 
29
  'sec-ch-ua-mobile': '?0',
30
  'sec-ch-ua-platform': '"Windows"',
31
  'sec-fetch-dest': 'empty',
32
  'sec-fetch-mode': 'cors',
33
  'sec-fetch-site': 'same-origin',
34
- 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36',
35
- 'Host': '216.24.57.252',
36
- 'referer': 'http://216.24.57.252/'
37
  }
38
 
39
  ALLOWED_MODELS: List[Dict[str, str]] = [
 
24
  'accept-language': 'zh-CN,zh;q=0.9',
25
  'content-type': 'application/json',
26
  'origin': 'http://216.24.57.252',
27
+ 'referer': 'http://216.24.57.252/',
28
+ 'host': '216.24.57.252',
29
+ 'connection': 'keep-alive',
30
+ 'sec-ch-ua': '"Not_A Brand";v="8", "Chromium";v="120", "Google Chrome";v="120"',
31
  'sec-ch-ua-mobile': '?0',
32
  'sec-ch-ua-platform': '"Windows"',
33
  'sec-fetch-dest': 'empty',
34
  'sec-fetch-mode': 'cors',
35
  'sec-fetch-site': 'same-origin',
36
+ 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
 
 
37
  }
38
 
39
  ALLOWED_MODELS: List[Dict[str, str]] = [
app/api/utils.py CHANGED
@@ -61,8 +61,6 @@ def message_to_dict(message):
61
  return {"role": message.role, "content": message.content}
62
 
63
  async def process_streaming_response(request: ChatRequest):
64
- search_results = [] # 初始化搜索结果数组
65
-
66
  json_data = {
67
  "messages": [message_to_dict(msg) for msg in request.messages],
68
  "previewToken": None,
@@ -82,71 +80,60 @@ async def process_streaming_response(request: ChatRequest):
82
  "clickedForceWebSearch": False,
83
  "visitFromDelta": False,
84
  "mobileClient": False,
85
- "userSelectedModel": MODEL_MAPPING.get(request.model),
86
  "validated": validate.getVid(),
87
  "webSearchModePrompt": True if request.model.endswith("-search") else False
88
  }
89
 
90
- async with httpx.AsyncClient(verify=False) as client:
91
- try:
92
  async with client.stream(
93
- "POST",
94
- f"{BASE_URL}/api/chat",
95
  headers=settings.HEADERS,
96
- json=json_data,
97
- timeout=100,
98
  ) as response:
99
  response.raise_for_status()
100
  timestamp = int(datetime.now().timestamp())
101
- async for line in response.aiter_lines():
102
- if line:
103
- if line.startswith("$~~~$"): # 处理搜索结果
104
- try:
105
- json_str = line[5:-5] # 提取中间的JSON字符串
106
- results = json.loads(json_str)
107
- search_results = results # 保存搜索结果
108
- continue
109
- except json.JSONDecodeError:
110
- logger.error("Failed to parse search results")
111
- continue
112
 
113
- if line == "**":
 
 
 
 
 
 
 
 
114
  continue
115
- content = line + "\n"
116
- print(content)
117
- if "http://216.24.57.252" in content:
118
- validate.getVid(True)
119
- content = "vid已刷新,重新对话即可\n"
120
- yield f"data: {json.dumps(create_chat_completion_data(content, request.model, timestamp))}\n\n"
121
- break
122
- if content.startswith("$@$v=undefined-rv1$@$"):
123
- yield f"data: {json.dumps(create_chat_completion_data(content[21:], request.model, timestamp))}\n\n"
124
- else:
125
- yield f"data: {json.dumps(create_chat_completion_data(content, request.model, timestamp))}\n\n"
126
- elif line == "":
127
- content = line + "\n\n"
128
- print(content)
129
- if "http://216.24.57.252" in content:
130
- validate.getVid(True)
131
- content = "vid已刷新,重新对话即可\n"
132
- yield f"data: {json.dumps(create_chat_completion_data(content, request.model, timestamp))}\n\n"
133
- break
134
- if content.startswith("$@$v=undefined-rv1$@$"):
135
- yield f"data: {json.dumps(create_chat_completion_data(content[21:], request.model, timestamp))}\n\n"
136
- else:
137
- yield f"data: {json.dumps(create_chat_completion_data(content, request.model, timestamp))}\n\n"
138
  if search_results: # 在结束前输出引用来源
139
  sources = "\n\n**引用来源**\n" + "\n".join([f"- [{r['title']}]({r['link']})" for r in search_results])
140
  yield f"data: {json.dumps(create_chat_completion_data(sources, request.model, timestamp))}\n\n"
141
-
142
- yield f"data: {json.dumps(create_chat_completion_data('', request.model, timestamp, 'stop'))}\n\n"
143
- yield "data: [DONE]\n\n"
144
- except httpx.HTTPStatusError as e:
145
- logger.error(f"HTTP error occurred: {e}")
146
- raise HTTPException(status_code=e.response.status_code, detail=str(e))
147
- except httpx.RequestError as e:
148
- logger.error(f"Error occurred during request: {e}")
149
- raise HTTPException(status_code=500, detail=str(e))
150
 
151
  async def process_non_streaming_response(request: ChatRequest):
152
  json_data = {
 
61
  return {"role": message.role, "content": message.content}
62
 
63
  async def process_streaming_response(request: ChatRequest):
 
 
64
  json_data = {
65
  "messages": [message_to_dict(msg) for msg in request.messages],
66
  "previewToken": None,
 
80
  "clickedForceWebSearch": False,
81
  "visitFromDelta": False,
82
  "mobileClient": False,
83
+ "userSelectedModel": settings.MODEL_MAPPING.get(request.model),
84
  "validated": validate.getVid(),
85
  "webSearchModePrompt": True if request.model.endswith("-search") else False
86
  }
87
 
88
+ try:
89
+ async with httpx.AsyncClient(verify=False) as client:
90
  async with client.stream(
91
+ method="POST",
92
+ url=f"{settings.BASE_URL}/api/chat",
93
  headers=settings.HEADERS,
94
+ json=json_data
 
95
  ) as response:
96
  response.raise_for_status()
97
  timestamp = int(datetime.now().timestamp())
98
+ search_results = None
 
 
 
 
 
 
 
 
 
 
99
 
100
+ async for line in response.aiter_lines():
101
+ if not line:
102
+ continue
103
+
104
+ if line.startswith("$~~~$"): # 处理搜索结果
105
+ try:
106
+ json_str = line[5:-5] # 提取中间的JSON字符串
107
+ results = json.loads(json_str)
108
+ search_results = results # 保存搜索结果
109
  continue
110
+ except json.JSONDecodeError:
111
+ logger.error("Failed to parse search results")
112
+ continue
113
+
114
+ if line == "**":
115
+ continue
116
+ content = line + "\n"
117
+ print(content)
118
+ if "http://216.24.57.252" in content:
119
+ validate.getVid(True)
120
+ content = "vid已刷新,重新对话即可\n"
121
+ yield f"data: {json.dumps(create_chat_completion_data(content, request.model, timestamp))}\n\n"
122
+ break
123
+ if content.startswith("$@$v=undefined-rv1$@$"):
124
+ yield f"data: {json.dumps(create_chat_completion_data(content[21:], request.model, timestamp))}\n\n"
125
+ else:
126
+ yield f"data: {json.dumps(create_chat_completion_data(content, request.model, timestamp))}\n\n"
127
+
 
 
 
 
 
128
  if search_results: # 在结束前输出引用来源
129
  sources = "\n\n**引用来源**\n" + "\n".join([f"- [{r['title']}]({r['link']})" for r in search_results])
130
  yield f"data: {json.dumps(create_chat_completion_data(sources, request.model, timestamp))}\n\n"
131
+ except httpx.HTTPStatusError as e:
132
+ logger.error(f"HTTP error occurred: {str(e)}")
133
+ raise HTTPException(status_code=e.response.status_code, detail=str(e))
134
+ except Exception as e:
135
+ logger.error(f"Error occurred: {str(e)}")
136
+ raise HTTPException(status_code=500, detail=str(e))
 
 
 
137
 
138
  async def process_non_streaming_response(request: ChatRequest):
139
  json_data = {