EnzGamers commited on
Commit
857e3f5
·
verified ·
1 Parent(s): 9da3484

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +54 -0
app.py ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from fastapi import FastAPI
2
+ from pydantic import BaseModel
3
+ import torch
4
+ from transformers import AutoModelForCausalLM, AutoTokenizer
5
+
6
+ # --- Configuration ---
7
+ # ON UTILISE LE MODÈLE DEEPSEEK CODER 1.3B INSTRUCT
8
+ MODEL_ID = "deepseek-ai/deepseek-coder-1.3b-instruct"
9
+ DEVICE = "cpu"
10
+
11
+ # --- Chargement du modèle et du tokenizer ---
12
+ # Cette étape peut prendre quelques minutes au premier démarrage du Space
13
+ print(f"Début du chargement du modèle : {MODEL_ID}")
14
+ model = AutoModelForCausalLM.from_pretrained(
15
+ MODEL_ID,
16
+ torch_dtype=torch.bfloat16, # bfloat16 est efficace sur CPU
17
+ device_map=DEVICE
18
+ )
19
+ tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)
20
+ print("Modèle et tokenizer chargés avec succès sur le CPU.")
21
+
22
+ # --- Création de l'application API ---
23
+ app = FastAPI()
24
+
25
+ # Modèle de données pour la requête d'entrée
26
+ class PromptRequest(BaseModel):
27
+ prompt: str
28
+ max_new_tokens: int = 250
29
+
30
+ # --- Définition de l'API ---
31
+ @app.post("/generate")
32
+ async def generate_code(request: PromptRequest):
33
+ """
34
+ Endpoint pour générer du code à partir d'un prompt.
35
+ """
36
+ # Le modèle DeepSeek Instruct utilise un format de chat spécifique
37
+ messages = [
38
+ {'role': 'user', 'content': request.prompt}
39
+ ]
40
+
41
+ # Préparation des inputs pour le modèle
42
+ inputs = tokenizer.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt").to(DEVICE)
43
+
44
+ # Génération du code. Soyez patient, cela peut prendre plusieurs secondes sur CPU.
45
+ outputs = model.generate(inputs, max_new_tokens=request.max_new_tokens, do_sample=True, temperature=0.2, top_k=50, top_p=0.95, num_return_sequences=1, eos_token_id=tokenizer.eos_token_id)
46
+
47
+ # Décodage de la réponse
48
+ response = tokenizer.decode(outputs[0][len(inputs[0]):], skip_special_tokens=True)
49
+
50
+ return {"generated_text": response}
51
+
52
+ @app.get("/")
53
+ def root():
54
+ return {"status": "API en ligne", "model_id": MODEL_ID, "message": "Ce modèle tourne sur un CPU gratuit."}