Faffio commited on
Commit
2d9f3ba
·
1 Parent(s): 4d96bb5

Final Update

Browse files
Files changed (1) hide show
  1. app/api/main.py +30 -2
app/api/main.py CHANGED
@@ -29,10 +29,16 @@ def log_prediction(query, text, sentiment, confidence):
29
  writer.writerow([datetime.now(), query, text, sentiment, confidence])
30
 
31
  # --- MODELLI DATI (Pydantic) ---
 
 
 
 
 
32
  class AnalysisRequest(BaseModel):
33
- query: str # Es. "Tesla"
34
  limit: int = 5
35
 
 
36
  class SingleResult(BaseModel):
37
  text: str
38
  sentiment: str
@@ -41,7 +47,7 @@ class SingleResult(BaseModel):
41
  class AnalysisResponse(BaseModel):
42
  query: str
43
  results: List[SingleResult]
44
- summary: dict # Es. {"positive": 3, "negative": 1}
45
 
46
  # --- ENDPOINTS ---
47
 
@@ -52,6 +58,28 @@ def health_check():
52
  return {"status": "ok", "model_loaded": True}
53
  raise HTTPException(status_code=503, detail="Model not loaded")
54
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
55
  @app.post("/analyze", response_model=AnalysisResponse)
56
  def analyze_company(request: AnalysisRequest):
57
  # --- DEBUG PRINT ---
 
29
  writer.writerow([datetime.now(), query, text, sentiment, confidence])
30
 
31
  # --- MODELLI DATI (Pydantic) ---
32
+ # 1. Modello per la richiesta singola (/predict)
33
+ class SentimentRequest(BaseModel):
34
+ text: str
35
+
36
+ # 2. Modello per la richiesta complessa (/analyze)
37
  class AnalysisRequest(BaseModel):
38
+ query: str
39
  limit: int = 5
40
 
41
+ # 3. Modello per il risultato singolo (usato da entrambi)
42
  class SingleResult(BaseModel):
43
  text: str
44
  sentiment: str
 
47
  class AnalysisResponse(BaseModel):
48
  query: str
49
  results: List[SingleResult]
50
+ summary: dict
51
 
52
  # --- ENDPOINTS ---
53
 
 
58
  return {"status": "ok", "model_loaded": True}
59
  raise HTTPException(status_code=503, detail="Model not loaded")
60
 
61
+ # --- ENDPOINT 1: PREVISIONE PURA (Utilizzabile per implementazioni dirette) ---
62
+ @app.post("/predict", response_model=SingleResult)
63
+ def predict_sentiment(request: SentimentRequest):
64
+ """
65
+ Analizza un singolo testo manuale.
66
+ Utile per test unitari o integrazioni dirette.
67
+ """
68
+ try:
69
+ sentiment, confidence = model_instance.predict(request.text)
70
+
71
+ # Logghiamo usando "MANUAL" come query per distinguerlo nel CSV
72
+ log_prediction("MANUAL_INPUT", request.text, sentiment, confidence)
73
+
74
+ return {
75
+ "text": request.text,
76
+ "sentiment": sentiment,
77
+ "confidence": confidence
78
+ }
79
+ except Exception as e:
80
+ raise HTTPException(status_code=500, detail=str(e))
81
+
82
+ # --- ENDPOINT 2: Scarping + AI Classification
83
  @app.post("/analyze", response_model=AnalysisResponse)
84
  def analyze_company(request: AnalysisRequest):
85
  # --- DEBUG PRINT ---