from fastapi import FastAPI, HTTPException from fastapi.responses import HTMLResponse from supabase import create_client, Client from supabase.lib.client_options import ClientOptions from groq import Groq import os app = FastAPI() # --- CONFIGURAÇÕES --- SUPABASE_URL = "https://mgjzcnaijbeyrkojudlz.supabase.co" SUPABASE_KEY = os.environ.get("SUPABASE_KEY") GROQ_API_KEY = os.environ.get("GROQ_API_KEY") MODELO_LLM = "meta-llama/llama-4-scout-17b-16e-instruct" if not SUPABASE_KEY or not GROQ_API_KEY: print("AVISO: Chaves de API não encontradas nas variáveis de ambiente.") opts = ClientOptions(schema="mkt_auto") supabase: Client = create_client( SUPABASE_URL, SUPABASE_KEY, options=opts ) groq_client = Groq(api_key=GROQ_API_KEY) @app.get("/", response_class=HTMLResponse) def home(): return """ Recomend_AI | MKT Auto

🛒 Recomend_AI

""" @app.get("/recomendacoes/{id_cliente}") async def get_recomendacoes(id_cliente: str): try: response = ( supabase.table("pedido") .select("id, itempedido(id_produto, produto(nome))") .eq("id_cliente", id_cliente) .execute() ) if not response.data: return {"msg": "Sem histórico para este cliente."} produtos_comprados = [] for pedido in response.data: itens = pedido.get('itempedido', []) if isinstance(itens, list): for item in itens: if item.get('produto'): produtos_comprados.append(item['produto']['nome']) if not produtos_comprados: return {"msg": "O cliente tem pedidos, mas os itens não foram encontrados."} historico_unico = list(set(produtos_comprados))[:5] lista_compras = ", ".join(historico_unico) produtos_response = supabase.table("produto").select("nome").execute() all_products = [p['nome'] for p in produtos_response.data] lista_all = ", ".join(all_products) promos_response = ( supabase.table("historico_preco") .select("id_produto_mercado, preco_antigo, preco_novo, produto_mercado(produto(nome))") .lt("preco_novo", "preco_antigo") .order("id", desc=True) .limit(20) .execute() ) produtos_promo = [] for hist in promos_response.data: produto_mercado = hist.get('produto_mercado') if produto_mercado and produto_mercado.get('produto'): nome = produto_mercado['produto']['nome'] if nome not in produtos_promo: produtos_promo.append(nome) lista_promo = ", ".join(produtos_promo) if produtos_promo else "Nenhuma promoção encontrada." prompt = f""" O cliente comprou: {lista_compras}. Lista de todos os produtos disponíveis: {lista_all}. Produtos em promoção (preço reduzido recentemente): {lista_promo}. Sugira exatamente 5 produtos NOVOS (não comprados pelo cliente) da lista de disponíveis. Foque em produtos relacionados aos comprados. Responda APENAS com os 5 nomes separados por vírgula. """ completion = groq_client.chat.completions.create( model=MODELO_LLM, messages=[{"role": "user", "content": prompt}], temperature=0.7, ) sugestoes_ia = completion.choices[0].message.content.strip().split(",") sugestoes_ia = [s.strip() for s in sugestoes_ia if s.strip()] return { "id_cliente": id_cliente, "historico": historico_unico, "recomendacoes_ia": sugestoes_ia } except Exception as e: print(f"Erro: {e}") raise HTTPException(status_code=500, detail=str(e))