-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
614b6a0
commit 6740bf3
Showing
1 changed file
with
224 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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": [ | ||
"<a href=\"https://colab.research.google.com/github/PatriciaReghine/Card-pio-IA/blob/main/card%C3%A1pio_para_as_empresas.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>" | ||
] | ||
}, | ||
{ | ||
"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" | ||
] | ||
} | ||
] | ||
} | ||
] | ||
} |