from fastapi import FastAPI,HTTPException,status,UploadFile,File
from pydantic import BaseModel
import uvicorn
import logging
import torch
import ollama
import os
import numpy as np
from fastapi.responses import Response
import requests
from fastapi.middleware.cors import CORSMiddleware

os.environ['TRANSFORMERS_CACHE'] = '/app/.cache'
os.environ['HF_HOME'] = '/app/.cache'
 
Informations = """ 
-text : Texte à resumé 

output:
- Text summary : texte resumé
"""

app =FastAPI(
    title='Text Summary',
    description =Informations
)  
 
#class to define the input text 
logging.basicConfig(level=logging.INFO)
logger =logging.getLogger(__name__)
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

DEFAULT_PROMPT = "Résumez la plainte suivante en 5 phrases concises, en vous concentrant sur les faits principaux et en évitant toute introduction générique : "
class TextSummary(BaseModel): 
    prompt:str 
    
@app.get("/")
async def home():
    return 'STN BIG DATA'
# Fonction pour générer du texte à partir d'une requête
# Modèle pour la requête
class RequestModel(BaseModel):
    text: str
@app.post("/generate/")
async def generate_text(request: RequestModel):
    # Assurer la configuration pour une utilisation optimale de la mémoire
    try:
        # Combinaison du prompt par défaut et du texte de l'utilisateur
        full_prompt = DEFAULT_PROMPT + request.text

        # Utilisation de l'API Ollama
        res = requests.post('http://localhost:11434/api/generate', json={
            "prompt": full_prompt,
            "stream": False,
            "model": "llama3"
        })
        
        # Vérification de la réponse
        if res.status_code != 200:
            print("response",res)
            raise HTTPException(status_code=res.status_code, detail="Erreur de l'API Ollama")
        # Extraction du texte généré
        generated_text = res.json().get('response', '')

        # Traitement du texte pour supprimer les phrases génériques
        intro_phrases = [
            "Voici un résumé de la plainte en 5 phrases :",
            "Résumé :",
            "Voici ce qui s'est passé :",
            "Cette plainte a été déposée par"
        ]
        
        for phrase in intro_phrases:
            if generated_text.startswith(phrase):
                generated_text = generated_text[len(phrase):].strip()
                break

        return {"summary_text_2": generated_text}

    except requests.RequestException as e:
        raise HTTPException(status_code=500, detail=f"Erreur de requête : {str(e)}")
    except Exception as e:
        raise HTTPException(status_code=500, detail=f"Erreur inattendue : {str(e)}")

if __name__ == "__main__":
    uvicorn.run("app:app",host="0.0.0.0", port=8000,reload=True)