LuisMBA commited on
Commit
c21592f
Β·
verified Β·
1 Parent(s): 993f74e

Upload multimodal-rag-faiss.ipynb

Browse files
Files changed (1) hide show
  1. multimodal-rag-faiss.ipynb +1 -0
multimodal-rag-faiss.ipynb ADDED
@@ -0,0 +1 @@
 
 
1
+ {"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.11.11","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":11418409,"sourceType":"datasetVersion","datasetId":7151225},{"sourceId":11418465,"sourceType":"datasetVersion","datasetId":7151265},{"sourceId":11418505,"sourceType":"datasetVersion","datasetId":7151285},{"sourceId":11418865,"sourceType":"datasetVersion","datasetId":7151483}],"dockerImageVersionId":31012,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"!pip install faiss-cpu sentence-transformers clip-anytorch torch pillow opencv-python PyMuPDF","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-15T10:20:41.127717Z","iopub.execute_input":"2025-04-15T10:20:41.128650Z","iopub.status.idle":"2025-04-15T10:22:08.422341Z","shell.execute_reply.started":"2025-04-15T10:20:41.128613Z","shell.execute_reply":"2025-04-15T10:22:08.421482Z"},"collapsed":true,"jupyter":{"outputs_hidden":true}},"outputs":[{"name":"stdout","text":"Collecting faiss-cpu\n Downloading faiss_cpu-1.10.0-cp311-cp311-manylinux_2_28_x86_64.whl.metadata (4.4 kB)\nRequirement already satisfied: sentence-transformers in /usr/local/lib/python3.11/dist-packages (3.4.1)\nCollecting clip-anytorch\n Downloading clip_anytorch-2.6.0-py3-none-any.whl.metadata (8.4 kB)\nRequirement already satisfied: torch in /usr/local/lib/python3.11/dist-packages (2.5.1+cu124)\nRequirement already satisfied: pillow in /usr/local/lib/python3.11/dist-packages (11.1.0)\nRequirement already satisfied: opencv-python in /usr/local/lib/python3.11/dist-packages (4.11.0.86)\nCollecting PyMuPDF\n Downloading pymupdf-1.25.5-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (3.4 kB)\nRequirement already satisfied: numpy<3.0,>=1.25.0 in /usr/local/lib/python3.11/dist-packages (from faiss-cpu) (1.26.4)\nRequirement already satisfied: packaging in /usr/local/lib/python3.11/dist-packages (from faiss-cpu) (24.2)\nRequirement already satisfied: transformers<5.0.0,>=4.41.0 in /usr/local/lib/python3.11/dist-packages (from sentence-transformers) (4.51.1)\nRequirement already satisfied: tqdm in /usr/local/lib/python3.11/dist-packages (from sentence-transformers) (4.67.1)\nRequirement already satisfied: scikit-learn in /usr/local/lib/python3.11/dist-packages (from sentence-transformers) (1.2.2)\nRequirement already satisfied: scipy in /usr/local/lib/python3.11/dist-packages (from sentence-transformers) (1.15.2)\nRequirement already satisfied: huggingface-hub>=0.20.0 in /usr/local/lib/python3.11/dist-packages (from sentence-transformers) (0.30.2)\nCollecting ftfy (from clip-anytorch)\n Downloading ftfy-6.3.1-py3-none-any.whl.metadata (7.3 kB)\nRequirement already satisfied: regex in /usr/local/lib/python3.11/dist-packages (from clip-anytorch) (2024.11.6)\nRequirement already satisfied: torchvision in /usr/local/lib/python3.11/dist-packages (from clip-anytorch) (0.20.1+cu124)\nRequirement already satisfied: filelock in /usr/local/lib/python3.11/dist-packages (from torch) (3.18.0)\nRequirement already satisfied: typing-extensions>=4.8.0 in /usr/local/lib/python3.11/dist-packages (from torch) (4.13.1)\nRequirement already satisfied: networkx in /usr/local/lib/python3.11/dist-packages (from torch) (3.4.2)\nRequirement already satisfied: jinja2 in /usr/local/lib/python3.11/dist-packages (from torch) (3.1.6)\nRequirement already satisfied: fsspec in /usr/local/lib/python3.11/dist-packages (from torch) (2025.3.2)\nRequirement already satisfied: nvidia-cuda-nvrtc-cu12==12.4.127 in /usr/local/lib/python3.11/dist-packages (from torch) (12.4.127)\nRequirement already satisfied: nvidia-cuda-runtime-cu12==12.4.127 in /usr/local/lib/python3.11/dist-packages (from torch) (12.4.127)\nRequirement already satisfied: nvidia-cuda-cupti-cu12==12.4.127 in /usr/local/lib/python3.11/dist-packages (from torch) (12.4.127)\nCollecting nvidia-cudnn-cu12==9.1.0.70 (from torch)\n Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\nCollecting nvidia-cublas-cu12==12.4.5.8 (from torch)\n Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\nCollecting nvidia-cufft-cu12==11.2.1.3 (from torch)\n Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\nCollecting nvidia-curand-cu12==10.3.5.147 (from torch)\n Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\nCollecting nvidia-cusolver-cu12==11.6.1.9 (from torch)\n Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\nCollecting nvidia-cusparse-cu12==12.3.1.170 (from torch)\n Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\nRequirement already satisfied: nvidia-nccl-cu12==2.21.5 in /usr/local/lib/python3.11/dist-packages (from torch) (2.21.5)\nRequirement already satisfied: nvidia-nvtx-cu12==12.4.127 in /usr/local/lib/python3.11/dist-packages (from torch) (12.4.127)\nCollecting nvidia-nvjitlink-cu12==12.4.127 (from torch)\n Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\nRequirement already satisfied: triton==3.1.0 in /usr/local/lib/python3.11/dist-packages (from torch) (3.1.0)\nRequirement already satisfied: sympy==1.13.1 in /usr/local/lib/python3.11/dist-packages (from torch) (1.13.1)\nRequirement already satisfied: mpmath<1.4,>=1.1.0 in /usr/local/lib/python3.11/dist-packages (from sympy==1.13.1->torch) (1.3.0)\nRequirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.11/dist-packages (from huggingface-hub>=0.20.0->sentence-transformers) (6.0.2)\nRequirement already satisfied: requests in /usr/local/lib/python3.11/dist-packages (from huggingface-hub>=0.20.0->sentence-transformers) (2.32.3)\nRequirement already satisfied: mkl_fft in /usr/local/lib/python3.11/dist-packages (from numpy<3.0,>=1.25.0->faiss-cpu) (1.3.8)\nRequirement already satisfied: mkl_random in /usr/local/lib/python3.11/dist-packages (from numpy<3.0,>=1.25.0->faiss-cpu) (1.2.4)\nRequirement already satisfied: mkl_umath in /usr/local/lib/python3.11/dist-packages (from numpy<3.0,>=1.25.0->faiss-cpu) (0.1.1)\nRequirement already satisfied: mkl in /usr/local/lib/python3.11/dist-packages (from numpy<3.0,>=1.25.0->faiss-cpu) (2025.1.0)\nRequirement already satisfied: tbb4py in /usr/local/lib/python3.11/dist-packages (from numpy<3.0,>=1.25.0->faiss-cpu) (2022.1.0)\nRequirement already satisfied: mkl-service in /usr/local/lib/python3.11/dist-packages (from numpy<3.0,>=1.25.0->faiss-cpu) (2.4.1)\nRequirement already satisfied: tokenizers<0.22,>=0.21 in /usr/local/lib/python3.11/dist-packages (from transformers<5.0.0,>=4.41.0->sentence-transformers) (0.21.0)\nRequirement already satisfied: safetensors>=0.4.3 in /usr/local/lib/python3.11/dist-packages (from transformers<5.0.0,>=4.41.0->sentence-transformers) (0.5.2)\nRequirement already satisfied: wcwidth in /usr/local/lib/python3.11/dist-packages (from ftfy->clip-anytorch) (0.2.13)\nRequirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.11/dist-packages (from jinja2->torch) (3.0.2)\nRequirement already satisfied: joblib>=1.1.1 in /usr/local/lib/python3.11/dist-packages (from scikit-learn->sentence-transformers) (1.4.2)\nRequirement already satisfied: threadpoolctl>=2.0.0 in /usr/local/lib/python3.11/dist-packages (from scikit-learn->sentence-transformers) (3.6.0)\nRequirement already satisfied: intel-openmp<2026,>=2024 in /usr/local/lib/python3.11/dist-packages (from mkl->numpy<3.0,>=1.25.0->faiss-cpu) (2024.2.0)\nRequirement already satisfied: tbb==2022.* in /usr/local/lib/python3.11/dist-packages (from mkl->numpy<3.0,>=1.25.0->faiss-cpu) (2022.1.0)\nRequirement already satisfied: tcmlib==1.* in /usr/local/lib/python3.11/dist-packages (from tbb==2022.*->mkl->numpy<3.0,>=1.25.0->faiss-cpu) (1.2.0)\nRequirement already satisfied: intel-cmplr-lib-rt in /usr/local/lib/python3.11/dist-packages (from mkl_umath->numpy<3.0,>=1.25.0->faiss-cpu) (2024.2.0)\nRequirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.11/dist-packages (from requests->huggingface-hub>=0.20.0->sentence-transformers) (3.4.1)\nRequirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.11/dist-packages (from requests->huggingface-hub>=0.20.0->sentence-transformers) (3.10)\nRequirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.11/dist-packages (from requests->huggingface-hub>=0.20.0->sentence-transformers) (2.3.0)\nRequirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.11/dist-packages (from requests->huggingface-hub>=0.20.0->sentence-transformers) (2025.1.31)\nRequirement already satisfied: intel-cmplr-lib-ur==2024.2.0 in /usr/local/lib/python3.11/dist-packages (from intel-openmp<2026,>=2024->mkl->numpy<3.0,>=1.25.0->faiss-cpu) (2024.2.0)\nDownloading faiss_cpu-1.10.0-cp311-cp311-manylinux_2_28_x86_64.whl (30.7 MB)\n\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m30.7/30.7 MB\u001b[0m \u001b[31m56.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m:00:01\u001b[0m00:01\u001b[0m\n\u001b[?25hDownloading clip_anytorch-2.6.0-py3-none-any.whl (1.4 MB)\n\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.4/1.4 MB\u001b[0m \u001b[31m48.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n\u001b[?25hDownloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl (363.4 MB)\n\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m363.4/363.4 MB\u001b[0m \u001b[31m4.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m0:00:01\u001b[0m00:01\u001b[0m\n\u001b[?25hDownloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl (664.8 MB)\n\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m664.8/664.8 MB\u001b[0m \u001b[31m2.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m0:00:01\u001b[0m00:01\u001b[0m\n\u001b[?25hDownloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl (211.5 MB)\n\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m211.5/211.5 MB\u001b[0m \u001b[31m6.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m0:00:01\u001b[0m00:01\u001b[0m\n\u001b[?25hDownloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl (56.3 MB)\n\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m56.3/56.3 MB\u001b[0m \u001b[31m27.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m:00:01\u001b[0m00:01\u001b[0m\n\u001b[?25hDownloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl (127.9 MB)\n\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m127.9/127.9 MB\u001b[0m \u001b[31m12.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m:00:01\u001b[0m00:01\u001b[0m\n\u001b[?25hDownloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl (207.5 MB)\n\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m207.5/207.5 MB\u001b[0m \u001b[31m2.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m0:00:01\u001b[0m00:01\u001b[0m\n\u001b[?25hDownloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m21.1/21.1 MB\u001b[0m \u001b[31m81.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m:00:01\u001b[0m00:01\u001b[0m\n\u001b[?25hDownloading pymupdf-1.25.5-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (20.0 MB)\n\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m20.0/20.0 MB\u001b[0m \u001b[31m84.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m:00:01\u001b[0m00:01\u001b[0m\n\u001b[?25hDownloading ftfy-6.3.1-py3-none-any.whl (44 kB)\n\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m44.8/44.8 kB\u001b[0m \u001b[31m2.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n\u001b[?25hInstalling collected packages: PyMuPDF, nvidia-nvjitlink-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cublas-cu12, ftfy, nvidia-cusparse-cu12, nvidia-cudnn-cu12, nvidia-cusolver-cu12, faiss-cpu, clip-anytorch\n Attempting uninstall: nvidia-nvjitlink-cu12\n Found existing installation: nvidia-nvjitlink-cu12 12.8.93\n Uninstalling nvidia-nvjitlink-cu12-12.8.93:\n Successfully uninstalled nvidia-nvjitlink-cu12-12.8.93\n Attempting uninstall: nvidia-curand-cu12\n Found existing installation: nvidia-curand-cu12 10.3.9.90\n Uninstalling nvidia-curand-cu12-10.3.9.90:\n Successfully uninstalled nvidia-curand-cu12-10.3.9.90\n Attempting uninstall: nvidia-cufft-cu12\n Found existing installation: nvidia-cufft-cu12 11.3.3.83\n Uninstalling nvidia-cufft-cu12-11.3.3.83:\n Successfully uninstalled nvidia-cufft-cu12-11.3.3.83\n Attempting uninstall: nvidia-cublas-cu12\n Found existing installation: nvidia-cublas-cu12 12.8.4.1\n Uninstalling nvidia-cublas-cu12-12.8.4.1:\n Successfully uninstalled nvidia-cublas-cu12-12.8.4.1\n Attempting uninstall: nvidia-cusparse-cu12\n Found existing installation: nvidia-cusparse-cu12 12.5.8.93\n Uninstalling nvidia-cusparse-cu12-12.5.8.93:\n Successfully uninstalled nvidia-cusparse-cu12-12.5.8.93\n Attempting uninstall: nvidia-cudnn-cu12\n Found existing installation: nvidia-cudnn-cu12 9.3.0.75\n Uninstalling nvidia-cudnn-cu12-9.3.0.75:\n Successfully uninstalled nvidia-cudnn-cu12-9.3.0.75\n Attempting uninstall: nvidia-cusolver-cu12\n Found existing installation: nvidia-cusolver-cu12 11.7.3.90\n Uninstalling nvidia-cusolver-cu12-11.7.3.90:\n Successfully uninstalled nvidia-cusolver-cu12-11.7.3.90\n\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\npylibcugraph-cu12 24.12.0 requires pylibraft-cu12==24.12.*, but you have pylibraft-cu12 25.2.0 which is incompatible.\npylibcugraph-cu12 24.12.0 requires rmm-cu12==24.12.*, but you have rmm-cu12 25.2.0 which is incompatible.\u001b[0m\u001b[31m\n\u001b[0mSuccessfully installed PyMuPDF-1.25.5 clip-anytorch-2.6.0 faiss-cpu-1.10.0 ftfy-6.3.1 nvidia-cublas-cu12-12.4.5.8 nvidia-cudnn-cu12-9.1.0.70 nvidia-cufft-cu12-11.2.1.3 nvidia-curand-cu12-10.3.5.147 nvidia-cusolver-cu12-11.6.1.9 nvidia-cusparse-cu12-12.3.1.170 nvidia-nvjitlink-cu12-12.4.127\n","output_type":"stream"}],"execution_count":2},{"cell_type":"markdown","source":"# Part 1: Create the indexes for every type of input","metadata":{}},{"cell_type":"code","source":"import faiss\nimport numpy as np\nfrom sentence_transformers import SentenceTransformer\nimport clip\nimport torch\nfrom PIL import Image\n\n# Initialize FAISS index\ndimension = 384 # embedding size for text\nimage_index = faiss.IndexFlatL2(512) # embedding size for images\ntext_index = faiss.IndexFlatL2(dimension)\ntext_metadata, image_metadata = [],[]\n\n# Load models\ntext_encoder = SentenceTransformer(\"all-MiniLM-L12-v2\")\nclip_model, clip_preprocess = clip.load(\"ViT-B/32\", device=\"cpu\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-15T10:52:27.551211Z","iopub.execute_input":"2025-04-15T10:52:27.552234Z","iopub.status.idle":"2025-04-15T10:52:35.144023Z","shell.execute_reply.started":"2025-04-15T10:52:27.552202Z","shell.execute_reply":"2025-04-15T10:52:35.143066Z"}},"outputs":[],"execution_count":13},{"cell_type":"markdown","source":"**Text embeddings**","metadata":{}},{"cell_type":"code","source":"texts = [\"\"\"Asparagus Soup.\nIngredients. \n2 TBSPs extra-virgin olive oil, more for drizzling. \n3 scallions, chopped. \n2 small Yukon gold potatoes, diced. \n3 garlic cloves, minced Heaping. \n1/2 TSP sea salt, more to taste. \n1/2 TSP freshly ground black pepper. \n3 cups water. \n2 cups chopped asparagus. \n1 cup frozen peas. \n1 heaping TSP Dijon mustard. \n3 TBSPs lemon juice. \n1/2 TSP lemon zest. \n1 packed cup basil. \nMethod. \nMake the mint & pine nut topping by chopping together the \npine nuts, mint, red pepper flakes, and salt. \nSet aside. \nHeat the oil in a medium pot over medium heat. \nAdd the scallions and cook for 1 to 2 minutes, or until soft. \nAdd the potatoes, garlic, salt, pepper, and water and simmer for \n12 minutes or until the potatoes are fork-tender. \nAdd the asparagus to the pot of potatoes and continue sim- \nmering for 5 more minutes. \nRemove the pot from the heat and let cool for 5 minutes. \nStir in the peas and then transfer the soup to a blender. \nAdd the mustard, lemon juice, and lemon zest and blend until \ncreamy. \nAdd the basil and blend until combined.\"\"\", \n\"\"\"Traditional Irish Stew. \nIngredients. \n2 TBSP Vegetable Oil. \n1 LB Lamb Cutlets (Bone Removed, Cut into Chunks). \n2 LBs Russet Potatoes (Peeled and Quartered). \n1 Yellow Onion (Roughly Chopped). \n1 Leek (Finely Sliced). \n2 Carrots (Roughly Chopped). \n2 TBSP All Purpose Flour. \n3 Cups Beef Stock. \n2 Cabbage Leaves (Thinly Sliced). \n1/2 TSP Salt. \n1/2 TSP Ground Black Pepper. \nMethod. \nHeat oven to 350 degrees. \nIn a large skillet, heat half of the oil until hot, add half of the \nlamb cubes and brown all over, about 3-4 minutes. \nRemove the browned lamb and place in a casserole dish. \nCover the lamb in the casserole dish with half of eh potatoes, \nonion, leek and carrots. \nAdd remaining oil to the skillet and brown the remaining lamb \nand add to the casserole dish on top of the vegetables, cover with the \nremaining vegetables. \nAdd the flour to the still hot skillet and stir to soak up the lamb \nfat and juices. \nCook on a low heat for another 2-4 minutes. \nAdd the stock a little at a time to the flour mixture and mix until \nit is a smooth, lump free gravy. \nPour this gravy over the lamb and vegetables. \nAdd any remaining beef stock to the casserole dish, cover and cook in the preheated oven for 1 hour. \nAfter 1 hour, add the cabbage to the casserole dish, replace the id \nand cook for another 1 hour, check regularly to make sure the liq- \nuids have no evaporated, if the liquid is getting low, add a little \nwater to the casserole dish to cover the vegetables and lamb and \ncontinue cooking. \nRemove the casserole dish from the oven, season with salt and \npepper and serve the Irish stew hot in individual bowls.\"\"\"]\n\nfor text in texts:\n embedding = text_encoder.encode(text)\n text_index.add(np.array([embedding]))\n text_metadata.append({\"type\": \"text\", \"content\": text})","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-15T10:52:35.145667Z","iopub.execute_input":"2025-04-15T10:52:35.145992Z","iopub.status.idle":"2025-04-15T10:52:35.441380Z","shell.execute_reply.started":"2025-04-15T10:52:35.145960Z","shell.execute_reply":"2025-04-15T10:52:35.440680Z"}},"outputs":[{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"11172ecb7fcf4563942ad47d2a935d66"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"b99fcf4694434beeb2bda26dbfbcdb40"}},"metadata":{}}],"execution_count":14},{"cell_type":"markdown","source":"**PDF Embeddings**","metadata":{}},{"cell_type":"code","source":"import fitz # PyMuPDF\n\npdf_paths = [\"/kaggle/input/recipes/pdf_recipes.pdf\"]\nfor pdf_path in pdf_paths:\n doc = fitz.open(pdf_path)\n for page_num, page in enumerate(doc):\n text = page.get_text().strip()\n if text:\n embedding = text_encoder.encode(text)\n text_index.add(np.array([embedding]))\n text_metadata.append({\"type\": \"pdf\", \"content\": text, \"page\": page_num + 1, \"source\": pdf_path})","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-15T10:53:24.774110Z","iopub.execute_input":"2025-04-15T10:53:24.774788Z","iopub.status.idle":"2025-04-15T10:53:35.066493Z","shell.execute_reply.started":"2025-04-15T10:53:24.774763Z","shell.execute_reply":"2025-04-15T10:53:35.065429Z"},"collapsed":true,"jupyter":{"outputs_hidden":true}},"outputs":[{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"6918c51b888044c7afd714b2d4b5f461"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"8f69ff2af8a14d5f88ffcfb12cf28907"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"01a9e85efc724879af8bd2f3ca193081"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"7cd9d7ed694249e7858236a0cbe59735"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"922799df81ef4f3e98fad24a6eee6f48"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"7f46da5d93514f34a8f1bc5dd737b183"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"5dafbf0547d743309cd238fbb98de104"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"6db292c7887248a5ada0f0020d2ef452"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"0570faede8254f51b1a6d186f88f4592"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"c86079c391c94663a92c64a967c79c20"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"cdeafc59d9714ffbb9d11e33213d62dd"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"6188c6daf1bb48f4908ece99c12ba7e4"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"c50cc95a9a2145d786469961086c9904"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"5256e1a5826b4012bcf7480b975508cf"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"9642497a1fca46a0a537dfd00b8456b4"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"1f5fc2b905ea4b5492a84c133451d584"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"eb2ff3b739c04de68480720eb47ccce3"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"a861d837ad714838b667806329329c7c"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"098f13506cbe4cf4acebd5d2b1fe8390"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"6bc788186d3b48639afe4f2928ba951f"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"3542e87f8cd44f8b8700734411445e04"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"630128812e784c9d886cb9ac5bf6885f"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"961e9f5f0ca74fb8950a3d44d912b1e8"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"c07df6d06a2e4821a67f417b82e8f653"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"5b9f45d0c3a9436da6a5ecd9b4e92a00"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"c5633d31718445a4aa97d03fdc45ff1e"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"2f12964099b5494c83588267b6cec355"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"9a41787017b14b97885ca7f74c870977"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"8854d2cec60541f4b1e7078c35dbc04b"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"50c8529b962b48758dfdc9b27238a546"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"7ba8cb007a6d40c6806a374dddba03e2"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"81c60b19f8b540c3a78c58bf3d4089bc"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"9062044768ac4eb6ad06344323bc564c"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"6c62681165c648f98bd5b42636ac6c6e"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"d6bbff5a1e5740ecae2fa053bc2195c7"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"b6baae0f8e724b39aaa55d41f266c4b9"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"c547c4fc3a6f4bdd90ac68e8a8e02b7a"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"2e871aba63384d8c88c86a5eb050e69a"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"c90525820baf49518b65cf82c5317195"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"0e9a9394214b465b9140ea5bd7baecbb"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"5b9202e6fa29432cbf9aafa4c355dfd3"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"a3a425b97a4a4c7c9681520d6505aa17"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"03eadd83528a4d0d9a20af8569f965cf"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"ecbbc22957834357a0ea32e4bfc14639"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"5c0b1ad4fdb74ee09ac07a2d02222adf"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"1c5af2cbf4f3499daf2bc45a9916bf17"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"1d2324de8ad54c70973261743caa7ce9"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"47fc2fd6db5e4fdea6aed47ef0c12c96"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"61d88b82ba71410a8c9fe1346b2cacc4"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"91bcc57d013d479b80d3b933b41f85bf"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"df512f6bd0f044cfa54ce3bdd6b2c824"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"9693b3ac60a4493a823ff03640bb3371"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"47c2e54988e542008d320c624753bf06"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"f479a317fb10429a9cb52ce386148193"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"3b17414ce7c948409074de277547de54"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"802297f07ab142d29a8e9e6abf01d210"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"28079fe9fd3343598a1dd157bebadf7b"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"b9402bee5e4b42af86fcbe4f7ba0b90c"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"1935d2b5318d496d97a83cca9ca37f02"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"346c76c97002476ea01cce6f0b311456"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"34b637dee7f54008aa509c25920a66f7"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"5bcc0b156ff547929be3aa9de8d1e18c"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"0bfa5f2c35a045c6a4ac60e10a65767f"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"1af8a8c578c94ed28dd4377cd9a580f3"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"de0544f541f94916b8d002b79185792a"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"cd26a3e0b9d3410b87737cb2507ce418"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"67bbd6c2f4ea4177bdb4465caebfc442"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"e2b4c2c3b2f34393a3789a59ed21df26"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"e95a14097e784db191dd3de637d0163b"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"673862ec2eec49d9ba92bed62ca9343f"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"69fa31a36eef4f75b013cbf35a0cf627"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"d1ab7213366a40e4b64ab2104deb9f46"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"9cb82bc5e33848c99a33dcba9a4aa415"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"340ba2c9d9ce4541a56c3aafde63c189"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"27b33a82033b464ead335fcb27de1f19"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"14f002cc9cbc440b9d6525e75a66168d"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"68a167a2a3244d18981e25816c7484ca"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"7284636e5ac445ac955098fec3177647"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"7033572ea19a4eb98f96f2753a1e779f"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"5d767f421c23440d893f658aca22e3d4"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"dbf40d7770b94d4dbd7a999ea3e25229"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"f6581a471290487bbb1b42ef456b3a4f"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"2e21128518204cbbb2fb0d30c15d6cdc"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"e5272c3fbab046b0bba1250b1e7a9c59"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"4f92e229defc46ed82d33fcca8aff526"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"d697c7cd343747b78c145de1a648d84c"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"c42909e166e94382a2370f089d5730b8"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"d8f42907fe504c02b2cd7d7c4de29bcd"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"dd941e63973c4063b62bafe175a57d17"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"75520b6de82e4298bac673cb322f45d4"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"ab684f93cad9419685670b67ec7279a1"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"8aa1263adc18484c961d44b4e8b10114"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"4f0b79bc0e8c43a6a86d47e795034584"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"e966ddf4199b4df2a40e464c72e0f04f"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"f1ad3b59252a475db3c5b7ea79df65d7"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"2c00cdf00d3148419a63ebf0f3df732e"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"1d88fb731f92445a859842bd975f3295"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"8c9b24371bb440198af44b47bf012b16"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"420cd6f60b8f4965a6c7032b34693642"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"fe52b8e019a64bedac34b66ee2e10609"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"dacdc6f87749422fbf2f325827547763"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"422abfe95e34478ca2ba6e51bae625ea"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"7e9a994830fc4ed9820dd594a9ff4bbf"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"66c1719bfa434dc19b70a5098b35fb98"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"ba5d206341bb495bb0479fa8ca89055a"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"5c79e21cd7c44d53b68641f5ba3b9688"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"5c7afcaae9e64a3082ab38529af0871d"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"c0ac8b75775f4cb393cd636dd853125d"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"fdfc1ff4d4224ab9a3d4e3bd34128e2e"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"54950c55bc6548878663372bdf3264f6"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"ef2b141c1a3f4d7684e41fa71fda0adb"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"efbdb2286cd046a39b1f77c9bf7e65be"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"bb130c2afde546b0914c8584dd47a13a"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"9b3a14a2e16d485a9d6fa44ac5e59de0"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"9f5c8813b1814d2ca380a4b8eb620593"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"a93a31c9875d4a12a8df41aee8f0c4b1"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"6987a65d48fe43178cd1b558d9a0c470"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"f84af8e7d02943cfb7a47f2bff5e9967"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"b8bd0d58696049aa9b3e2327e4e0c7cc"}},"metadata":{}},{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"75604964aae4436a95d84598253ddfaf"}},"metadata":{}}],"execution_count":15},{"cell_type":"markdown","source":"**Image embedding**","metadata":{}},{"cell_type":"code","source":"image_paths = [\"/kaggle/input/breakfast/English_with_Hash_Browns.jpg\", \"/kaggle/input/fishchips/FandC.jpg\"]\nfor path in image_paths:\n image = clip_preprocess(Image.open(path)).unsqueeze(0)\n with torch.no_grad():\n embedding = clip_model.encode_image(image).squeeze().numpy()\n image_index.add(np.array([embedding]))\n image_metadata.append({\"type\": \"image\", \"path\": path})","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-15T10:53:51.943810Z","iopub.execute_input":"2025-04-15T10:53:51.944136Z","iopub.status.idle":"2025-04-15T10:53:52.240013Z","shell.execute_reply.started":"2025-04-15T10:53:51.944112Z","shell.execute_reply":"2025-04-15T10:53:52.239101Z"}},"outputs":[],"execution_count":16},{"cell_type":"markdown","source":"**Save indexes**","metadata":{}},{"cell_type":"code","source":"# Save locally\nfaiss.write_index(text_index, \"text.index\")\nfaiss.write_index(image_index, \"image.index\")\n\n# Save metadata\nimport json\njson.dump(text_metadata, open(\"text_metadata.json\", \"w\"))\njson.dump(image_metadata, open(\"image_metadata.json\", \"w\"))\n\n# Save in Ocean\nfaiss.write_index(text_index, \"text_recipes_test_br_00.ocean\")\nfaiss.write_index(image_index, \"image_recipes_test_br_00.ocean\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-15T11:03:00.596221Z","iopub.execute_input":"2025-04-15T11:03:00.596947Z","iopub.status.idle":"2025-04-15T11:03:00.607279Z","shell.execute_reply.started":"2025-04-15T11:03:00.596922Z","shell.execute_reply":"2025-04-15T11:03:00.606276Z"}},"outputs":[],"execution_count":23},{"cell_type":"markdown","source":"# Part 2: Query + retrieval","metadata":{}},{"cell_type":"code","source":"import faiss\nfrom sentence_transformers import SentenceTransformer\nimport clip\nfrom PIL import Image\nimport torch\n\n# Load FAISS indexes\ntext_index = faiss.read_index(\"text_recipes_test_br_00.ocean\")\nimage_index = faiss.read_index(\"image_recipes_test_br_00.ocean\")\n\n# Initialize models for text and image processing\ntext_encoder = SentenceTransformer(\"sentence-transformers/all-MiniLM-L12-v2\")\nclip_model, clip_preprocess = clip.load(\"ViT-B/32\", device=\"cpu\")\n\ndef search_text(query):\n # Generate text embedding\n query_vec = text_encoder.encode(query).astype(\"float32\")\n \n # Search in the FAISS text index, retrieve k most common\n distances, indices = text_index.search(query_vec.reshape(1, -1), k=3)\n # Format results in a structured way\n results = [\n {\"content\": text_metadata[idx], \"distance\": float(dist), \"relevance_score\": 1.0 / (1.0 + dist)}\n for idx, dist in zip(indices[0], distances[0])\n ]\n return results\n\ndef search_image(image_file):\n # Generate image embedding\n image = clip_preprocess(Image.open(image_file)).unsqueeze(0)\n with torch.no_grad():\n query_vec = clip_model.encode_image(image).squeeze().numpy().astype(\"float32\")\n \n # Search in the FAISS image index, retrieve k most common\n distances, indices = image_index.search(query_vec.reshape(1, -1), k=3)\n # Format results in a structured way\n results = [\n {\"content\": image_metadata[idx], \"distance\": float(dist), \"relevance_score\": 1.0 / (1.0 + dist)}\n for idx, dist in zip(indices[0], distances[0])\n ]\n return results","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-15T11:16:27.676609Z","iopub.execute_input":"2025-04-15T11:16:27.676910Z","iopub.status.idle":"2025-04-15T11:16:34.355237Z","shell.execute_reply.started":"2025-04-15T11:16:27.676891Z","shell.execute_reply":"2025-04-15T11:16:34.354544Z"}},"outputs":[],"execution_count":31},{"cell_type":"code","source":"# Example usage text\ntext_query_results = search_text(\"Find interesting recipes\")\nprint(\"Text search results:\", text_query_results)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-15T11:15:49.159280Z","iopub.execute_input":"2025-04-15T11:15:49.159618Z","iopub.status.idle":"2025-04-15T11:15:49.208648Z","shell.execute_reply.started":"2025-04-15T11:15:49.159590Z","shell.execute_reply":"2025-04-15T11:15:49.207772Z"},"collapsed":true,"jupyter":{"outputs_hidden":true}},"outputs":[{"output_type":"display_data","data":{"text/plain":"Batches: 0%| | 0/1 [00:00<?, ?it/s]","application/vnd.jupyter.widget-view+json":{"version_major":2,"version_minor":0,"model_id":"e2bf8334283649df92b7290e89ad02a4"}},"metadata":{}},{"name":"stdout","text":"Text search results: [{'content': {'type': 'pdf', 'content': \"117\\nIndex\\nA\\nApple\\n Crisp Pizza, 97\\n Honey, 54\\n Pudding, 97\\n Taffy- Salad, 32\\nApplesauce\\n Bread, 12\\n Cake, 69\\n Muffins, 10\\nB\\nBanana\\n Dressing, 33\\n Nut Bread, 12\\n & Peanut Salad, 34\\nBarbecue\\n Beef Meatballs, 43\\n Beef Sandwiches, 50\\n Brisket, 51\\n Ribs, 52\\n Sauce, 51, 52\\n Spareribs, 52\\nBars\\nCaramel, 87\\nCarrot, 86\\nCherry Danish, 91\\nCranberry-Date, 86\\nGerman Chocolate, 88\\nLemon, 90, 91\\nLemon Squares, 90\\nMississippi Mud, 89\\nOatmeal Carmelitas, 87\\nOatmeal Chocolate, 88\\nOh Henry, 89\\nPumpkin, 85, 86\\nSouthwestern, 90\\nBeans\\nBlack- Soup, 21\\nCalico, 26\\n Dilly, 111\\n with Hamburger, 47\\n Three- Casserole, 47\\nBeef\\n Barbecue- Sandwiches,\\n 50\\nBeef, cont.\\n -burger Specials, 46\\n El Dorado, 46\\n Stuffed French Bread,\\n 49\\nBeverages\\nCoffee, Scandinavian\\n Egg, 105\\nIrish Cream, 105\\nPeach Slush, 105\\nTea, Orange Spice, 105\\nBeverages, Snacks, Jam,\\n & Pickles, 103\\nBiscuits\\nCheese Garlic, 9\\nCowpuncher, 8\\nBlueberry\\n Pancakes, 8\\n Muffins, 10\\nBran Muffins, Six-Wk, 12\\nBread Sticks, 8\\nBreads, 3\\nApplesauce, 12\\nBanana Nut, 12\\nCranberry, 13\\nGarlic Bubble, 8\\nOatmeal, 5\\nWhite, 7\\nWhole Wheat, 5, 6\\nBreakfast Casserole, 41\\nBrisket, Barbecued, 51\\nBroccoli\\n Delight Salad, 35\\n -Ham Scallope, 55\\nBrownies\\nCaramel, 88\\nChocolate Crunch, 89\\nBuns, 7\\nOatmeal, 5\\nOvernight, 6\\nButterscotch Frosting, 68\\nC\\nCakes\\n18-Minute, 72\\nApplesauce, 69\\nCakes, cont.\\nBoiled, 67\\nCarrot, 67\\nGerman Chocolate, 71,\\n 72\\nMarble Swirl Pound,\\n 71\\nMinnie's Boiled Spice,\\n 67\\nOatmeal, 68\\nOld Fashioned Hot\\n Fudge, 70\\nPrune, 69\\nPumpkin Roll, 70\\nRhubarb, 70\\nSpice, 68\\nCake & Frostings, 65\\nCandies\\nGlass, 108\\nPeanut Brittle, 107,\\n108\\nToffee, English, 108\\nCaramel\\n Bars, 87\\n Brownies, 88\\n Corn, 109\\n Rolls, 7\\n Sauce, 87\\nCarrot\\n Bars, 86\\n Cake, 67\\n Casserole, 26\\n Salad, 36\\nCheese\\nDip, 107\\n Garlic Biscuits, 9\\nHearty Dip, 106\\nHerbed, 106\\nMexican Dip, 106\\n Soups, see under S\\nCheesecake, Mocha, 98\\nCherry\\n Danish Bars, 91\\n Salad, 33\\nChicken\", 'page': 117, 'source': '/kaggle/input/recipes/Nelson Family Recipe Book.pdf'}, 'distance': 1.1434564590454102, 'relevance_score': 0.46653618541211267}, {'content': {'type': 'pdf', 'content': \"82\\nMatt's recipe above, and those to follow in this section are from last year's 4-H fair, where he\\nreceived a perfect Blue Ribbon score for his cookies and for his display of a Norwegian table\\nsetting for a holiday meal. He even did a menu up in Norwegian and learned a few phrases for\\nhis interview with the cooking judges. His Grampa Stanley would have been proud, I know his\\nDad and Mom were.\\nKringla\\nOlive Jacobson--recipe from her mom, Gladys Nelson\\n1 cup sugar\\n1 cup cream\\n1 Β½ cups buttermilk\\n1 teaspoon baking powder\\ndash salt\\n1 teaspoon soda\\n1 teaspoon anise seed\\n5 cups flour\\nMix all ingredients well. Take a small portion of dough and roll into a finger size. Form into a\\npretzel shape and bake on cookie sheet. Can be served warm with butter. This recipe is from\\nMom, Gladys Nelson. She didn't have an oven temp. I would guess about 350ΒΊ. She would\\nsay bake until done.\\nFattigmand\\nMatt Stanley\\n12 egg yolks\\n4 egg whites\\n12 tablespoons sweet cream\\n12 tablespoons sugar\\nΒ½ cup butter, melted\\n1 teaspoon ground cardamom\\nΒ½ teaspoon salt\\nΒ½ jigger of brandy\\nFlour to make stiff dough\\nPowdered sugar\\nBeat the egg yolks, add whites and then sugar; beat well. Add the cream, cardamom, and salt.\\nAdd melted butter. Add enough flour to make dough stiff enough to handle. Chill overnight\\n(makes dough easier to work with). Roll out VERY THIN. Cut into diamond shaped pieces;\\ncut a small slit in center lengthwise. Pull one end through the hole. Fry in deep fat until very\\nlight brown. Dust with powdered sugar. I cut the recipe in half.\\nSandbakelser\\nJoyce Mueller\\n1 teaspoon vanilla\\n1 teaspoon almond extract\\nΒΎ cup soft butter (do not use margarine)\\nΒΎ cup sugar\\n1 small egg white, unbeaten\\n1 ΒΎ cups flour\\nMix vanilla, almond, butter, sugar and egg whites well. Stir in flour. Chill dough until stiff.\\nPress into tins in a thin layer. Bake on a cookie sheet at 350ΒΊ for 12-15 minutes. Do not\\nlet them get brown. Allow to cool in tins for a minute, then tap out onto a towel to cool\\ncompletely. Eat any you break immediately. Everyone helps make these cookies for\\nChristmas at our house.\", 'page': 82, 'source': '/kaggle/input/recipes/Nelson Family Recipe Book.pdf'}, 'distance': 1.143975019454956, 'relevance_score': 0.46642334492041854}, {'content': {'type': 'pdf', 'content': \"118\\n-Noodle Casserole, 59\\nand Rice, 58\\nChicken, cont.\\nBundles, 60\\nCurry, 56\\nDivan, 57\\nHerb, 56\\nHerbed Breasts, 57\\nHoney & Orange\\n Glazed, 58\\nNo-Peek Skillet, 59\\nParmesan, 60\\nPoulet SautΓ© a la\\n Bordelaise, 58\\nTeriyaki, 59\\nChili, 47\\nChili-Rice Dinner, 49\\nClam Bisque, 20\\nCoconut-Pecan Frosting,\\n 72\\nCoffee\\n Scandinavian Egg,\\n 105\\n -Toffee Pie, 100\\nCookies\\nButter, 78\\nChocolate Chip, Soft,\\n 85\\nCinnamon Crispies, 84\\nCranberry, 82\\nDate Roll, Edna's, 82\\nFattigmand, 79\\nFork, 78\\nGinger Creams, 81\\nGinger Snaps, 81\\nGrandma Stanley's\\n Oatmeal, 80\\nKransa, 80\\nKringla, 79\\nKrumkake, 78\\nMonster, 83\\nPeanut, 77\\nPeanut Butter, 77\\nPecan Fingers, 77\\nPistachio White\\n Chocolate Chip, 84\\nPumpkin, 81, 82\\nRanger, 83\\nRosette, 80\\nSandbakelser, 79\\nCookies, cont.\\nSnickerdoodles, 83\\nSwedish Hugs, 80\\nCookies, Bars, & Lefse,\\n 75\\nCorn\\n Fritters, 10\\n Scalloped, 27\\n Spaghetti, 45\\nCranberry\\n Bread, 13\\n Cookies, 82\\n -Date Bars, 86\\n Jello Mold, 31\\n Peach Mold, 31\\n Salad, 31\\nCucumbers, Frozen, 110\\nCupcakes, Chocolate Chip,\\n 73\\nD\\nDesserts\\nApple Crisp Pizza, 97\\nBlueberry, 96\\nFruit Pizza, 98\\nPeach Cobbler, 97\\nRaspberry, 96\\nRhubarb, 95\\nStrawberry, 96\\nDonut Balls, 8\\nDressing\\nBanana, 33\\nFrench, 36\\nThousand Island, 36\\nE\\nEgg Casserole, 42\\nEggs Benedict, 42\\nF\\nFish\\nBaked Stuffed Trout,\\n 61\\nCioppino, 62\\nHalibut with Dilled\\n Mustard Marinade,\\n 61\\nMaui Sunset Grill, 60\\nSmoked, 107\\nFrench Dressing, 36\\nFrosting\\nButterscotch, 68\\nCoconut-Pecan, 72\\nWhite, 69\\nFruit Pizza, 98\\nFudge, Fanny Farmer, 109\\nG\\nGerman Chocolate\\n Bars, 88\\n Cake, 71, 72\\nGinger\\n Creams, 81\\n Snaps, 81\\nH\\nHalibut with Dilled\\n Mustard Marinade, 61\\nHam\\nand Broccoli Scallope,\\n 55\\nand Macaroni Bake, 55\\nBalls, 54\\nPretzel Pleasers, 106\\nHamburger\\n Casserole, 48\\n Steaks, Peppy, 46\\n with Beans, 47\\nHollandaise Sauce, 42\\nHot Dish, 49\\nI\\nIrish Cream, 105\\nJ\\nJam, Rhubarb, 109\\nK\\nKnefla, Knephla, or\\n Knoepfla Soup, 18, 19\\nKransa, 80\\nKringla, 79\\nKrumkake, 78\\nKumla, 56\\nL\\nLamb Kabobs, 53\", 'page': 118, 'source': '/kaggle/input/recipes/Nelson Family Recipe Book.pdf'}, 'distance': 1.17012357711792, 'relevance_score': 0.46080325127293986}]\n","output_type":"stream"}],"execution_count":30},{"cell_type":"code","source":"# Example usage image\nimage_query_results = search_image(\"/kaggle/input/breakfast-search/break_search.jpg\")\nprint(\"Image search results:\", image_query_results)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-15T11:16:34.356579Z","iopub.execute_input":"2025-04-15T11:16:34.356918Z","iopub.status.idle":"2025-04-15T11:16:34.512155Z","shell.execute_reply.started":"2025-04-15T11:16:34.356889Z","shell.execute_reply":"2025-04-15T11:16:34.511146Z"}},"outputs":[{"name":"stdout","text":"Image search results: [{'content': {'type': 'image', 'path': '/kaggle/input/breakfast/English_with_Hash_Browns.jpg'}, 'distance': 37.849029541015625, 'relevance_score': 0.02574066873264441}, {'content': {'type': 'image', 'path': '/kaggle/input/fishchips/FandC.jpg'}, 'distance': 69.11804962158203, 'relevance_score': 0.014261663086706912}, {'content': {'type': 'image', 'path': '/kaggle/input/fishchips/FandC.jpg'}, 'distance': 3.4028234663852886e+38, 'relevance_score': 2.938736052218037e-39}]\n","output_type":"stream"}],"execution_count":32}]}