From 6740bf309bca354e382b0d6d2d90ba44dcb365d4 Mon Sep 17 00:00:00 2001 From: Patricia Reghine <86622801+PatriciaReghine@users.noreply.github.com> Date: Sat, 11 May 2024 08:13:22 -0300 Subject: [PATCH] Criado usando o Colab --- "card\303\241pio_para_as_empresas.ipynb" | 224 +++++++++++++++++++++++ 1 file changed, 224 insertions(+) create mode 100644 "card\303\241pio_para_as_empresas.ipynb" diff --git "a/card\303\241pio_para_as_empresas.ipynb" "b/card\303\241pio_para_as_empresas.ipynb" new file mode 100644 index 0000000..958b9bd --- /dev/null +++ "b/card\303\241pio_para_as_empresas.ipynb" @@ -0,0 +1,224 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "toc_visible": true, + "authorship_tag": "ABX9TyNopESVnnX8FTimNlbe2BoV", + "include_colab_link": true + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "id": "3bXxnAg6P6xR" + }, + "outputs": [], + "source": [ + "!pip install -U -q google-generativeai" + ] + }, + { + "cell_type": "code", + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "import google.generativeai as genai" + ], + "metadata": { + "id": "9r6WOhveQxjO" + }, + "execution_count": 2, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "from google.colab import userdata\n", + "api_key = userdata.get('APIKEY')" + ], + "metadata": { + "id": "c7u2TNgOWsMO" + }, + "execution_count": 10, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# --- Parte 1: Nessa parte sera gerado Embeddings para o Cardápio ---\n", + "\n", + "model_embedding = \"models/embedding-001\"\n", + "\n", + "# Dados do cardápio\n", + "cardapio = {\n", + " \"Dia da semana\": [\"Segunda\", \"Terça\", \"Quarta\", \"Quinta\", \"Sexta\",\n", + " \"Segunda: opção 2\", \"Terça: opção 2\", \"Quarta: opção 2\",\n", + " \"Quinta: opção 2\", \"Sexta: opção 2\", \"Opção disponível todos os dias\"],\n", + " \"Proteína\": [\"Carne de boi\", \"Frango\", \"Carne de Boi\", \"Frango\", \"Peixe\",\n", + " \"Frango\", \"Carne de porco\", \"Frango\", \"Carne de Boi\", \"Carne de Boi\", \"Ovo\"],\n", + "}\n", + "df_cardapio = pd.DataFrame(cardapio)\n", + "\n", + "# Gerar embeddings para cada item do cardápio\n", + "df_cardapio[\"Embeddings\"] = df_cardapio.apply(\n", + " lambda row: genai.embed_content(\n", + " model=model_embedding,\n", + " content=row[\"Proteína\"],\n", + " task_type=\"RETRIEVAL_DOCUMENT\"\n", + " )[\"embedding\"], axis=1\n", + ")\n" + ], + "metadata": { + "id": "14Cq1Ea4RBQK" + }, + "execution_count": 11, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# --- Parte 2: Aqui serão utlizadas funções para registro de pedidos e recomendações ---\n", + "\n", + "LIMITE_PEDIDOS = 100\n", + "total_pedidos = 0\n", + "pedidos_proteina = {}\n", + "\n", + "def exibir_cardapio():\n", + " print(\"Cardápio da Semana:\")\n", + " print(df_cardapio[[\"Dia da semana\", \"Proteína\"]])\n", + "\n", + "def registrar_pedido():\n", + " global total_pedidos\n", + " if total_pedidos >= LIMITE_PEDIDOS:\n", + " print(\"Limite de pedidos atingido!\")\n", + " return\n", + "\n", + " exibir_cardapio()\n", + "\n", + " while True:\n", + " opcao = input(\"Digite o número da sua opção (correspondente à linha da tabela): \")\n", + " dia_semana = input(\"Digite o dia da semana: \")\n", + " try:\n", + " opcao = int(opcao)\n", + " proteina = df_cardapio.loc[opcao, \"Proteína\"]\n", + "\n", + " # Registrar o pedido\n", + " if dia_semana not in pedidos_proteina:\n", + " pedidos_proteina[dia_semana] = {}\n", + " if proteina not in pedidos_proteina[dia_semana]:\n", + " pedidos_proteina[dia_semana][proteina] = 0\n", + " pedidos_proteina[dia_semana][proteina] += 1\n", + " total_pedidos += 1\n", + " print(f\"Pedido registrado: {proteina} no {dia_semana}\")\n", + "\n", + " # Recomendar um prato similar\n", + " recomendacao = recomendar_prato(proteina)\n", + " if recomendacao:\n", + " print(f\"Você também pode gostar de: {recomendacao}\")\n", + "\n", + " break\n", + " except (ValueError, KeyError):\n", + " print(\"Opção ou dia da semana inválido. Tente novamente.\")\n", + "\n", + "def recomendar_prato(proteina_escolhida):\n", + " \"\"\"Recomenda um prato similar à proteína escolhida.\"\"\"\n", + "\n", + " embedding_escolhida = df_cardapio[df_cardapio[\"Proteína\"] == proteina_escolhida][\"Embeddings\"].iloc[0]\n", + "\n", + " similaridades = df_cardapio[\"Embeddings\"].apply(\n", + " lambda embedding: np.dot(embedding, embedding_escolhida)\n", + " )\n", + "\n", + " # Encontrar o prato mais similar\n", + " df_similar = df_cardapio.copy()\n", + " df_similar[\"Similaridade\"] = similaridades\n", + " df_similar = df_similar[df_similar[\"Proteína\"] != proteina_escolhida]\n", + " prato_similar = df_similar.sort_values(by=\"Similaridade\", ascending=False).iloc[0][\"Proteína\"]\n", + "\n", + " return prato_similar\n" + ], + "metadata": { + "id": "QEKs0mvbRND4" + }, + "execution_count": 12, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# --- Parte 3: Loop Principal ---\n", + "\n", + "while True:\n", + " comando = input(\"Digite um comando ('registrar', 'pedidos', 'sair'): \")\n", + " if comando == 'registrar':\n", + " registrar_pedido()\n", + " elif comando == 'pedidos':\n", + " print(\"\\nPedidos de Proteína:\")\n", + " for dia, proteinas in pedidos_proteina.items():\n", + " for proteina, quantidade in proteinas.items():\n", + " if quantidade > 0:\n", + " print(f\"{dia}: {quantidade} pedido(s) de {proteina}\")\n", + " elif comando == 'sair':\n", + " break\n", + " else:\n", + " print(\"Comando inválido.\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "XhfHgrbVRg7W", + "outputId": "1968a017-abbb-49f4-c0d7-cdfbd17a94d6" + }, + "execution_count": 14, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Digite um comando ('registrar', 'pedidos', 'sair'): registrar\n", + "Cardápio da Semana:\n", + " Dia da semana Proteína\n", + "0 Segunda Carne de boi\n", + "1 Terça Frango\n", + "2 Quarta Carne de Boi\n", + "3 Quinta Frango\n", + "4 Sexta Peixe\n", + "5 Segunda: opção 2 Frango\n", + "6 Terça: opção 2 Carne de porco\n", + "7 Quarta: opção 2 Frango\n", + "8 Quinta: opção 2 Carne de Boi\n", + "9 Sexta: opção 2 Carne de Boi\n", + "10 Opção disponível todos os dias Ovo\n", + "Digite o número da sua opção (correspondente à linha da tabela): 9\n", + "Digite o dia da semana: Sexta: opção 2\n", + "Pedido registrado: Carne de Boi no Sexta: opção 2\n", + "Você também pode gostar de: Carne de boi\n", + "Digite um comando ('registrar', 'pedidos', 'sair'): sair\n" + ] + } + ] + } + ] +} \ No newline at end of file