Update api/utils.py
Browse files- api/utils.py +25 -9
api/utils.py
CHANGED
@@ -3,7 +3,6 @@ import json
|
|
3 |
import uuid
|
4 |
import asyncio
|
5 |
import random
|
6 |
-
import string
|
7 |
from typing import Any, Dict, Optional
|
8 |
|
9 |
import httpx
|
@@ -16,9 +15,8 @@ from api.config import (
|
|
16 |
AGENT_MODE,
|
17 |
TRENDING_AGENT_MODE,
|
18 |
MODEL_PREFIXES,
|
19 |
-
MODEL_REFERERS
|
20 |
)
|
21 |
-
from api.models import ChatRequest
|
22 |
from api.logger import setup_logger
|
23 |
from api.validate import getHid # Import the asynchronous getHid function
|
24 |
|
@@ -27,7 +25,7 @@ logger = setup_logger(__name__)
|
|
27 |
# Define the blocked message
|
28 |
BLOCKED_MESSAGE = "Generated by BLACKBOX.AI, try unlimited chat https://www.blackbox.ai"
|
29 |
|
30 |
-
#
|
31 |
def create_chat_completion_data(
|
32 |
content: str, model: str, timestamp: int, finish_reason: Optional[str] = None
|
33 |
) -> Dict[str, Any]:
|
@@ -48,12 +46,30 @@ def create_chat_completion_data(
|
|
48 |
|
49 |
# Function to convert message to dictionary format, ensuring base64 data and optional model prefix
|
50 |
def message_to_dict(message, model_prefix: Optional[str] = None):
|
51 |
-
content = message.content
|
52 |
if model_prefix:
|
53 |
content = f"{model_prefix} {content}"
|
54 |
message_dict = {"role": message.role, "content": content}
|
55 |
-
|
56 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
57 |
return message_dict
|
58 |
|
59 |
# Function to strip model prefix from content if present
|
@@ -64,7 +80,7 @@ def strip_model_prefix(content: str, model_prefix: Optional[str] = None) -> str:
|
|
64 |
return content[len(model_prefix):].strip()
|
65 |
return content
|
66 |
|
67 |
-
# Process streaming response
|
68 |
async def process_streaming_response(request: ChatRequest):
|
69 |
# Generate a unique ID for this request
|
70 |
request_id = f"chatcmpl-{uuid.uuid4()}"
|
@@ -148,7 +164,7 @@ async def process_streaming_response(request: ChatRequest):
|
|
148 |
logger.error(f"Error occurred during request for Request ID {request_id}: {e}")
|
149 |
raise HTTPException(status_code=500, detail=str(e))
|
150 |
|
151 |
-
# Process non-streaming response
|
152 |
async def process_non_streaming_response(request: ChatRequest):
|
153 |
# Generate a unique ID for this request
|
154 |
request_id = f"chatcmpl-{uuid.uuid4()}"
|
|
|
3 |
import uuid
|
4 |
import asyncio
|
5 |
import random
|
|
|
6 |
from typing import Any, Dict, Optional
|
7 |
|
8 |
import httpx
|
|
|
15 |
AGENT_MODE,
|
16 |
TRENDING_AGENT_MODE,
|
17 |
MODEL_PREFIXES,
|
|
|
18 |
)
|
19 |
+
from api.models import ChatRequest, Message # Ensure Message is imported
|
20 |
from api.logger import setup_logger
|
21 |
from api.validate import getHid # Import the asynchronous getHid function
|
22 |
|
|
|
25 |
# Define the blocked message
|
26 |
BLOCKED_MESSAGE = "Generated by BLACKBOX.AI, try unlimited chat https://www.blackbox.ai"
|
27 |
|
28 |
+
# Function to create chat completion data
|
29 |
def create_chat_completion_data(
|
30 |
content: str, model: str, timestamp: int, finish_reason: Optional[str] = None
|
31 |
) -> Dict[str, Any]:
|
|
|
46 |
|
47 |
# Function to convert message to dictionary format, ensuring base64 data and optional model prefix
|
48 |
def message_to_dict(message, model_prefix: Optional[str] = None):
|
49 |
+
content = message.content
|
50 |
if model_prefix:
|
51 |
content = f"{model_prefix} {content}"
|
52 |
message_dict = {"role": message.role, "content": content}
|
53 |
+
|
54 |
+
# Check if the message includes an image in base64 format
|
55 |
+
if hasattr(message, 'image_base64') and message.image_base64:
|
56 |
+
# Ensure the base64 image data has the correct data URI prefix
|
57 |
+
image_base64 = message.image_base64
|
58 |
+
if not image_base64.startswith('data:image/'):
|
59 |
+
# Assuming JPEG format; adjust if necessary
|
60 |
+
image_base64 = f"data:image/jpeg;base64,{image_base64}"
|
61 |
+
# Generate a unique file path or name
|
62 |
+
file_name = f"image_{uuid.uuid4()}.jpg"
|
63 |
+
message_dict['data'] = {
|
64 |
+
'imagesData': [
|
65 |
+
{
|
66 |
+
'filePath': file_name,
|
67 |
+
'contents': image_base64
|
68 |
+
}
|
69 |
+
],
|
70 |
+
'fileText': '',
|
71 |
+
'title': ''
|
72 |
+
}
|
73 |
return message_dict
|
74 |
|
75 |
# Function to strip model prefix from content if present
|
|
|
80 |
return content[len(model_prefix):].strip()
|
81 |
return content
|
82 |
|
83 |
+
# Process streaming response
|
84 |
async def process_streaming_response(request: ChatRequest):
|
85 |
# Generate a unique ID for this request
|
86 |
request_id = f"chatcmpl-{uuid.uuid4()}"
|
|
|
164 |
logger.error(f"Error occurred during request for Request ID {request_id}: {e}")
|
165 |
raise HTTPException(status_code=500, detail=str(e))
|
166 |
|
167 |
+
# Process non-streaming response
|
168 |
async def process_non_streaming_response(request: ChatRequest):
|
169 |
# Generate a unique ID for this request
|
170 |
request_id = f"chatcmpl-{uuid.uuid4()}"
|