aldohenrique commited on
Commit
b26ce6a
·
verified ·
1 Parent(s): dde9030

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +63 -17
app.py CHANGED
@@ -5,8 +5,6 @@ import os
5
  # Modelos leves recomendados
6
  MODEL_OPTIONS = {
7
  "Qwen2.5:3B": "Qwen/Qwen2.5-3B-Instruct",
8
- "Qwen2.5:1.5B": "Qwen/Qwen2.5-1.5B-Instruct",
9
- "Qwen2.5:0.5B": "Qwen/Qwen2.5-0.5B-Instruct",
10
  "GPT-2 Médio": "gpt2-medium",
11
  "BLOOM (560M)": "bigscience/bloom-560m"
12
  }
@@ -15,9 +13,11 @@ MODEL_OPTIONS = {
15
  MODEL_NAME = MODEL_OPTIONS["Qwen2.5:3B"]
16
 
17
  def load_model():
18
- global MODEL_NAME # Declaração global no início da função
19
 
 
20
  try:
 
21
  return pipeline(
22
  "text-generation",
23
  model=MODEL_NAME,
@@ -25,13 +25,13 @@ def load_model():
25
  temperature=0.7,
26
  top_p=0.9,
27
  do_sample=True,
28
- device_map="auto", # Para otimização automática
29
- torch_dtype="auto", # Para usar precisão otimizada
30
  token=os.getenv("HF_TOKEN")
31
  )
32
  except Exception as e:
33
- # Fallback para modelo menor se houver problema de memória
34
- print(f"Erro com {MODEL_NAME}, tentando modelo menor...")
 
 
35
  try:
36
  MODEL_NAME = MODEL_OPTIONS["Qwen2.5:0.5B"]
37
  return pipeline(
@@ -41,43 +41,89 @@ def load_model():
41
  temperature=0.7,
42
  top_p=0.9,
43
  do_sample=True,
44
- device_map="auto",
45
- torch_dtype="auto",
46
  token=os.getenv("HF_TOKEN")
47
  )
48
  except Exception as e2:
49
- raise gr.Error(f"Erro ao carregar modelo: {str(e2)}")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
50
 
51
  gerador = load_model()
52
 
53
  def responder_como_aldo(pergunta):
54
- # Prompt otimizado para Qwen2.5
55
- prompt = f"""<|im_start|>system
 
 
56
  Você é o professor Dr. Aldo Henrique, especialista em programação C, Java, desenvolvimento web e inteligência artificial. Responda com clareza, profundidade e tom acadêmico, como um professor experiente e didático.
57
  <|im_end|>
58
  <|im_start|>user
59
  {pergunta}
60
  <|im_end|>
61
  <|im_start|>assistant"""
 
 
 
 
 
 
 
62
 
63
  try:
 
 
 
64
  resposta = gerador(
65
  prompt,
66
- max_new_tokens=300,
67
  pad_token_id=gerador.tokenizer.eos_token_id,
68
- eos_token_id=gerador.tokenizer.eos_token_id
 
69
  )[0]["generated_text"]
70
 
71
  # Extrair apenas a resposta do assistente
72
- if "<|im_start|>assistant" in resposta:
73
  resposta_limpa = resposta.split("<|im_start|>assistant")[-1]
74
  resposta_limpa = resposta_limpa.split("<|im_end|>")[0] if "<|im_end|>" in resposta_limpa else resposta_limpa
75
  return resposta_limpa.strip()
 
 
 
76
  else:
77
- return resposta.split(prompt)[-1].strip()
 
 
78
 
79
  except Exception as e:
80
- return f"Erro ao gerar resposta: {str(e)}"
81
 
82
  # Interface melhorada
83
  with gr.Blocks(
 
5
  # Modelos leves recomendados
6
  MODEL_OPTIONS = {
7
  "Qwen2.5:3B": "Qwen/Qwen2.5-3B-Instruct",
 
 
8
  "GPT-2 Médio": "gpt2-medium",
9
  "BLOOM (560M)": "bigscience/bloom-560m"
10
  }
 
13
  MODEL_NAME = MODEL_OPTIONS["Qwen2.5:3B"]
14
 
15
  def load_model():
16
+ global MODEL_NAME # Declarar global no início da função
17
 
18
+ # Tentar carregar com configurações otimizadas primeiro
19
  try:
20
+ print(f"Tentando carregar modelo: {MODEL_NAME}")
21
  return pipeline(
22
  "text-generation",
23
  model=MODEL_NAME,
 
25
  temperature=0.7,
26
  top_p=0.9,
27
  do_sample=True,
 
 
28
  token=os.getenv("HF_TOKEN")
29
  )
30
  except Exception as e:
31
+ print(f"Erro com {MODEL_NAME}: {str(e)}")
32
+
33
+ # Fallback 1: Tentar modelo menor
34
+ print("Tentando modelo Qwen2.5:0.5B...")
35
  try:
36
  MODEL_NAME = MODEL_OPTIONS["Qwen2.5:0.5B"]
37
  return pipeline(
 
41
  temperature=0.7,
42
  top_p=0.9,
43
  do_sample=True,
 
 
44
  token=os.getenv("HF_TOKEN")
45
  )
46
  except Exception as e2:
47
+ print(f"Erro com Qwen2.5:0.5B: {str(e2)}")
48
+
49
+ # Fallback 2: GPT-2 Medium (mais compatível)
50
+ print("Tentando GPT-2 Medium...")
51
+ try:
52
+ MODEL_NAME = MODEL_OPTIONS["GPT-2 Médio"]
53
+ return pipeline(
54
+ "text-generation",
55
+ model=MODEL_NAME,
56
+ max_new_tokens=256,
57
+ temperature=0.7,
58
+ top_p=0.9,
59
+ do_sample=True
60
+ )
61
+ except Exception as e3:
62
+ print(f"Erro com GPT-2: {str(e3)}")
63
+
64
+ # Fallback 3: BLOOM (último recurso)
65
+ print("Tentando BLOOM...")
66
+ try:
67
+ MODEL_NAME = MODEL_OPTIONS["BLOOM (560M)"]
68
+ return pipeline(
69
+ "text-generation",
70
+ model=MODEL_NAME,
71
+ max_new_tokens=256,
72
+ temperature=0.7,
73
+ top_p=0.9,
74
+ do_sample=True
75
+ )
76
+ except Exception as e4:
77
+ raise gr.Error(f"Falha ao carregar qualquer modelo. Último erro: {str(e4)}")
78
 
79
  gerador = load_model()
80
 
81
  def responder_como_aldo(pergunta):
82
+ # Adaptar prompt baseado no modelo carregado
83
+ if "Qwen" in MODEL_NAME:
84
+ # Prompt otimizado para Qwen2.5
85
+ prompt = f"""<|im_start|>system
86
  Você é o professor Dr. Aldo Henrique, especialista em programação C, Java, desenvolvimento web e inteligência artificial. Responda com clareza, profundidade e tom acadêmico, como um professor experiente e didático.
87
  <|im_end|>
88
  <|im_start|>user
89
  {pergunta}
90
  <|im_end|>
91
  <|im_start|>assistant"""
92
+ else:
93
+ # Prompt genérico para outros modelos
94
+ prompt = f"""Você é o professor Dr. Aldo Henrique, especialista em programação C, Java, desenvolvimento web e inteligência artificial. Responda com clareza, profundidade e tom acadêmico.
95
+
96
+ Pergunta: {pergunta}
97
+
98
+ Resposta:"""
99
 
100
  try:
101
+ # Configurar parâmetros baseados no modelo
102
+ max_tokens = 300 if "Qwen" in MODEL_NAME else 200
103
+
104
  resposta = gerador(
105
  prompt,
106
+ max_new_tokens=max_tokens,
107
  pad_token_id=gerador.tokenizer.eos_token_id,
108
+ eos_token_id=gerador.tokenizer.eos_token_id,
109
+ truncation=True
110
  )[0]["generated_text"]
111
 
112
  # Extrair apenas a resposta do assistente
113
+ if "Qwen" in MODEL_NAME and "<|im_start|>assistant" in resposta:
114
  resposta_limpa = resposta.split("<|im_start|>assistant")[-1]
115
  resposta_limpa = resposta_limpa.split("<|im_end|>")[0] if "<|im_end|>" in resposta_limpa else resposta_limpa
116
  return resposta_limpa.strip()
117
+ elif "Resposta:" in resposta:
118
+ resposta_limpa = resposta.split("Resposta:")[-1]
119
+ return resposta_limpa.strip()
120
  else:
121
+ # Fallback: pegar texto após o prompt
122
+ resposta_limpa = resposta.replace(prompt, "").strip()
123
+ return resposta_limpa if resposta_limpa else "Desculpe, não consegui gerar uma resposta adequada."
124
 
125
  except Exception as e:
126
+ return f"Erro ao gerar resposta: {str(e)}. Tente reformular sua pergunta."
127
 
128
  # Interface melhorada
129
  with gr.Blocks(