Update main.py
Browse files
main.py
CHANGED
@@ -6,9 +6,7 @@ import uuid
|
|
6 |
import json
|
7 |
import logging
|
8 |
import asyncio
|
9 |
-
import time
|
10 |
import contextvars
|
11 |
-
from collections import defaultdict
|
12 |
from typing import List, Dict, Any, Optional, AsyncGenerator, Union
|
13 |
from datetime import datetime
|
14 |
|
@@ -19,7 +17,7 @@ from slowapi.middleware import SlowAPIMiddleware
|
|
19 |
from fastapi import FastAPI, HTTPException, Request, Depends, Security
|
20 |
from fastapi.responses import StreamingResponse, JSONResponse, RedirectResponse
|
21 |
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
|
22 |
-
from pydantic import BaseModel
|
23 |
|
24 |
from aiohttp import ClientSession, ClientTimeout, ClientError
|
25 |
|
@@ -456,18 +454,19 @@ async def security_middleware(request: Request, call_next):
|
|
456 |
class Message(BaseModel):
|
457 |
role: str
|
458 |
content: str
|
|
|
459 |
|
460 |
class ChatRequest(BaseModel):
|
461 |
model: str
|
462 |
messages: List[Message]
|
463 |
-
temperature: Optional[float] = 1.0
|
464 |
-
top_p: Optional[float] = 1.0
|
465 |
-
n: Optional[int] = 1
|
466 |
stream: Optional[bool] = False
|
467 |
stop: Optional[Union[str, List[str]]] = None
|
468 |
-
max_tokens: Optional[int] = None
|
469 |
-
presence_penalty: Optional[float] = 0.0
|
470 |
-
frequency_penalty: Optional[float] = 0.0
|
471 |
logit_bias: Optional[Dict[str, float]] = None
|
472 |
user: Optional[str] = None
|
473 |
webSearchMode: Optional[bool] = False # Custom parameter
|
@@ -494,6 +493,9 @@ async def chat_completions(
|
|
494 |
req: Request,
|
495 |
api_key: str = Depends(get_api_key)
|
496 |
):
|
|
|
|
|
|
|
497 |
# Redact user messages only for logging purposes
|
498 |
redacted_messages = [{"role": msg.role, "content": "[redacted]"} for msg in request.messages]
|
499 |
|
@@ -576,8 +578,6 @@ async def chat_completions(
|
|
576 |
logger.exception("An unexpected error occurred while processing the chat completions request.")
|
577 |
raise HTTPException(status_code=500, detail=str(e))
|
578 |
|
579 |
-
# Removed the /v1/completions endpoint as per user request
|
580 |
-
|
581 |
# Return 'about:blank' when accessing the endpoint via GET
|
582 |
@app.get("/v1/chat/completions")
|
583 |
async def chat_completions_get():
|
|
|
6 |
import json
|
7 |
import logging
|
8 |
import asyncio
|
|
|
9 |
import contextvars
|
|
|
10 |
from typing import List, Dict, Any, Optional, AsyncGenerator, Union
|
11 |
from datetime import datetime
|
12 |
|
|
|
17 |
from fastapi import FastAPI, HTTPException, Request, Depends, Security
|
18 |
from fastapi.responses import StreamingResponse, JSONResponse, RedirectResponse
|
19 |
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
|
20 |
+
from pydantic import BaseModel, Field
|
21 |
|
22 |
from aiohttp import ClientSession, ClientTimeout, ClientError
|
23 |
|
|
|
454 |
class Message(BaseModel):
|
455 |
role: str
|
456 |
content: str
|
457 |
+
name: Optional[str] = None # Optional field as per OpenAI's API
|
458 |
|
459 |
class ChatRequest(BaseModel):
|
460 |
model: str
|
461 |
messages: List[Message]
|
462 |
+
temperature: Optional[float] = Field(1.0, ge=0.0, le=2.0)
|
463 |
+
top_p: Optional[float] = Field(1.0, ge=0.0, le=1.0)
|
464 |
+
n: Optional[int] = Field(1, ge=1, le=10)
|
465 |
stream: Optional[bool] = False
|
466 |
stop: Optional[Union[str, List[str]]] = None
|
467 |
+
max_tokens: Optional[int] = Field(None, ge=1, le=4096)
|
468 |
+
presence_penalty: Optional[float] = Field(0.0, ge=-2.0, le=2.0)
|
469 |
+
frequency_penalty: Optional[float] = Field(0.0, ge=-2.0, le=2.0)
|
470 |
logit_bias: Optional[Dict[str, float]] = None
|
471 |
user: Optional[str] = None
|
472 |
webSearchMode: Optional[bool] = False # Custom parameter
|
|
|
493 |
req: Request,
|
494 |
api_key: str = Depends(get_api_key)
|
495 |
):
|
496 |
+
"""
|
497 |
+
Handles the /v1/chat/completions endpoint, emulating OpenAI's API.
|
498 |
+
"""
|
499 |
# Redact user messages only for logging purposes
|
500 |
redacted_messages = [{"role": msg.role, "content": "[redacted]"} for msg in request.messages]
|
501 |
|
|
|
578 |
logger.exception("An unexpected error occurred while processing the chat completions request.")
|
579 |
raise HTTPException(status_code=500, detail=str(e))
|
580 |
|
|
|
|
|
581 |
# Return 'about:blank' when accessing the endpoint via GET
|
582 |
@app.get("/v1/chat/completions")
|
583 |
async def chat_completions_get():
|