Niansuh commited on
Commit
011db4b
·
verified ·
1 Parent(s): 16f7793

Update api/utils.py

Browse files
Files changed (1) hide show
  1. api/utils.py +34 -40
api/utils.py CHANGED
@@ -1,5 +1,3 @@
1
- # api/utils.py
2
-
3
  from datetime import datetime
4
  from http.client import HTTPException
5
  import json
@@ -7,15 +5,19 @@ from typing import Any, Dict, Optional
7
  import uuid
8
 
9
  import httpx
10
- from api.config import MODEL_MAPPING, headers, BASE_URL, validate, model_prefixes
11
- from fastapi import Depends
12
- from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
 
 
 
 
13
  from api.models import ChatRequest
 
14
  from api.logger import setup_logger
15
 
16
  logger = setup_logger(__name__)
17
 
18
- from api.config import resolve_model
19
 
20
  def create_chat_completion_data(
21
  content: str, model: str, timestamp: int, finish_reason: Optional[str] = None
@@ -35,37 +37,38 @@ def create_chat_completion_data(
35
  "usage": None,
36
  }
37
 
38
- def verify_app_secret(credentials: HTTPAuthorizationCredentials = Depends(HTTPBearer())):
39
- from api.config import APP_SECRET
40
  if credentials.credentials != APP_SECRET:
41
  raise HTTPException(status_code=403, detail="Invalid APP_SECRET")
42
  return credentials.credentials
43
 
 
44
  def message_to_dict(message):
45
  if isinstance(message.content, str):
46
  return {"role": message.role, "content": message.content}
47
  elif isinstance(message.content, list) and len(message.content) == 2:
48
  return {
49
  "role": message.role,
50
- "content": message.content[0].get("text", ""),
51
  "data": {
52
- "imageBase64": message.content[1].get("image_url", {}).get("url", ""),
53
  "fileText": "",
54
- "title": "snapshot",
55
  },
56
  }
57
  else:
58
  return {"role": message.role, "content": message.content}
59
 
60
- async def process_streaming_response(request: ChatRequest, resolved_model: str):
61
- from api.config import validate
62
  json_data = {
63
  "messages": [message_to_dict(msg) for msg in request.messages],
64
  "previewToken": None,
65
  "userId": None,
66
  "codeModelMode": True,
67
- "agentMode": {}, # Adjust if agentMode is needed
68
- "trendingAgentMode": {}, # Adjust if trendingAgentMode is needed
69
  "isMicMode": False,
70
  "userSystemPrompt": None,
71
  "maxTokens": request.max_tokens,
@@ -78,7 +81,7 @@ async def process_streaming_response(request: ChatRequest, resolved_model: str):
78
  "clickedForceWebSearch": False,
79
  "visitFromDelta": False,
80
  "mobileClient": False,
81
- "userSelectedModel": resolved_model,
82
  "validated": validate.getHid()
83
  }
84
 
@@ -99,14 +102,14 @@ async def process_streaming_response(request: ChatRequest, resolved_model: str):
99
  if "https://www.blackbox.ai" in content:
100
  validate.getHid(True)
101
  content = "hid已刷新,重新对话即可\n"
102
- yield f"data: {json.dumps(create_chat_completion_data(content, resolved_model, timestamp))}\n\n"
103
  break
104
  if content.startswith("$@$v=undefined-rv1$@$"):
105
- yield f"data: {json.dumps(create_chat_completion_data(content[21:], resolved_model, timestamp))}\n\n"
106
  else:
107
- yield f"data: {json.dumps(create_chat_completion_data(content, resolved_model, timestamp))}\n\n"
108
 
109
- yield f"data: {json.dumps(create_chat_completion_data('', resolved_model, timestamp, 'stop'))}\n\n"
110
  yield "data: [DONE]\n\n"
111
  except httpx.HTTPStatusError as e:
112
  logger.error(f"HTTP error occurred: {e}")
@@ -115,15 +118,15 @@ async def process_streaming_response(request: ChatRequest, resolved_model: str):
115
  logger.error(f"Error occurred during request: {e}")
116
  raise HTTPException(status_code=500, detail=str(e))
117
 
118
- async def process_non_streaming_response(request: ChatRequest, resolved_model: str):
119
- from api.config import validate
120
  json_data = {
121
  "messages": [message_to_dict(msg) for msg in request.messages],
122
  "previewToken": None,
123
  "userId": None,
124
  "codeModelMode": True,
125
- "agentMode": {}, # Adjust if agentMode is needed
126
- "trendingAgentMode": {}, # Adjust if trendingAgentMode is needed
127
  "isMicMode": False,
128
  "userSystemPrompt": None,
129
  "maxTokens": request.max_tokens,
@@ -136,25 +139,16 @@ async def process_non_streaming_response(request: ChatRequest, resolved_model: s
136
  "clickedForceWebSearch": False,
137
  "visitFromDelta": False,
138
  "mobileClient": False,
139
- "userSelectedModel": resolved_model,
140
  "validated": validate.getHid()
141
  }
142
  full_response = ""
143
  async with httpx.AsyncClient() as client:
144
- try:
145
- async with client.stream(
146
- method="POST", url=f"{BASE_URL}/api/chat", headers=headers, json=json_data
147
- ) as response:
148
- response.raise_for_status()
149
- async for chunk in response.aiter_text():
150
- full_response += chunk
151
- except httpx.HTTPStatusError as e:
152
- logger.error(f"HTTP error occurred: {e}")
153
- raise HTTPException(status_code=e.response.status_code, detail=str(e))
154
- except httpx.RequestError as e:
155
- logger.error(f"Error occurred during request: {e}")
156
- raise HTTPException(status_code=500, detail=str(e))
157
-
158
  if "https://www.blackbox.ai" in full_response:
159
  validate.getHid(True)
160
  full_response = "hid已刷新,重新对话即可"
@@ -164,7 +158,7 @@ async def process_non_streaming_response(request: ChatRequest, resolved_model: s
164
  "id": f"chatcmpl-{uuid.uuid4()}",
165
  "object": "chat.completion",
166
  "created": int(datetime.now().timestamp()),
167
- "model": resolved_model,
168
  "choices": [
169
  {
170
  "index": 0,
 
 
 
1
  from datetime import datetime
2
  from http.client import HTTPException
3
  import json
 
5
  import uuid
6
 
7
  import httpx
8
+ from api import validate
9
+ from api.config import MODEL_MAPPING, headers
10
+ from fastapi import Depends, security
11
+ from fastapi.security import HTTPAuthorizationCredentials
12
+
13
+ from api.config import APP_SECRET, BASE_URL
14
+ from api.config import MODEL_MAPPING, headers, agentMode, trendingAgentMode
15
  from api.models import ChatRequest
16
+
17
  from api.logger import setup_logger
18
 
19
  logger = setup_logger(__name__)
20
 
 
21
 
22
  def create_chat_completion_data(
23
  content: str, model: str, timestamp: int, finish_reason: Optional[str] = None
 
37
  "usage": None,
38
  }
39
 
40
+
41
+ def verify_app_secret(credentials: HTTPAuthorizationCredentials = Depends(security)):
42
  if credentials.credentials != APP_SECRET:
43
  raise HTTPException(status_code=403, detail="Invalid APP_SECRET")
44
  return credentials.credentials
45
 
46
+
47
  def message_to_dict(message):
48
  if isinstance(message.content, str):
49
  return {"role": message.role, "content": message.content}
50
  elif isinstance(message.content, list) and len(message.content) == 2:
51
  return {
52
  "role": message.role,
53
+ "content": message.content[0]["text"],
54
  "data": {
55
+ "imageBase64": message.content[1]["image_url"]["url"],
56
  "fileText": "",
57
+ "title": "snapshoot",
58
  },
59
  }
60
  else:
61
  return {"role": message.role, "content": message.content}
62
 
63
+
64
+ async def process_streaming_response(request: ChatRequest):
65
  json_data = {
66
  "messages": [message_to_dict(msg) for msg in request.messages],
67
  "previewToken": None,
68
  "userId": None,
69
  "codeModelMode": True,
70
+ "agentMode": agentMode,
71
+ "trendingAgentMode": trendingAgentMode,
72
  "isMicMode": False,
73
  "userSystemPrompt": None,
74
  "maxTokens": request.max_tokens,
 
81
  "clickedForceWebSearch": False,
82
  "visitFromDelta": False,
83
  "mobileClient": False,
84
+ "userSelectedModel": MODEL_MAPPING.get(request.model),
85
  "validated": validate.getHid()
86
  }
87
 
 
102
  if "https://www.blackbox.ai" in content:
103
  validate.getHid(True)
104
  content = "hid已刷新,重新对话即可\n"
105
+ yield f"data: {json.dumps(create_chat_completion_data(content, request.model, timestamp))}\n\n"
106
  break
107
  if content.startswith("$@$v=undefined-rv1$@$"):
108
+ yield f"data: {json.dumps(create_chat_completion_data(content[21:], request.model, timestamp))}\n\n"
109
  else:
110
+ yield f"data: {json.dumps(create_chat_completion_data(content, request.model, timestamp))}\n\n"
111
 
112
+ yield f"data: {json.dumps(create_chat_completion_data('', request.model, timestamp, 'stop'))}\n\n"
113
  yield "data: [DONE]\n\n"
114
  except httpx.HTTPStatusError as e:
115
  logger.error(f"HTTP error occurred: {e}")
 
118
  logger.error(f"Error occurred during request: {e}")
119
  raise HTTPException(status_code=500, detail=str(e))
120
 
121
+
122
+ async def process_non_streaming_response(request: ChatRequest):
123
  json_data = {
124
  "messages": [message_to_dict(msg) for msg in request.messages],
125
  "previewToken": None,
126
  "userId": None,
127
  "codeModelMode": True,
128
+ "agentMode": agentMode,
129
+ "trendingAgentMode": trendingAgentMode,
130
  "isMicMode": False,
131
  "userSystemPrompt": None,
132
  "maxTokens": request.max_tokens,
 
139
  "clickedForceWebSearch": False,
140
  "visitFromDelta": False,
141
  "mobileClient": False,
142
+ "userSelectedModel": MODEL_MAPPING.get(request.model),
143
  "validated": validate.getHid()
144
  }
145
  full_response = ""
146
  async with httpx.AsyncClient() as client:
147
+ async with client.stream(
148
+ method="POST", url=f"{BASE_URL}/api/chat", headers=headers, json=json_data
149
+ ) as response:
150
+ async for chunk in response.aiter_text():
151
+ full_response += chunk
 
 
 
 
 
 
 
 
 
152
  if "https://www.blackbox.ai" in full_response:
153
  validate.getHid(True)
154
  full_response = "hid已刷新,重新对话即可"
 
158
  "id": f"chatcmpl-{uuid.uuid4()}",
159
  "object": "chat.completion",
160
  "created": int(datetime.now().timestamp()),
161
+ "model": request.model,
162
  "choices": [
163
  {
164
  "index": 0,