Spaces:
mxrkai
/
Runtime error

File size: 4,419 Bytes
dd52fd4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7b631fd
dd52fd4
 
 
 
 
 
 
 
 
 
 
 
 
 
7b631fd
dd52fd4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7b631fd
 
dd52fd4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7b631fd
dd52fd4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7b631fd
dd52fd4
 
7b631fd
 
 
 
 
 
 
 
dd52fd4
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
from datetime import datetime
import json
from typing import Any, Dict, Optional

import httpx
from api.config import (
    MODEL_MAPPING,
    headers,
    AGENT_MODE,
    TRENDING_AGENT_MODE,
    BASE_URL,
    MODEL_PREFIXES,
    MODEL_REFERERS
)
from fastapi import HTTPException
from api.models import ChatRequest

from api.logger import setup_logger

import uuid  # Ensure this is imported if needed elsewhere

logger = setup_logger(__name__)

async def process_streaming_response(request: ChatRequest):
    agent_mode = AGENT_MODE.get(request.model, {})
    trending_agent_mode = TRENDING_AGENT_MODE.get(request.model, {})
    referer_path = MODEL_REFERERS.get(request.model, f"/?model={request.model}")
    referer_url = f"{BASE_URL}{referer_path}"

    # Update headers with dynamic Referer
    dynamic_headers = headers.copy()
    dynamic_headers['Referer'] = referer_url

    json_data = {
        "messages": request.messages,  # Directly pass messages without processing
        "previewToken": None,
        "userId": None,
        "codeModelMode": True,
        "agentMode": agent_mode,
        "trendingAgentMode": trending_agent_mode,
        "isMicMode": False,
        "userSystemPrompt": None,
        "maxTokens": request.max_tokens,
        "playgroundTopP": request.top_p,
        "playgroundTemperature": request.temperature,
        "isChromeExt": False,
        "githubToken": None,
        "clickedAnswer2": False,
        "clickedAnswer3": False,
        "clickedForceWebSearch": False,
        "visitFromDelta": False,
        "mobileClient": False,
        "userSelectedModel": MODEL_MAPPING.get(request.model, request.model),
    }

    async with httpx.AsyncClient() as client:
        try:
            async with client.stream(
                "POST",
                f"{BASE_URL}/api/chat",
                headers=dynamic_headers,
                json=json_data,
                timeout=100,
            ) as response:
                response.raise_for_status()
                async for chunk in response.aiter_text():
                    yield chunk  # Directly yield the chunk without modification
        except httpx.HTTPStatusError as e:
            logger.error(f"HTTP error occurred: {e}")
            raise HTTPException(status_code=e.response.status_code, detail=str(e))
        except httpx.RequestError as e:
            logger.error(f"Error occurred during request: {e}")
            raise HTTPException(status_code=500, detail=str(e))

async def process_non_streaming_response(request: ChatRequest):
    agent_mode = AGENT_MODE.get(request.model, {})
    trending_agent_mode = TRENDING_AGENT_MODE.get(request.model, {})
    referer_path = MODEL_REFERERS.get(request.model, f"/?model={request.model}")
    referer_url = f"{BASE_URL}{referer_path}"

    # Update headers with dynamic Referer
    dynamic_headers = headers.copy()
    dynamic_headers['Referer'] = referer_url

    json_data = {
        "messages": request.messages,  # Directly pass messages without processing
        "previewToken": None,
        "userId": None,
        "codeModelMode": True,
        "agentMode": agent_mode,
        "trendingAgentMode": trending_agent_mode,
        "isMicMode": False,
        "userSystemPrompt": None,
        "maxTokens": request.max_tokens,
        "playgroundTopP": request.top_p,
        "playgroundTemperature": request.temperature,
        "isChromeExt": False,
        "githubToken": None,
        "clickedAnswer2": False,
        "clickedAnswer3": False,
        "clickedForceWebSearch": False,
        "visitFromDelta": False,
        "mobileClient": False,
        "userSelectedModel": MODEL_MAPPING.get(request.model, request.model),
    }

    async with httpx.AsyncClient() as client:
        try:
            response = await client.post(
                f"{BASE_URL}/api/chat",
                headers=dynamic_headers,
                json=json_data,
                timeout=100,
            )
            response.raise_for_status()
            return response.json()  # Directly return the JSON response
        except httpx.HTTPStatusError as e:
            logger.error(f"HTTP error occurred: {e}")
            raise HTTPException(status_code=e.response.status_code, detail=str(e))
        except httpx.RequestError as e:
            logger.error(f"Error occurred during request: {e}")
            raise HTTPException(status_code=500, detail=str(e))