bot-ml-validador / memory.py
AI Assistant
fix: corrige bug critico titulo nao passado ao prompt + 3 niveis de memoria
0c610e6
Raw
History Blame Contribute Delete
2.6 kB
# MEMÓRIA E APRENDIZADO DA IA (Estática — Fallback Local)
# Este arquivo é o backup local. A memória principal vem do Supabase via /ensinar no bot.
# Use este arquivo para produtos que você SEMPRE quer fixar, sem depender do banco de dados.
import unicodedata
# Dicionário de Memória Estática
# Formato: "palavra chave do título" : "Como chamar o produto"
LEARNED_PRODUCTS = {
# Roupas
"calça cargo": "Calça Cargo",
"moletom jogger": "Calça Moletom",
"vestido quadrilha": "Vestido Xadrez",
"rash guard": "Rash Guard Compressão",
"calcinha": "Calcinha",
"cueca": "Cueca",
"sutiã": "Sutiã",
"lingerie": "Lingerie",
"pijama": "Pijama",
"meia": "Meia",
"camiseta": "Camiseta",
"camisa social": "Camisa Social",
"jaqueta": "Jaqueta",
"casaco": "Casaco",
"shorts": "Shorts",
# Calçados
"tênis": "Tênis",
"sandália": "Sandália",
"sapato": "Sapato",
"chinelo": "Chinelo",
"bota": "Bota",
# Tecnologia
"iphone": "iPhone",
"smart tv": "Smart TV",
"notebook": "Notebook",
"tablet": "Tablet",
"airpods": "AirPods",
# Casa
"sabão em pó": "Sabão em Pó",
"aspirador": "Aspirador de Pó",
"fritadeira": "Airfryer",
"cafeteira": "Cafeteira",
# Beleza
"protetor solar": "Protetor Solar",
"perfume": "Perfume",
"shampoo": "Shampoo",
"condicionador": "Condicionador",
# Esporte
"haltere": "Haltere",
"colchonete": "Colchonete",
"bicicleta": "Bicicleta",
"patins": "Patins",
}
def normalize(text):
"""Remove acentos e deixa em minúsculo para comparação robusta."""
return unicodedata.normalize('NFD', text).encode('ascii', 'ignore').decode('utf-8').lower()
def get_full_prompt(title=""):
"""
Gera o prompt para a IA com base no título.
Verifica a memória estática primeiro.
Se achar, injeta como dica forte no prompt.
"""
base_prompt = "answer pt Descreva o nome do produto principal da imagem de forma curta e direta, em 3 palavras no máximo."
if not title:
return base_prompt
title_lower = normalize(title)
# Vasculha a memória para ver se o produto já foi ensinado
for key, correct_name in LEARNED_PRODUCTS.items():
if normalize(key) in title_lower:
# Injeta a memória ensinada como instrução forte no prompt
return f"{base_prompt} Importante: o produto na imagem é um(a) {correct_name}. Responda apenas '{correct_name}'."
# Se não achar na memória, ela tenta identificar sozinha
return base_prompt