DHEIVER commited on
Commit
b33c70a
·
verified ·
1 Parent(s): fcc1cf1

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +36 -16
app.py CHANGED
@@ -3,6 +3,28 @@ import pandas as pd
3
  import matplotlib.pyplot as plt
4
  import seaborn as sns
5
  from transformers import pipeline, AutoModelForCausalLM, AutoTokenizer
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
 
7
  # Configuração do modelo local
8
  def load_model():
@@ -16,7 +38,7 @@ def load_model():
16
  tokenizer = AutoTokenizer.from_pretrained(model_name)
17
  return pipeline('text-generation', model=model, tokenizer=tokenizer)
18
 
19
- # Questões DISC
20
  perguntas = {
21
  'D': [
22
  "Eu sou direto e vou direto ao ponto",
@@ -44,6 +66,7 @@ perguntas = {
44
  ]
45
  }
46
 
 
47
  def calcular_disc(respostas):
48
  resultados = {'D': 0, 'I': 0, 'S': 0, 'C': 0}
49
 
@@ -70,7 +93,6 @@ def criar_grafico(resultados):
70
  return plt
71
 
72
  def gerar_analise_llm(pipe, resultados, respostas_brutas):
73
- # Prepara o prompt para o LLM
74
  prompt = f"""<s>[INST] Como um especialista em análise comportamental DISC, faça uma análise detalhada do seguinte perfil:
75
 
76
  Resultados percentuais:
@@ -82,7 +104,6 @@ Conformidade (C): {resultados['C']:.1f}%
82
  Respostas com pontuações mais altas:
83
  """
84
 
85
- # Adiciona respostas com pontuações altas ao prompt
86
  for tipo, valor in respostas_brutas.items():
87
  if valor >= 4:
88
  dimensao = tipo[0]
@@ -99,7 +120,6 @@ Forneça:
99
  5. Ambientes de trabalho mais adequados
100
  [/INST]"""
101
 
102
- # Gera a análise usando o modelo local
103
  resposta = pipe(
104
  prompt,
105
  max_new_tokens=1024,
@@ -108,38 +128,37 @@ Forneça:
108
  repetition_penalty=1.15
109
  )[0]['generated_text']
110
 
111
- # Remove o prompt da resposta
112
- analise = resposta.split("[/INST]")[1].strip()
113
-
114
- return analise
115
 
116
  class DiscAnalyzer:
117
  def __init__(self):
118
  self.pipe = load_model()
119
 
120
  def avaliar_disc(self, values):
121
- # Converte os valores do slider para um dicionário
 
 
 
122
  respostas = {}
123
  for i, (tipo, perguntas_tipo) in enumerate(perguntas.items()):
124
  for j, pergunta in enumerate(perguntas_tipo):
125
  respostas[f"{tipo}{j+1}"] = values[i*4 + j]
126
 
127
- # Calcula os resultados
128
  resultados = calcular_disc(respostas)
129
-
130
- # Cria o gráfico
131
  fig = criar_grafico(resultados)
132
-
133
- # Gera a análise detalhada
134
  analise = gerar_analise_llm(self.pipe, resultados, respostas)
135
 
136
- return fig, analise
137
 
138
  # Interface Gradio
139
  analyzer = DiscAnalyzer()
140
 
141
  with gr.Blocks(title="Avaliação DISC com LLM Local") as app:
142
  gr.Markdown("# Avaliação de Perfil DISC com Análise Avançada")
 
 
 
 
143
  gr.Markdown("### Avalie cada afirmação em uma escala de 1 a 5")
144
 
145
  sliders = []
@@ -155,11 +174,12 @@ with gr.Blocks(title="Avaliação DISC com LLM Local") as app:
155
  plot = gr.Plot()
156
 
157
  analise = gr.Markdown(label="Análise Detalhada do Perfil")
 
158
 
159
  btn.click(
160
  fn=analyzer.avaliar_disc,
161
  inputs=sliders,
162
- outputs=[plot, analise]
163
  )
164
 
165
  if __name__ == "__main__":
 
3
  import matplotlib.pyplot as plt
4
  import seaborn as sns
5
  from transformers import pipeline, AutoModelForCausalLM, AutoTokenizer
6
+ import json
7
+ import os
8
+
9
+ # Arquivo para armazenar o contador
10
+ COUNTER_FILE = "disc_usage_counter.json"
11
+
12
+ # Função para gerenciar o contador
13
+ def load_counter():
14
+ if os.path.exists(COUNTER_FILE):
15
+ with open(COUNTER_FILE, 'r') as f:
16
+ return json.load(f)
17
+ return {"total_uses": 0}
18
+
19
+ def save_counter(counter):
20
+ with open(COUNTER_FILE, 'w') as f:
21
+ json.dump(counter, f)
22
+
23
+ def increment_counter():
24
+ counter = load_counter()
25
+ counter["total_uses"] += 1
26
+ save_counter(counter)
27
+ return f"Total de avaliações realizadas: {counter['total_uses']}"
28
 
29
  # Configuração do modelo local
30
  def load_model():
 
38
  tokenizer = AutoTokenizer.from_pretrained(model_name)
39
  return pipeline('text-generation', model=model, tokenizer=tokenizer)
40
 
41
+ # Questões DISC (mantido igual...)
42
  perguntas = {
43
  'D': [
44
  "Eu sou direto e vou direto ao ponto",
 
66
  ]
67
  }
68
 
69
+ # Funções existentes mantidas iguais...
70
  def calcular_disc(respostas):
71
  resultados = {'D': 0, 'I': 0, 'S': 0, 'C': 0}
72
 
 
93
  return plt
94
 
95
  def gerar_analise_llm(pipe, resultados, respostas_brutas):
 
96
  prompt = f"""<s>[INST] Como um especialista em análise comportamental DISC, faça uma análise detalhada do seguinte perfil:
97
 
98
  Resultados percentuais:
 
104
  Respostas com pontuações mais altas:
105
  """
106
 
 
107
  for tipo, valor in respostas_brutas.items():
108
  if valor >= 4:
109
  dimensao = tipo[0]
 
120
  5. Ambientes de trabalho mais adequados
121
  [/INST]"""
122
 
 
123
  resposta = pipe(
124
  prompt,
125
  max_new_tokens=1024,
 
128
  repetition_penalty=1.15
129
  )[0]['generated_text']
130
 
131
+ return resposta.split("[/INST]")[1].strip()
 
 
 
132
 
133
  class DiscAnalyzer:
134
  def __init__(self):
135
  self.pipe = load_model()
136
 
137
  def avaliar_disc(self, values):
138
+ # Incrementa o contador
139
+ counter_text = increment_counter()
140
+
141
+ # Processamento normal
142
  respostas = {}
143
  for i, (tipo, perguntas_tipo) in enumerate(perguntas.items()):
144
  for j, pergunta in enumerate(perguntas_tipo):
145
  respostas[f"{tipo}{j+1}"] = values[i*4 + j]
146
 
 
147
  resultados = calcular_disc(respostas)
 
 
148
  fig = criar_grafico(resultados)
 
 
149
  analise = gerar_analise_llm(self.pipe, resultados, respostas)
150
 
151
+ return fig, analise, counter_text
152
 
153
  # Interface Gradio
154
  analyzer = DiscAnalyzer()
155
 
156
  with gr.Blocks(title="Avaliação DISC com LLM Local") as app:
157
  gr.Markdown("# Avaliação de Perfil DISC com Análise Avançada")
158
+
159
+ # Contador de uso
160
+ counter_text = gr.Markdown(load_counter()["total_uses"])
161
+
162
  gr.Markdown("### Avalie cada afirmação em uma escala de 1 a 5")
163
 
164
  sliders = []
 
174
  plot = gr.Plot()
175
 
176
  analise = gr.Markdown(label="Análise Detalhada do Perfil")
177
+ uso = gr.Markdown(label="Contador de Uso")
178
 
179
  btn.click(
180
  fn=analyzer.avaliar_disc,
181
  inputs=sliders,
182
+ outputs=[plot, analise, uso]
183
  )
184
 
185
  if __name__ == "__main__":