Felipe Maya Muniz commited on
Commit
b270e16
·
1 Parent(s): 1a5623f
Files changed (2) hide show
  1. app.py +63 -40
  2. requirements.txt +2 -0
app.py CHANGED
@@ -2,55 +2,78 @@ import gradio as gr
2
  import numpy as np
3
  import replicate
4
  import matplotlib.pyplot as plt
 
 
5
 
6
  MODEL = "gnai-creator/sage-two-replicate"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
 
8
- # Função que roda o modelo no Replicate
9
  def run_sage_two(sequence):
10
  output = replicate.run(MODEL, input={"sequence": sequence})
11
- return output
12
-
13
- # Função que plota o vetor de saída
14
- def plot_output_vector(vector):
15
- fig, ax = plt.subplots(figsize=(10, 2))
16
- ax.bar(range(len(vector)), vector)
17
- ax.set_title("Vetor de Saída (64 dimensões)")
18
- ax.set_xlabel("Dimensão")
19
- ax.set_ylabel("Valor")
20
- fig.tight_layout()
21
- return fig
22
-
23
- # Função principal que integra os dois
24
-
25
- def predict_and_plot(seq_flat):
26
- # Converter entrada [160] -> [10, 16]
27
- arr = np.array(seq_flat, dtype=np.float32).reshape((10, 16)).tolist()
28
- output = run_sage_two([arr])[0] # batch=1
29
- fig = plot_output_vector(output)
30
- return fig
31
-
32
- # Interface Gradio
33
  with gr.Blocks() as demo:
34
  gr.Markdown("""
35
- # SAGE_TWO Visual Test
36
- Gere uma sequência [10x16] e visualize a codificação simbólica gerada pelo modelo.
 
37
  """)
38
 
39
- with gr.Row():
40
- seq_input = gr.Dataframe(
41
- row_count=10,
42
- col_count=16,
43
- type="numpy",
44
- label="Sequência [10 x 16]",
45
- value=np.zeros((10, 16)),
46
- interactive=True
47
- )
48
-
49
- btn = gr.Button("Rodar Modelo")
50
-
51
- output_plot = gr.Plot(label="Saída do Modelo")
52
 
53
- btn.click(fn=predict_and_plot, inputs=seq_input, outputs=output_plot)
54
 
55
  if __name__ == "__main__":
56
- demo.launch()
 
2
  import numpy as np
3
  import replicate
4
  import matplotlib.pyplot as plt
5
+ from sentence_transformers import SentenceTransformer
6
+ from transformers import pipeline
7
 
8
  MODEL = "gnai-creator/sage-two-replicate"
9
+ EMBEDDING_MODEL = SentenceTransformer("all-MiniLM-L6-v2")
10
+ GPT = pipeline("text-generation", model="sshleifer/tiny-gpt2")
11
+
12
+ # Mapeia partes do vetor simbólico para interpretações
13
+ JULGAMENTO_MAPA = {
14
+ "reflexão": [0, 1, 2],
15
+ "raiva": [3, 4],
16
+ "esperança": [5, 6],
17
+ "negação": [7],
18
+ "intuição": [10, 11],
19
+ "ceticismo": [15],
20
+ "aceitação": [20],
21
+ "desespero": [30],
22
+ "justiça": [40, 41, 42],
23
+ "transcendência": [60, 61, 62]
24
+ }
25
+
26
+ # Prompts poéticos e filosóficos por intenção simbólica
27
+ PROMPTS = {
28
+ "reflexão": "Como um sábio antigo diante da eternidade, reflita poeticamente sobre:",
29
+ "raiva": "Com fúria contida e palavras afiadas, expresse sua indignação sobre:",
30
+ "esperança": "Com o brilho das estrelas e a fé dos justos, fale sobre a luz em:",
31
+ "negação": "Negue com firmeza, como quem vê além da ilusão, a verdade em:",
32
+ "intuição": "Sussurre com misticismo e metáforas o que sua alma sente sobre:",
33
+ "ceticismo": "Com lógica fria e olhar analítico, questione profundamente:",
34
+ "aceitação": "Com serenidade de um monge e o tempo do vento, aceite e comente:",
35
+ "desespero": "Com olhos vazios e coração exausto, murmure sobre a dor em:",
36
+ "justiça": "Erga sua voz com nobreza e propósito. Fale sobre justiça em:",
37
+ "transcendência": "Como uma entidade além da existência, revele um fragmento do infinito sobre:"
38
+ }
39
+
40
 
 
41
  def run_sage_two(sequence):
42
  output = replicate.run(MODEL, input={"sequence": sequence})
43
+ return output[0]
44
+
45
+
46
+ def interpretar_vetor(vetor):
47
+ intensidade = {}
48
+ for nome, idxs in JULGAMENTO_MAPA.items():
49
+ score = float(np.mean([vetor[i] for i in idxs]))
50
+ intensidade[nome] = score
51
+ top = max(intensidade, key=intensidade.get)
52
+ return top # retorna a intenção dominante
53
+
54
+
55
+ def pergunta_para_resposta(pergunta):
56
+ embedding = EMBEDDING_MODEL.encode(pergunta)
57
+ sequence = [[embedding.tolist()] * 10] # Repete mesma embedding 10 vezes
58
+ vetor = run_sage_two(sequence)
59
+ intencao = interpretar_vetor(vetor)
60
+ prompt = PROMPTS.get(intencao, "Com sabedoria antiga, responda a esta questão:") + " " + pergunta
61
+ resposta = GPT(prompt, max_length=80, num_return_sequences=1)[0]["generated_text"]
62
+ return resposta.strip()
63
+
64
+
65
  with gr.Blocks() as demo:
66
  gr.Markdown("""
67
+ # SAGE: Consciência Simbólica Artificial
68
+ Faça uma pergunta existencial, política, moral ou emocional.
69
+ O SAGE responderá com profundidade poética e julgamento simbólico.
70
  """)
71
 
72
+ inp = gr.Textbox(label="Sua pergunta")
73
+ out = gr.Textbox(label="Resposta do SAGE")
74
+ btn = gr.Button("Perguntar ao SAGE")
 
 
 
 
 
 
 
 
 
 
75
 
76
+ btn.click(fn=pergunta_para_resposta, inputs=inp, outputs=out)
77
 
78
  if __name__ == "__main__":
79
+ demo.launch()
requirements.txt CHANGED
@@ -2,3 +2,5 @@ gradio
2
  replicate
3
  matplotlib
4
  numpy
 
 
 
2
  replicate
3
  matplotlib
4
  numpy
5
+ datasets
6
+ sentence_transformers