healthtechbrasil commited on
Commit
4e991ba
·
1 Parent(s): fe0707a
Files changed (1) hide show
  1. app.py +38 -27
app.py CHANGED
@@ -35,7 +35,7 @@ except FileNotFoundError:
35
  # Função para carregar modelo e tokenizer
36
  def get_model():
37
  if not hasattr(get_model, "model_data"):
38
- logger.info("Carregando modelo e tokenizer...")
39
  start_time = time.time()
40
  try:
41
  tokenizer = AutoTokenizer.from_pretrained(
@@ -43,41 +43,19 @@ def get_model():
43
  legacy=False,
44
  clean_up_tokenization_spaces=True
45
  )
46
- logger.info(f"Tokenizer carregado em {time.time() - start_time:.2f} segundos.")
47
  model = T5ForConditionalGeneration.from_pretrained(
48
  "unicamp-dl/ptt5-small-portuguese-vocab"
49
  )
50
- logger.info(f"Modelo carregado em {time.time() - start_time:.2f} segundos.")
51
  get_model.model_data = {"tokenizer": tokenizer, "model": model}
 
52
  except Exception as e:
53
  logger.error(f"Erro ao carregar modelo ou tokenizer: {e}")
54
  get_model.model_data = None
 
55
  return get_model.model_data
56
 
57
- # Função para gerar e exibir simulado
58
- def generate_simulado():
59
- simulado = []
60
- for i in range(5):
61
- example = examples[i % len(examples)] if examples else None
62
- question_data = generate_question_from_prompt("clinica medica", "medio", example)
63
- simulado.append(question_data)
64
- logger.info(f"Questão {i + 1}: {question_data['question']}")
65
- for opt in question_data['options']:
66
- logger.info(f" {opt}")
67
- logger.info(f" Gabarito: {question_data['answer']}")
68
- logger.info(f" Explicação: {question_data['explanation']}")
69
- return {"simulado": simulado}
70
-
71
- # Força carregamento inicial
72
- logger.info("Testando carregamento inicial do modelo...")
73
- start_time = time.time()
74
- model_data = get_model()
75
- if model_data:
76
- logger.info(f"Modelo e tokenizer inicializados em {time.time() - start_time:.2f} segundos.")
77
- generate_simulado()
78
- else:
79
- logger.error("Falha na inicialização do modelo.")
80
-
81
  def parse_model_output(response):
82
  pattern = r"Enunciado clínico: (.*?)\s*Alternativas: (.*?)\s*Gabarito: (.*?)\s*Explicação: (.*)"
83
  match = re.match(pattern, response, re.DOTALL)
@@ -97,11 +75,14 @@ def parse_model_output(response):
97
 
98
  def generate_question_from_prompt(theme, difficulty, example_question=None):
99
  model_data = get_model()
 
100
  if not model_data or not model_data["tokenizer"] or not model_data["model"]:
 
101
  return {"question": "Erro: Modelo ou tokenizer não carregado.", "options": [], "answer": "", "explanation": "Por favor, verifique os logs."}
102
 
103
  tokenizer = model_data["tokenizer"]
104
  model = model_data["model"]
 
105
 
106
  if example_question:
107
  example_text = (
@@ -126,12 +107,42 @@ def generate_question_from_prompt(theme, difficulty, example_question=None):
126
  outputs = model.generate(**inputs, max_new_tokens=256, temperature=0.7, top_p=0.9)
127
  response = tokenizer.decode(outputs[0], skip_special_tokens=True)
128
  result = parse_model_output(response)
 
129
  gc.collect()
130
  return result
131
  except Exception as e:
 
132
  gc.collect()
133
  return {"question": f"Erro na geração: {e}", "options": [], "answer": "", "explanation": "Tente novamente."}
134
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
135
  @app.get("/generate")
136
  async def generate_question(theme: str, difficulty: str):
137
  valid_difficulties = ["fácil", "médio", "difícil"]
 
35
  # Função para carregar modelo e tokenizer
36
  def get_model():
37
  if not hasattr(get_model, "model_data"):
38
+ logger.info("Iniciando carregamento de modelo e tokenizer...")
39
  start_time = time.time()
40
  try:
41
  tokenizer = AutoTokenizer.from_pretrained(
 
43
  legacy=False,
44
  clean_up_tokenization_spaces=True
45
  )
46
+ logger.info(f"Tokenizer baixado e carregado em {time.time() - start_time:.2f} segundos.")
47
  model = T5ForConditionalGeneration.from_pretrained(
48
  "unicamp-dl/ptt5-small-portuguese-vocab"
49
  )
50
+ logger.info(f"Modelo baixado e carregado em {time.time() - start_time:.2f} segundos.")
51
  get_model.model_data = {"tokenizer": tokenizer, "model": model}
52
+ logger.info("Modelo e tokenizer armazenados com sucesso em model_data.")
53
  except Exception as e:
54
  logger.error(f"Erro ao carregar modelo ou tokenizer: {e}")
55
  get_model.model_data = None
56
+ logger.debug(f"Retornando model_data: {get_model.model_data is not None}")
57
  return get_model.model_data
58
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
  def parse_model_output(response):
60
  pattern = r"Enunciado clínico: (.*?)\s*Alternativas: (.*?)\s*Gabarito: (.*?)\s*Explicação: (.*)"
61
  match = re.match(pattern, response, re.DOTALL)
 
75
 
76
  def generate_question_from_prompt(theme, difficulty, example_question=None):
77
  model_data = get_model()
78
+ logger.debug(f"Verificando model_data: {model_data is not None}")
79
  if not model_data or not model_data["tokenizer"] or not model_data["model"]:
80
+ logger.error("Modelo ou tokenizer não disponível.")
81
  return {"question": "Erro: Modelo ou tokenizer não carregado.", "options": [], "answer": "", "explanation": "Por favor, verifique os logs."}
82
 
83
  tokenizer = model_data["tokenizer"]
84
  model = model_data["model"]
85
+ logger.info(f"Gerando questão com tema: {theme}, dificuldade: {difficulty}")
86
 
87
  if example_question:
88
  example_text = (
 
107
  outputs = model.generate(**inputs, max_new_tokens=256, temperature=0.7, top_p=0.9)
108
  response = tokenizer.decode(outputs[0], skip_special_tokens=True)
109
  result = parse_model_output(response)
110
+ logger.debug(f"Questão gerada com sucesso: {result}")
111
  gc.collect()
112
  return result
113
  except Exception as e:
114
+ logger.error(f"Erro na geração da questão: {e}")
115
  gc.collect()
116
  return {"question": f"Erro na geração: {e}", "options": [], "answer": "", "explanation": "Tente novamente."}
117
 
118
+ # Função para gerar e exibir simulado
119
+ def generate_simulado():
120
+ logger.info("Iniciando geração de simulado...")
121
+ simulado = []
122
+ for i in range(5):
123
+ example = examples[i % len(examples)] if examples else None
124
+ logger.debug(f"Processando questão {i + 1} com exemplo: {example is not None}")
125
+ question_data = generate_question_from_prompt("clinica medica", "medio", example)
126
+ simulado.append(question_data)
127
+ logger.info(f"Questão {i + 1}: {question_data['question']}")
128
+ for opt in question_data['options']:
129
+ logger.info(f" {opt}")
130
+ logger.info(f" Gabarito: {question_data['answer']}")
131
+ logger.info(f" Explicação: {question_data['explanation']}")
132
+ logger.info("Geração de simulado concluída.")
133
+ return {"simulado": simulado}
134
+
135
+ # Força carregamento inicial
136
+ logger.info("Testando carregamento inicial do modelo...")
137
+ start_time = time.time()
138
+ model_data = get_model()
139
+ if model_data:
140
+ logger.info(f"Modelo e tokenizer inicializados em {time.time() - start_time:.2f} segundos.")
141
+ time.sleep(1) # Adiciona delay de 1 segundo para garantir estabilidade
142
+ generate_simulado()
143
+ else:
144
+ logger.error("Falha na inicialização do modelo.")
145
+
146
  @app.get("/generate")
147
  async def generate_question(theme: str, difficulty: str):
148
  valid_difficulties = ["fácil", "médio", "difícil"]