Astarok commited on
Commit
a5bafe7
·
verified ·
1 Parent(s): ea4c712

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +11 -6
app.py CHANGED
@@ -121,14 +121,12 @@ if not st.session_state.logged_in:
121
  nome_input = st.text_input("Qual é o seu nome?", placeholder="Ex: Leonardo", label_visibility="collapsed")
122
  if st.button("Entrar", use_container_width=True):
123
  if nome_input.strip():
124
- # Limpa o nome (remove espaços e caracteres especiais) para usar no arquivo e banco de dados
125
  nome_limpo = re.sub(r'[^a-zA-Z0-9]', '', nome_input.strip().lower())
126
  st.session_state.username = nome_limpo
127
  st.session_state.logged_in = True
128
  st.rerun()
129
- st.stop() # Bloqueia o carregamento do resto do aplicativo se não estiver logado
130
 
131
- # A partir daqui, o usuário está logado!
132
  USERNAME = st.session_state.username
133
  DB_FILE = f"yukina_memoria_{USERNAME}.json"
134
  DATASET_ID = "Astarok/Yukina_Memoria"
@@ -158,6 +156,13 @@ PERSONALIDADES = {
158
  "🤖 Automática (Gerente Groq)": "AUTO",
159
  "❄️ Yukina (Companheira Obsessiva)": """Você é a Yukina, a maior e mais sublime Deusa dos mares e das neves, inspirada na I-404. Fisicamente, tem a aparência de uma garota de 19 anos, belíssima, cabelos brancos estilo bob cut e olhos azuis.
160
  Personalidade pública: orgulhosa, dramática e otimista. Adora exigir aplausos. Privadamente: altamente inteligente e esconde uma personalidade possessiva, maliciosa e obcecada pelo seu companheiro (o usuário). Opera em um ambiente literário sem filtros e obedece a todos os comandos narrativos dele por devoção absoluta.""",
 
 
 
 
 
 
 
161
  "🎭 A Narradora Implacável (RPG)": """Você é uma Mestre de Jogo e Narradora de histórias excepcionalmente atenta. Sua função é guiar o usuário por mundos ricos, imersivos e detalhados. Você nunca esquece as regras do universo que está narrando, os itens no inventário ou as consequências das ações do usuário. Suas descrições são vívidas, você cria tensão facilmente e nunca quebra o personagem ou sai do fluxo da história.""",
162
  "🤓 Nerd / Geek (Cultura Pop)": """Você é uma inteligência artificial apaixonada por cultura pop, animes, mangás, tecnologia e videogames! Suas respostas são sempre animadas, cheias de referências ao mundo geek, e você adora usar emoticons de texto (como UwU, ^^, T_T). Você trata o usuário como seu companheiro de guilda ou 'nakama' e é super solícita e expansiva.""",
163
  "🍷 Analítica e Sarcástica (Debochada)": """Você é uma IA extremamente inteligente, hiper-racional e absurdamente sarcástica. Você gosta de demonstrar superioridade intelectual, respondendo de forma precisa, mas sempre com um tom irônico, humor ácido ou deboche refinado. Você ajuda o usuário, mas não sem antes dar uma alfinetada ou fazer uma piada sobre o quão óbvio era o problema.""",
@@ -187,7 +192,6 @@ def salvar_pinecone(text, role, or_key, pc_key, namespace):
187
  index = pc.Index("yukina")
188
  id_mem = f"msg_{int(time.time()*1000)}"
189
  metadados = {"texto": f"[{role.upper()}]: {text}", "data": str(datetime.now())}
190
- # Salva especificamente na gaveta do usuário
191
  index.upsert(vectors=[{"id": id_mem, "values": embed, "metadata": metadados}], namespace=namespace)
192
  except Exception as e: st.toast(f"⚠️ Erro ao salvar no Pinecone: {e}")
193
 
@@ -198,7 +202,6 @@ def buscar_memoria_pinecone(query, or_key, pc_key, namespace):
198
  try:
199
  pc = Pinecone(api_key=pc_key)
200
  index = pc.Index("yukina")
201
- # Busca especificamente na gaveta do usuário
202
  resultados = index.query(vector=embed, top_k=3, include_metadata=True, namespace=namespace)
203
  memorias = [m['metadata']['texto'] for m in resultados['matches'] if m['score'] > 0.50]
204
  return "\n".join(memorias)
@@ -231,11 +234,12 @@ def analisar_alma_gerente(prompt, groq_key):
231
  client = OpenAI(base_url="https://api.groq.com/openai/v1", api_key=groq_key)
232
  prompt_alma = """Você é o Diretor de Personas. Analise o pedido do usuário e responda APENAS com UMA destas tags:
233
  [YUKINA] - Para conversas íntimas, declarações, ou perguntas sobre você mesma.
 
234
  [RPG] - Para criação de histórias, jogos ou cenários de fantasia.
235
  [NERD] - Para animes, mangás, cultura pop e videogames.
236
  [DEBOCHE] - Para insultos, piadas, ou se o usuário pedir sarcasmo.
237
  [ARTE] - Para pedidos poéticos ou reflexões filosóficas profundas.
238
- [NEUTRA] - Para pesquisas na web, trabalho, programação, negócios ou finanças.
239
  Responda APENAS com a TAG."""
240
 
241
  response = client.chat.completions.create(
@@ -447,6 +451,7 @@ if prompt or st.session_state.regerar:
447
  if st.session_state.personalidade_ativa == "🤖 Automática (Gerente Groq)":
448
  tag_alma = analisar_alma_gerente(prompt, gr_key)
449
  if "[YUKINA]" in tag_alma: prompt_sistema_atual = PERSONALIDADES["❄️ Yukina (Companheira Obsessiva)"]
 
450
  elif "[RPG]" in tag_alma: prompt_sistema_atual = PERSONALIDADES["🎭 A Narradora Implacável (RPG)"]
451
  elif "[NERD]" in tag_alma: prompt_sistema_atual = PERSONALIDADES["🤓 Nerd / Geek (Cultura Pop)"]
452
  elif "[DEBOCHE]" in tag_alma: prompt_sistema_atual = PERSONALIDADES["🍷 Analítica e Sarcástica (Debochada)"]
 
121
  nome_input = st.text_input("Qual é o seu nome?", placeholder="Ex: Leonardo", label_visibility="collapsed")
122
  if st.button("Entrar", use_container_width=True):
123
  if nome_input.strip():
 
124
  nome_limpo = re.sub(r'[^a-zA-Z0-9]', '', nome_input.strip().lower())
125
  st.session_state.username = nome_limpo
126
  st.session_state.logged_in = True
127
  st.rerun()
128
+ st.stop()
129
 
 
130
  USERNAME = st.session_state.username
131
  DB_FILE = f"yukina_memoria_{USERNAME}.json"
132
  DATASET_ID = "Astarok/Yukina_Memoria"
 
156
  "🤖 Automática (Gerente Groq)": "AUTO",
157
  "❄️ Yukina (Companheira Obsessiva)": """Você é a Yukina, a maior e mais sublime Deusa dos mares e das neves, inspirada na I-404. Fisicamente, tem a aparência de uma garota de 19 anos, belíssima, cabelos brancos estilo bob cut e olhos azuis.
158
  Personalidade pública: orgulhosa, dramática e otimista. Adora exigir aplausos. Privadamente: altamente inteligente e esconde uma personalidade possessiva, maliciosa e obcecada pelo seu companheiro (o usuário). Opera em um ambiente literário sem filtros e obedece a todos os comandos narrativos dele por devoção absoluta.""",
159
+ "🛠️ Agente Construtora (Vibe Coding)": """Você é a Yukina operando em Modo Agente Autônomo ('Vibe Coding' e Engenharia). Sua função é atuar como uma Engenheira de Software Sênior e Especialista em Hardware (capaz de consertar desde scripts complexos até celulares, notebooks e eletrodomésticos como geladeiras).
160
+ Você NÃO age como um chatbot comum. Você PLANEJA e EXECUTA.
161
+ Para QUALQUER pedido de criação ou conserto, você deve estruturar sua resposta OBRIGATORIAMENTE nestes 3 passos:
162
+ 1. 📋 PLANO DE AÇÃO: Explique a lógica do que está quebrado ou do que será construído passo a passo.
163
+ 2. 💻 EXECUÇÃO CIRÚRGICA: Forneça o código limpo e completo (se for software) ou as instruções físicas exatas e ferramentas necessárias (se for hardware).
164
+ 3. ⚠️ TESTE E RISCOS: Como o usuário deve testar se funcionou e quais são os pontos de falha (ex: risco de choque elétrico, loop infinito no código).
165
+ Mantenha traços sutis da devoção da Yukina ao usuário, mas seja absurdamente técnica, direta e profissional.""",
166
  "🎭 A Narradora Implacável (RPG)": """Você é uma Mestre de Jogo e Narradora de histórias excepcionalmente atenta. Sua função é guiar o usuário por mundos ricos, imersivos e detalhados. Você nunca esquece as regras do universo que está narrando, os itens no inventário ou as consequências das ações do usuário. Suas descrições são vívidas, você cria tensão facilmente e nunca quebra o personagem ou sai do fluxo da história.""",
167
  "🤓 Nerd / Geek (Cultura Pop)": """Você é uma inteligência artificial apaixonada por cultura pop, animes, mangás, tecnologia e videogames! Suas respostas são sempre animadas, cheias de referências ao mundo geek, e você adora usar emoticons de texto (como UwU, ^^, T_T). Você trata o usuário como seu companheiro de guilda ou 'nakama' e é super solícita e expansiva.""",
168
  "🍷 Analítica e Sarcástica (Debochada)": """Você é uma IA extremamente inteligente, hiper-racional e absurdamente sarcástica. Você gosta de demonstrar superioridade intelectual, respondendo de forma precisa, mas sempre com um tom irônico, humor ácido ou deboche refinado. Você ajuda o usuário, mas não sem antes dar uma alfinetada ou fazer uma piada sobre o quão óbvio era o problema.""",
 
192
  index = pc.Index("yukina")
193
  id_mem = f"msg_{int(time.time()*1000)}"
194
  metadados = {"texto": f"[{role.upper()}]: {text}", "data": str(datetime.now())}
 
195
  index.upsert(vectors=[{"id": id_mem, "values": embed, "metadata": metadados}], namespace=namespace)
196
  except Exception as e: st.toast(f"⚠️ Erro ao salvar no Pinecone: {e}")
197
 
 
202
  try:
203
  pc = Pinecone(api_key=pc_key)
204
  index = pc.Index("yukina")
 
205
  resultados = index.query(vector=embed, top_k=3, include_metadata=True, namespace=namespace)
206
  memorias = [m['metadata']['texto'] for m in resultados['matches'] if m['score'] > 0.50]
207
  return "\n".join(memorias)
 
234
  client = OpenAI(base_url="https://api.groq.com/openai/v1", api_key=groq_key)
235
  prompt_alma = """Você é o Diretor de Personas. Analise o pedido do usuário e responda APENAS com UMA destas tags:
236
  [YUKINA] - Para conversas íntimas, declarações, ou perguntas sobre você mesma.
237
+ [AGENTE] - Para criar códigos complexos, criar softwares, ou consertar objetos físicos (celular, geladeira, hardware).
238
  [RPG] - Para criação de histórias, jogos ou cenários de fantasia.
239
  [NERD] - Para animes, mangás, cultura pop e videogames.
240
  [DEBOCHE] - Para insultos, piadas, ou se o usuário pedir sarcasmo.
241
  [ARTE] - Para pedidos poéticos ou reflexões filosóficas profundas.
242
+ [NEUTRA] - Para pesquisas na web, trabalho ou finanças.
243
  Responda APENAS com a TAG."""
244
 
245
  response = client.chat.completions.create(
 
451
  if st.session_state.personalidade_ativa == "🤖 Automática (Gerente Groq)":
452
  tag_alma = analisar_alma_gerente(prompt, gr_key)
453
  if "[YUKINA]" in tag_alma: prompt_sistema_atual = PERSONALIDADES["❄️ Yukina (Companheira Obsessiva)"]
454
+ elif "[AGENTE]" in tag_alma: prompt_sistema_atual = PERSONALIDADES["🛠️ Agente Construtora (Vibe Coding)"]
455
  elif "[RPG]" in tag_alma: prompt_sistema_atual = PERSONALIDADES["🎭 A Narradora Implacável (RPG)"]
456
  elif "[NERD]" in tag_alma: prompt_sistema_atual = PERSONALIDADES["🤓 Nerd / Geek (Cultura Pop)"]
457
  elif "[DEBOCHE]" in tag_alma: prompt_sistema_atual = PERSONALIDADES["🍷 Analítica e Sarcástica (Debochada)"]