AndreaAlessandrelli4 commited on
Commit
cb55591
·
verified ·
1 Parent(s): b25a979

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +65 -69
app.py CHANGED
@@ -11,25 +11,22 @@ MAX_MAX_NEW_TOKENS = 2048
11
  DEFAULT_MAX_NEW_TOKENS = 1024
12
  MAX_INPUT_TOKEN_LENGTH = int(os.getenv("MAX_INPUT_TOKEN_LENGTH", "4096"))
13
 
14
-
15
-
16
  if not torch.cuda.is_available():
17
  DESCRIPTION += "\n<p>Running on CPU 🥶 This demo does not work on CPU.</p>"
18
 
19
-
20
  if torch.cuda.is_available():
21
  model_id = "AndreaAlessandrelli4/AvvoChat_AITA_v04"
22
- model_vett_id = "intfloat/multilingual-e5-large"
23
  model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto", load_in_4bit=True)
24
  tokenizer = AutoTokenizer.from_pretrained(model_id)
25
  tokenizer.use_default_system_prompt = False
26
 
27
-
28
  @spaces.GPU
29
  def generate(
30
  message: str,
31
  chat_history: list[tuple[str, str]],
32
- system_prompt: str,
33
  max_new_tokens: int = 1024,
34
  temperature: float = 0.01,
35
  top_p: float = 0.9,
@@ -39,7 +36,7 @@ def generate(
39
  ) -> Iterator[str]:
40
  conversation = []
41
  conversation.append({"role": "system", "content":
42
- '''Sei un an assistente AI di nome 'AvvoChat' specializzato nel rispondere a domande riguardanti la legge Italiana.
43
  Rispondi in lingua italiana in modo chiaro, semplice ed esaustivo alle domande che ti vengono fornite.
44
  Le risposte devono essere sintetiche e chiare di massimo 500 token o anche più corte.
45
  Firmati alla fine di ogni risposta '-AvvoChat'.'''})
@@ -58,7 +55,7 @@ def generate(
58
  {"input_ids": input_ids},
59
  streamer=streamer,
60
  max_new_tokens=max_new_tokens,
61
- do_sample=False,
62
  top_p=top_p,
63
  top_k=top_k,
64
  temperature=temperature,
@@ -73,69 +70,68 @@ def generate(
73
  outputs.append(text)
74
  yield "".join(outputs)
75
 
 
76
 
77
- chat_interface = gr.ChatInterface(
78
- fn=generate,
79
- additional_inputs=[
80
- #gr.Textbox(label="System prompt", lines=6),
81
- gr.Slider(
82
- label="Max new tokens",
83
- minimum=1,
84
- maximum=MAX_MAX_NEW_TOKENS,
85
- step=1,
86
- value=DEFAULT_MAX_NEW_TOKENS,
87
- ),
88
- gr.Slider(
89
- label="Temperature",
90
- minimum=0.1,
91
- maximum=4.0,
92
- step=0.1,
93
- value=0.6,
94
- ),
95
- gr.Slider(
96
- label="Top-p (nucleus sampling)",
97
- minimum=0.05,
98
- maximum=1.0,
99
- step=0.05,
100
- value=0.9,
101
- ),
102
- gr.Slider(
103
- label="Top-k",
104
- minimum=1,
105
- maximum=1000,
106
- step=1,
107
- value=50,
108
- ),
109
- gr.Checkbox(
110
- label="Do-sample (False)",
111
- value=False,
112
- ),
113
- gr.Slider(
114
- label="Repetition penalty",
115
- minimum=1.0,
116
- maximum=2.0,
117
- step=0.05,
118
- value=1.2,
119
- ),
120
- ],
121
- stop_btn=None,
122
- examples=[
123
- ["Posso fare un barbecue sul balcone di casa?"],
124
- ["Posso essere multato se esco di casa senza documento d'identità?"],
125
- ["Una persona single può adottare un bambino?"],
126
- ["Posso usare un immagine creada con l'intelligenza artificiale?"],
127
- ["Se il mio pallone da calcio cade in un giardino di un'abitazione privata, poss scavalcare il concello per riprendermelo?"],
128
- ],
129
- )
130
-
131
- with gr.Blocks(css="style.css") as demo:
132
- #gr.DuplicateButton(value="Duplicate Space for private use", elem_id="duplicate-button")
133
  gr.Markdown("# AvvoChat")
134
  gr.Markdown("Fai una domanda riguardante la legge italiana all'AvvoChat e ricevi una spiegazione semplice al tuo dubbio.")
135
- gr.Image("AvvoVhat.png", label="AvvoChat Logo", width=50, height=200) # Dimensioni dell'immagine ridotte
136
- chat_interface.render()
137
-
138
 
139
- if __name__ == "__main__":
140
- demo.queue(max_size=20).launch()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
141
 
 
 
 
11
  DEFAULT_MAX_NEW_TOKENS = 1024
12
  MAX_INPUT_TOKEN_LENGTH = int(os.getenv("MAX_INPUT_TOKEN_LENGTH", "4096"))
13
 
14
+ # Controllo della disponibilità della GPU
 
15
  if not torch.cuda.is_available():
16
  DESCRIPTION += "\n<p>Running on CPU 🥶 This demo does not work on CPU.</p>"
17
 
18
+ # Caricamento del modello e del tokenizer se la GPU è disponibile
19
  if torch.cuda.is_available():
20
  model_id = "AndreaAlessandrelli4/AvvoChat_AITA_v04"
 
21
  model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto", load_in_4bit=True)
22
  tokenizer = AutoTokenizer.from_pretrained(model_id)
23
  tokenizer.use_default_system_prompt = False
24
 
 
25
  @spaces.GPU
26
  def generate(
27
  message: str,
28
  chat_history: list[tuple[str, str]],
29
+ system_prompt: str = "",
30
  max_new_tokens: int = 1024,
31
  temperature: float = 0.01,
32
  top_p: float = 0.9,
 
36
  ) -> Iterator[str]:
37
  conversation = []
38
  conversation.append({"role": "system", "content":
39
+ '''Sei un assistente AI di nome 'AvvoChat' specializzato nel rispondere a domande riguardanti la legge Italiana.
40
  Rispondi in lingua italiana in modo chiaro, semplice ed esaustivo alle domande che ti vengono fornite.
41
  Le risposte devono essere sintetiche e chiare di massimo 500 token o anche più corte.
42
  Firmati alla fine di ogni risposta '-AvvoChat'.'''})
 
55
  {"input_ids": input_ids},
56
  streamer=streamer,
57
  max_new_tokens=max_new_tokens,
58
+ do_sample=do_sample,
59
  top_p=top_p,
60
  top_k=top_k,
61
  temperature=temperature,
 
70
  outputs.append(text)
71
  yield "".join(outputs)
72
 
73
+ image_path = "/home/a.alessandrelli/LLM_Dante/Raccolta_doc_index/AvvoVhat.png"
74
 
75
+ with gr.Blocks() as demo:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
76
  gr.Markdown("# AvvoChat")
77
  gr.Markdown("Fai una domanda riguardante la legge italiana all'AvvoChat e ricevi una spiegazione semplice al tuo dubbio.")
 
 
 
78
 
79
+ with gr.Row():
80
+ msg = gr.Textbox(show_label=False, placeholder="Inserisci il tuo messaggio...")
81
+ btn = gr.Button("Invia")
82
+
83
+ with gr.Row():
84
+ with gr.Column(scale=0.5, min_width=100):
85
+ gr.Image(image_path, label="AvvoChat Logo", width=50, height=200)
86
+ with gr.Column(scale=6):
87
+ chatbox = gr.Chatbot(label="AvvoChat")
88
+
89
+ def on_send_message(message, chat_history, max_new_tokens, temperature, top_p, top_k, do_sample, repetition_penalty):
90
+ response_stream = generate(
91
+ message=message,
92
+ chat_history=chat_history,
93
+ max_new_tokens=max_new_tokens,
94
+ temperature=temperature,
95
+ top_p=top_p,
96
+ top_k=top_k,
97
+ do_sample=do_sample,
98
+ repetition_penalty=repetition_penalty,
99
+ )
100
+ full_response = ""
101
+ for response in response_stream:
102
+ full_response += response
103
+ chat_history.append((message, full_response))
104
+ return chat_history, ""
105
+
106
+ # Collegare il pulsante e la textbox alla funzione on_send_message
107
+ btn.click(
108
+ on_send_message,
109
+ inputs=[
110
+ msg,
111
+ chatbox,
112
+ gr.State(value=DEFAULT_MAX_NEW_TOKENS),
113
+ gr.State(value=0.6),
114
+ gr.State(value=0.9),
115
+ gr.State(value=50),
116
+ gr.State(value=False),
117
+ gr.State(value=1.2)
118
+ ],
119
+ outputs=[chatbox, msg],
120
+ )
121
+ msg.submit(
122
+ on_send_message,
123
+ inputs=[
124
+ msg,
125
+ chatbox,
126
+ gr.State(value=DEFAULT_MAX_NEW_TOKENS),
127
+ gr.State(value=0.6),
128
+ gr.State(value=0.9),
129
+ gr.State(value=50),
130
+ gr.State(value=False),
131
+ gr.State(value=1.2)
132
+ ],
133
+ outputs=[chatbox, msg],
134
+ )
135
 
136
+ if __name__ == "__main__":
137
+ demo.launch(share=True)