Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -4,6 +4,7 @@ import torch
|
|
| 4 |
from transformers import AutoModelForCausalLM, AutoTokenizer
|
| 5 |
import time
|
| 6 |
import uuid
|
|
|
|
| 7 |
|
| 8 |
# --- Configuration ---
|
| 9 |
MODEL_ID = "deepseek-ai/deepseek-coder-1.3b-instruct"
|
|
@@ -28,9 +29,10 @@ class ChatMessage(BaseModel):
|
|
| 28 |
content: str
|
| 29 |
|
| 30 |
class ChatCompletionRequest(BaseModel):
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
|
|
|
| 34 |
|
| 35 |
class ChatCompletionResponseChoice(BaseModel):
|
| 36 |
index: int = 0
|
|
@@ -42,15 +44,29 @@ class ChatCompletionResponse(BaseModel):
|
|
| 42 |
object: str = "chat.completion"
|
| 43 |
created: int
|
| 44 |
model: str
|
| 45 |
-
choices:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 46 |
|
| 47 |
-
|
| 48 |
-
# LA SEULE LIGNE QUI CHANGE EST CELLE-CI : on a enlevé le "/v1"
|
| 49 |
-
@app.post("/chat/completions")
|
| 50 |
async def create_chat_completion(request: ChatCompletionRequest):
|
| 51 |
-
"""
|
| 52 |
-
Endpoint compatible avec l'API OpenAI Chat Completions.
|
| 53 |
-
"""
|
| 54 |
user_prompt = ""
|
| 55 |
if request.messages and request.messages[-1].role == "user":
|
| 56 |
user_prompt = request.messages[-1].content
|
|
@@ -70,7 +86,7 @@ async def create_chat_completion(request: ChatCompletionRequest):
|
|
| 70 |
completion_response = ChatCompletionResponse(
|
| 71 |
id=f"chatcmpl-{uuid.uuid4()}",
|
| 72 |
created=int(time.time()),
|
| 73 |
-
model=
|
| 74 |
choices=[choice]
|
| 75 |
)
|
| 76 |
|
|
|
|
| 4 |
from transformers import AutoModelForCausalLM, AutoTokenizer
|
| 5 |
import time
|
| 6 |
import uuid
|
| 7 |
+
from typing import Optional, List
|
| 8 |
|
| 9 |
# --- Configuration ---
|
| 10 |
MODEL_ID = "deepseek-ai/deepseek-coder-1.3b-instruct"
|
|
|
|
| 29 |
content: str
|
| 30 |
|
| 31 |
class ChatCompletionRequest(BaseModel):
|
| 32 |
+
# CHANGEMENT 1: Rendre le champ 'model' optionnel pour éviter l'erreur 422
|
| 33 |
+
model: Optional[str] = None
|
| 34 |
+
messages: List[ChatMessage]
|
| 35 |
+
max_tokens: Optional[int] = 250
|
| 36 |
|
| 37 |
class ChatCompletionResponseChoice(BaseModel):
|
| 38 |
index: int = 0
|
|
|
|
| 44 |
object: str = "chat.completion"
|
| 45 |
created: int
|
| 46 |
model: str
|
| 47 |
+
choices: List[ChatCompletionResponseChoice]
|
| 48 |
+
|
| 49 |
+
class ModelData(BaseModel):
|
| 50 |
+
id: str
|
| 51 |
+
object: str = "model"
|
| 52 |
+
created: int = int(time.time())
|
| 53 |
+
owned_by: str = "user"
|
| 54 |
+
|
| 55 |
+
class ModelList(BaseModel):
|
| 56 |
+
object: str = "list"
|
| 57 |
+
data: List[ModelData]
|
| 58 |
+
|
| 59 |
+
# --- Définition des API ---
|
| 60 |
+
|
| 61 |
+
# CHANGEMENT 2: Ajouter un endpoint /models pour satisfaire l'extension
|
| 62 |
+
@app.get("/models", response_model=ModelList)
|
| 63 |
+
async def list_models():
|
| 64 |
+
"""Endpoint pour lister les modèles disponibles."""
|
| 65 |
+
return ModelList(data=[ModelData(id=MODEL_ID)])
|
| 66 |
|
| 67 |
+
@app.post("/chat/completions", response_model=ChatCompletionResponse)
|
|
|
|
|
|
|
| 68 |
async def create_chat_completion(request: ChatCompletionRequest):
|
| 69 |
+
"""Endpoint principal pour la génération de texte."""
|
|
|
|
|
|
|
| 70 |
user_prompt = ""
|
| 71 |
if request.messages and request.messages[-1].role == "user":
|
| 72 |
user_prompt = request.messages[-1].content
|
|
|
|
| 86 |
completion_response = ChatCompletionResponse(
|
| 87 |
id=f"chatcmpl-{uuid.uuid4()}",
|
| 88 |
created=int(time.time()),
|
| 89 |
+
model=MODEL_ID,
|
| 90 |
choices=[choice]
|
| 91 |
)
|
| 92 |
|