bambadij commited on
Commit
6e12dc7
·
1 Parent(s): 52d4394
Files changed (4) hide show
  1. Dockerfile +1 -3
  2. summaryT5/README.md +11 -0
  3. summaryT5/app.py +127 -0
  4. summaryT5/requirements.txt +22 -0
Dockerfile CHANGED
@@ -12,16 +12,14 @@ COPY requirements.txt /app/requirements.txt
12
  RUN pip3 install -r /app/requirements.txt
13
 
14
  # Exposer le port 7860 pour FastAPI
15
- EXPOSE 7860
16
 
17
  # Définir le volume pour les données d'Ollama
18
  VOLUME /root/.ollama
19
  # Installer socat pour rediriger le port
20
- RUN apt-get update && apt-get install -y socat
21
 
22
  # Script pour lancer Ollama, télécharger le modèle et démarrer l'application FastAPI
23
  RUN echo '#!/bin/sh\n\
24
- socat TCP-LISTEN:7860,fork TCP:127.0.0.1:11434\n\
25
  ollama serve &\n\
26
  sleep 10\n\
27
  ollama pull llama3\n\
 
12
  RUN pip3 install -r /app/requirements.txt
13
 
14
  # Exposer le port 7860 pour FastAPI
15
+ EXPOSE 11434
16
 
17
  # Définir le volume pour les données d'Ollama
18
  VOLUME /root/.ollama
19
  # Installer socat pour rediriger le port
 
20
 
21
  # Script pour lancer Ollama, télécharger le modèle et démarrer l'application FastAPI
22
  RUN echo '#!/bin/sh\n\
 
23
  ollama serve &\n\
24
  sleep 10\n\
25
  ollama pull llama3\n\
summaryT5/README.md ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: SummaryT5
3
+ emoji: 🏢
4
+ colorFrom: purple
5
+ colorTo: yellow
6
+ sdk: docker
7
+ pinned: false
8
+ license: mit
9
+ ---
10
+
11
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
summaryT5/app.py ADDED
@@ -0,0 +1,127 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #load package
2
+ from fastapi import FastAPI,HTTPException,status,UploadFile,File
3
+ from pydantic import BaseModel
4
+ import uvicorn
5
+ import logging
6
+ import torch
7
+ from transformers import T5Tokenizer, T5ForConditionalGeneration,AutoModelForCausalLM,AutoTokenizer
8
+ import os
9
+ import numpy as np
10
+ from openai import OpenAI
11
+ import ollama
12
+ from fastapi.middleware.cors import CORSMiddleware
13
+
14
+ # Configurer les répertoires de cache
15
+ os.environ['TRANSFORMERS_CACHE'] = '/app/.cache'
16
+ os.environ['HF_HOME'] = '/app/.cache'
17
+ # Charger le modèle et le tokenizer
18
+ # model_name = "models/models--t5-base/snapshots/a9723ea7f1b39c1eae772870f3b547bf6ef7e6c1"
19
+ # tokenizer = T5Tokenizer.from_pretrained(model_name)
20
+ # model = T5ForConditionalGeneration.from_pretrained(model_name)
21
+ # model = AutoModelForCausalLM.from_pretrained("THUDM/longwriter-glm4-9b", trust_remote_code=True)
22
+ # tokenizer = AutoTokenizer.from_pretrained("THUDM/longwriter-glm4-9b", trust_remote_code=True)
23
+
24
+ # Configuration du client OpenAI avec l'API NVIDIA
25
+ client = OpenAI(
26
+ base_url="https://integrate.api.nvidia.com/v1",
27
+ api_key="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"
28
+ )
29
+
30
+ #Additional information
31
+ origins = [
32
+ "https://bambadij-summaryt5.hf.space/",
33
+ "http://bambadij-summaryt5.hf.space/",
34
+ "https://integrate.api.nvidia.com/v1",
35
+ "http://localhost:8080",
36
+ ]
37
+ Informations = """
38
+ -text : Texte à resumé
39
+
40
+ output:
41
+ - Text summary : texte resumé
42
+ """
43
+
44
+ app =FastAPI(
45
+ title='Text Summary',
46
+ description =Informations
47
+ )
48
+
49
+ #class to define the input text
50
+ logging.basicConfig(level=logging.INFO)
51
+ logger =logging.getLogger(__name__)
52
+
53
+ default_prompt = """Bonjour,
54
+ en tant qu’expert dans la gestion et le traitement de plaintes réseaux chez un opérateur de télécommunications, fais moi un descriptif clair de la situation concernant la plainte dont les informations sont fournies plus bas dans ce message. Ecris la situation en 4 ou 5 phrases claires et concises, fais comme si tu parlais à un humain et rajoutes les informations relatives au Client pour une meilleure connaissance de ce dernier ainsi que des éléments de dates/délais pour être précis sur le traitement de la plainte. N’hésites pas à innover sur le ton à utiliser car n’oublies pas que tu dois faire comme si tu parlais à un humain. Ce ton peut être adapté et ne pas toujours être le même en fonction des cas.
55
+ Pour m’éviter de lire tout le détail de la plainte (voir le texte partagé plus bas), essayes de trouver toutes les informations utiles permettant de mieux appréhender la situation, par exemple : si les coordonnées GPS (Lat, Lon) sont disponibles essayes de m'indiquer le lieu où est survenue la plainte même de manière approximative. Essayes également de glaner sur internet toutes les informations pouvant aider à mieux comprendre et traiter la plainte (cela peut inclure des informations des réseaux sociaux, des concurrents, etc.) tout en priorisant dans l’analyse les informations fournies dans le texte plus bas; informations qui ont été renseignées par les experts internes chez l’opérateur de télécommunications en question et qui sont structurées en plusieurs sections :
56
+ a) Un titre de la plainte
57
+ b) Une section avec les Détails de la Plainte contenant l’objet, le numéro client, l’expéditeur, la date de création, les coordonnées géographiques (lat, lon)
58
+ c) Une section avec les états d’avancement incluant les échanges (sous format chat) entre les différents acteurs impliqués dans le traitement de la plainte
59
+ d) Une section contenant les éléments relatifs à la qualification de la plainte (type de plainte, origine, domaine, sous-domaine, etc…)
60
+ e) Une section avec les fichiers joints à la plainte et autres pièces jointes pour mieux comprendre et trouver une solution à cette plainte en vue de satisfaire le Client
61
+
62
+ Dans la situation que tu vas me donner (en quelques 4 ou 5 phrases comme si tu t’adresses à un humain), assures toi que les points cruciaux (voire rédhibitoires) ci-dessous sont bien présents :
63
+ 1) Ecris la situation en 4 ou 5 phrases claires et concises, fais comme si tu parlais à un humain
64
+ 2) Rajoutes les informations relatives au Client pour être précis sur la connaissance de ce dernier.
65
+ 3) Rajoutes des éléments de dates (remontée, transfert, prise en charge, résolution, clôture, etc…) ainsi que les délais (par exemple de réponse des différents acteurs ou experts de la chaine de traitement) pour mieux apprécier l'efficacité du traitement de la plainte.
66
+ 4) Rajoutes à la fin une recommandation importante afin d'éviter le mécontentement du Client par exemple pour éviter qu’une Plainte ne soit clôturée sans solution pour le Client notamment et à titre illustratif seulement dans certains cas pour un Client qui a payé pour un service et ne l'a pas obtenu, On ne peut décemment pas clôturer sa plainte sans solution en lui disant d’être plus vigilant, il faut recommander à l’équipe en charge de la plainte de le rembourser ou de trouver un moyen de donner au Client le service pour lequel il a payé (à défaut de le rembourser).
67
+ 5) N’hésites pas à innover sur le ton à utiliser car n’oublies pas que tu dois faire comme si tu parlais à un humain. Ce ton peut être adapté et ne pas toujours être le même en fonction des cas.
68
+ """
69
+ instructions_par_defaut = (
70
+ "Fais moi un résumé détaillé de ce plainte : "
71
+ # "1. Objet de la plainte. "
72
+ # "2. Détails incluant le numéro client, le problème et les dates importantes. "
73
+ # "3. Actions prises et suivis incluant les dates et les personnes impliquées. "
74
+ # "4. Toute action supplémentaire ou recommandation nécessaire."
75
+ )
76
+ app.add_middleware(
77
+ CORSMiddleware,
78
+ allow_origins=origins,
79
+ allow_credentials=True,
80
+ allow_methods=["*"],
81
+ allow_headers=["*"],
82
+ )
83
+ class TextSummary(BaseModel):
84
+ prompt:str
85
+
86
+ @app.get("/")
87
+ async def home():
88
+ return 'STN BIG DATA'
89
+ # Fonction pour générer du texte à partir d'une requête
90
+ # Modèle pour la requête
91
+ class RequestModel(BaseModel):
92
+ text: str
93
+
94
+ @app.post("/generate/")
95
+ async def generate_text(request: RequestModel):
96
+ # Créer la requête pour l'API NVIDIA
97
+ completion = client.chat.completions.create(
98
+ model="meta/llama-3.1-8b-instruct",
99
+ messages=[{"role": "user", "content": instructions_par_defaut + request.text}],
100
+ temperature=0.2,
101
+ top_p=0.7,
102
+ max_tokens=1024,
103
+ stream=True
104
+ )
105
+ # response = ollama.chat(
106
+ # model="llama3",
107
+ # messages=[
108
+ # {
109
+ # "role": "user",
110
+ # "content": default_prompt + request.text,
111
+ # },
112
+ # ],
113
+ # )
114
+ # Générer le texte en temps réel
115
+
116
+ generated_text = ""
117
+ for chunk in completion:
118
+ if chunk.choices[0].delta.content is not None:
119
+ generated_text += chunk.choices[0].delta.content
120
+
121
+ return {"generated_text": generated_text}
122
+ if __name__ == "__main__":
123
+ uvicorn.run("app:app",reload=True)
124
+
125
+
126
+
127
+
summaryT5/requirements.txt ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ fastapi==0.111.0
2
+ torch==2.2.0
3
+ transformers==4.44.0
4
+ uvicorn==0.30.1
5
+ pydantic==2.7.4
6
+ pillow==10.3.0
7
+ numpy
8
+ scipy==1.11.3
9
+ pytesseract==0.3.10
10
+ Pillow==10.3.0
11
+ BeautifulSoup4==4.12.3
12
+ protobuf
13
+ spaces==0.29.2
14
+ accelerate==0.33.0
15
+ sentencepiece==0.2.0
16
+ huggingface-hub==0.24.5
17
+ jinja2==3.1.4
18
+ sentence_transformers==3.0.1
19
+ tiktoken==0.7.0
20
+ einops==0.8.0
21
+ ollama
22
+ openai==1.42.0