# Motor de Recomendações e IA ## Estado atual O DayMaker usa uma abordagem baseada em **IA de linguagem com contexto do inventário**. Não existe atualmente um motor de regras local como fonte principal das recomendações. A recomendação é gerada pelo serviço `AiRecommendationService`, que chama uma API Ollama remota. --- ## Serviço principal Ficheiro: ```text lib/services/ai_recommendation_service.dart ``` Responsabilidades: - Buscar itens do utilizador no Supabase. - Construir contexto textual do inventário. - Enviar mensagens para a API Ollama. - Manter histórico simples de conversa. - Suportar `silent: true` para sugestões estruturadas. - Buscar itens com imagens para a home. --- ## Endpoint e modelo | Campo | Valor | |-------|-------| | Endpoint | `https://apichat.epvc.pt/api/chat` | | Modelo | `llama3.2:3b` | | Stream | `false` | | Formato | Ollama `/api/chat` | Payload base: ```json { "model": "llama3.2:3b", "messages": [ {"role": "system", "content": "..."}, {"role": "user", "content": "..."} ], "stream": false } ``` --- ## Prompt de sistema A IA é instruída a: - Ajudar a montar outfits e escolher o que levar. - Usar linguagem simples e curta. - Não usar emojis. - Basear-se nas tags e notas dos itens. - Responder sempre em português. --- ## Contexto enviado à IA O contexto inclui os itens do utilizador: ```text Itens disponiveis no inventario do utilizador: - Bota verde (categoria: Roupa) [tags: casual, outdoor] - Switch (categoria: Eletrónica) [tags: gaming, casual] ``` Esse contexto é anexado à mensagem de sistema. --- ## Chat IA No ecrã `AiChatScreen`: - O utilizador escreve livremente. - Existem sugestões rápidas no topo. - A resposta é apresentada como conversa. - O histórico fica em memória no serviço enquanto a instância existir. --- ## Sugestão IA na Home Fluxo: 1. Utilizador toca em `Pedir sugestão à IA`. 2. App abre um diálogo e pede a ocasião. 3. O utilizador pode escrever algo como `piquenique no parque` ou escolher chip rápido. 4. A app envia a ocasião em modo `silent`. 5. A IA deve devolver apenas nomes exatos dos itens, um por linha. 6. A app cruza esses nomes com os itens reais do Supabase. 7. A app mostra cards com imagem, nome e categoria. 8. O utilizador pode exportar os itens para um dia da semana. --- ## Modo silencioso Quando `silent: true`, a instrução acrescentada ao pedido é: ```text responde APENAS com os nomes exatos dos itens do meu inventario que sugeres, um por linha, sem numeracao, sem explicacao, sem comentarios. ``` Isto permite transformar a resposta da IA numa lista de itens reais. --- ## Limitações conhecidas - A correspondência depende da IA devolver nomes próximos aos nomes reais. - Se a IA devolver texto extra, a app tenta limpar linhas, mas pode falhar correspondência. - A IA não vê imagens, apenas nomes, categorias, tags e notas. - Não há ranking local por clima, cor ou histórico de uso. --- ## Melhorias futuras - Resposta em JSON em vez de texto simples. - Validação local mais robusta por ID de item. - Sugestões com clima e duração. - Preferências aprendidas por histórico. - Integração com calendário.