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()}"
|