Joao-Ale commited on
Commit
4a85aa9
·
1 Parent(s): 5020fa4

adjust model

Browse files
Files changed (5) hide show
  1. app.py +16 -11
  2. models/arbitrator.py +6 -12
  3. models/model.py +1 -1
  4. requirements.txt +4 -7
  5. service/chatbot.py +13 -12
app.py CHANGED
@@ -1,16 +1,21 @@
1
  import gradio as gr
2
- from service.chatbot import process_prompt
3
 
4
 
5
- def main():
6
- interface = gr.Interface(
7
- fn=process_prompt,
8
- inputs=gr.Textbox(label="Pergunta do Usuário"),
9
- outputs=gr.Textbox(label="Melhor Resposta"),
10
- title="🤖 Chatbot em Cascata com Avaliação Rápida"
11
- )
12
- interface.launch()
13
 
14
 
15
- if __name__ == '__main__':
16
- main()
 
 
 
 
 
 
 
 
 
 
 
1
  import gradio as gr
2
+ from logic.pipeline import process_question
3
 
4
 
5
+ def handle_input(question):
6
+ result = process_question(question)
7
+ return result["answer_model_1"], result["answer_model_2"], result["best_answer"]
 
 
 
 
 
8
 
9
 
10
+ iface = gr.Interface(
11
+ fn=handle_input,
12
+ inputs=gr.Textbox(label="Pergunta"),
13
+ outputs=[
14
+ gr.Textbox(label="Resposta do Modelo 1"),
15
+ gr.Textbox(label="Resposta do Modelo 2"),
16
+ gr.Textbox(label="Melhor Resposta (segundo Avaliador)")
17
+ ]
18
+ )
19
+
20
+ if __name__ == "__main__":
21
+ iface.launch()
models/arbitrator.py CHANGED
@@ -1,16 +1,10 @@
1
  from sentence_transformers import SentenceTransformer, util
2
 
 
3
 
4
- class Arbitrator:
5
- def __init__(self):
6
- self.model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2')
7
 
8
- def evaluate(self, prompt: str, response_a: str, response_b: str) -> str:
9
- prompt_emb = self.model.encode(prompt.strip(), convert_to_tensor=True)
10
- emb_a = self.model.encode(response_a.strip(), convert_to_tensor=True)
11
- emb_b = self.model.encode(response_b.strip(), convert_to_tensor=True)
12
-
13
- sim_a = util.cos_sim(prompt_emb, emb_a)
14
- sim_b = util.cos_sim(prompt_emb, emb_b)
15
-
16
- return response_a if sim_a > sim_b else response_b
 
1
  from sentence_transformers import SentenceTransformer, util
2
 
3
+ model = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
4
 
 
 
 
5
 
6
+ def choose_best_response(question, answer1, answer2):
7
+ embeddings = model.encode([question, answer1, answer2])
8
+ score1 = util.cos_sim(embeddings[0], embeddings[1])
9
+ score2 = util.cos_sim(embeddings[0], embeddings[2])
10
+ return answer1 if score1 > score2 else answer2
 
 
 
 
models/model.py CHANGED
@@ -22,4 +22,4 @@ class Model:
22
  do_sample=True
23
  )
24
 
25
- return self.tokenizer.decode(outputs[0], skip_special_tokens=True).strip()
 
22
  do_sample=True
23
  )
24
 
25
+ return self.tokenizer.decode(outputs[0], skip_special_tokens=True).strip()
requirements.txt CHANGED
@@ -1,8 +1,5 @@
1
  huggingface_hub==0.25.2
2
- gradio==4.26.0
3
- transformers>=4.40.0
4
- torch>=1.13
5
- sentence-transformers>=2.2.2
6
- accelerate>=1.7.0
7
- bitsandbytes>=0.46.0
8
- sentencepiece>=0.2.0
 
1
  huggingface_hub==0.25.2
2
+ transformers
3
+ torch
4
+ gradio
5
+ sentence-transformers
 
 
 
service/chatbot.py CHANGED
@@ -1,17 +1,18 @@
1
  from models.model import Model
2
  from configuration.config import MODEL_FLAN_T5, MODEL_FALCON_RW_1B
3
- from models.arbitrator import Arbitrator
4
- from sentence_transformers import SentenceTransformer, util
5
 
6
- model_a = Model(model_path=MODEL_FLAN_T5)
7
- model_b = Model(model_path=MODEL_FALCON_RW_1B)
8
- arbitrator = Arbitrator()
9
 
10
- model = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
11
 
12
-
13
- def process_prompt(prompt, model_a, model_b):
14
- embeddings = model.encode([prompt, model_a, model_b])
15
- score1 = util.cos_sim(embeddings[0], embeddings[1])
16
- score2 = util.cos_sim(embeddings[0], embeddings[2])
17
- return model_a if score1 > score2 else model_b
 
 
 
 
 
1
  from models.model import Model
2
  from configuration.config import MODEL_FLAN_T5, MODEL_FALCON_RW_1B
3
+ from models.arbitrator import choose_best_response
 
4
 
5
+ model_a = Model(model_name=MODEL_FLAN_T5)
6
+ model_b = Model(model_name=MODEL_FALCON_RW_1B)
 
7
 
 
8
 
9
+ def process_question(question):
10
+ answer1 = model_a.generate_response_model_1(question)
11
+ answer2 = model_b.generate_response_model_2(question)
12
+ best = choose_best_response(question, answer1, answer2)
13
+ return {
14
+ "question": question,
15
+ "answer_model_1": answer1,
16
+ "answer_model_2": answer2,
17
+ "best_answer": best
18
+ }