diff --git a/examples/multimodal/image_understanding_with_rag.ipynb b/examples/multimodal/image_understanding_with_rag.ipynb index 97473732f1..70353ecd82 100644 --- a/examples/multimodal/image_understanding_with_rag.ipynb +++ b/examples/multimodal/image_understanding_with_rag.ipynb @@ -6,7 +6,7 @@ "source": [ "# Image Understanding with RAG using OpenAI's Vision & Responses APIs\n", "\n", - "Welcome! This notebook demonstrates how to build a Retrieval-Augmented Generation (RAG) system using OpenAI’s Vision and Responses APIs. It focuses on multimodal data, combining image and text inputs to analyze customer experiences. The system leverages GPT-4.1 and integrates image understanding with file search to provide context-aware responses.\n", + "Welcome! This notebook demonstrates how to build a Retrieval-Augmented Generation (RAG) system using OpenAI’s Vision and Responses APIs. It focuses on multimodal data, combining image and text inputs to analyze customer experiences. The system leverages GPT-5 and integrates image understanding with file search to provide context-aware responses.\n", "\n", "Multimodal datasets are increasingly common, particularly in domains like healthcare, where records often contain both visual data (e.g. radiology scans) and accompanying text (e.g. clinical notes). Real-world datasets also tend to be noisy, with incomplete or missing information, making it critical to analyze multiple modalities in tandem.\n", "\n", @@ -115,9 +115,17 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Order arrived 10 minutes early, food was hot and packaged securely. Tacos were fresh, well-seasoned, and the salsa tasted homemade. Driver was friendly, followed instructions, and left it at the door. Will definitely order again.\n" + ] + } + ], "source": [ "def generate_food_delivery_review(sentiment: str = 'positive') -> str:\n", " \"\"\"\n", @@ -133,7 +141,8 @@ " prompt += f\" The review should reflect a {sentiment} experience.\"\n", " \n", " response = client.responses.create(\n", - " model=\"gpt-4.1\",\n", + " model=\"gpt-5\",\n", + " reasoning={\"effort\": \"minimal\"},\n", " input=[{\"role\": \"user\", \"content\": prompt}]\n", " )\n", " return response.output_text\n", @@ -174,7 +183,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -188,7 +197,8 @@ " \"\"\"Analyze food delivery image and return sentiment analysis.\"\"\"\n", " base64_image = encode_image(image_path)\n", " response = client.responses.create(\n", - " model=\"gpt-4.1\",\n", + " model=\"gpt-5\",\n", + " reasoning={\"effort\": \"minimal\"},\n", " input=[{\n", " \"role\": \"user\",\n", " \"content\": [\n", @@ -202,8 +212,6 @@ " },\n", " ],\n", " }],\n", - " max_output_tokens=50,\n", - " temperature=0.2\n", " )\n", " return response.output_text.strip()" ] @@ -232,9 +240,122 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
idmonthtextimage_pathlabelfull_sentiment
01juneAbsolutely delicious! The sushi was fresh, beautifully packed, and arrived right on time. Will d...NaNpositiveAbsolutely delicious! The sushi was fresh, beautifully packed, and arrived right on time. Will d...
12julyHalf my order was missing and the burger looked thrown together. Not worth the money.NaNnegativeHalf my order was missing and the burger looked thrown together. Not worth the money.
23julyPackaging was leaking sauce everywhere. Presentation was a mess. Tasted like leftovers.NaNnegativePackaging was leaking sauce everywhere. Presentation was a mess. Tasted like leftovers.
34julyBurger was hot, fries were still crispy, and the milkshake wasn’t melted at all. Fantastic deliv...3.pngpositiveBurger was hot, fries were still crispy, and the milkshake wasn’t melted at all. Fantastic deliv...
45juneReceived the wrong items. I ordered vegetarian and got meat. Totally unacceptable.NaNnegativeReceived the wrong items. I ordered vegetarian and got meat. Totally unacceptable.
\n", + "
" + ], + "text/plain": [ + " id month \\\n", + "0 1 june \n", + "1 2 july \n", + "2 3 july \n", + "3 4 july \n", + "4 5 june \n", + "\n", + " text \\\n", + "0 Absolutely delicious! The sushi was fresh, beautifully packed, and arrived right on time. Will d... \n", + "1 Half my order was missing and the burger looked thrown together. Not worth the money. \n", + "2 Packaging was leaking sauce everywhere. Presentation was a mess. Tasted like leftovers. \n", + "3 Burger was hot, fries were still crispy, and the milkshake wasn’t melted at all. Fantastic deliv... \n", + "4 Received the wrong items. I ordered vegetarian and got meat. Totally unacceptable. \n", + "\n", + " image_path label \\\n", + "0 NaN positive \n", + "1 NaN negative \n", + "2 NaN negative \n", + "3 3.png positive \n", + "4 NaN negative \n", + "\n", + " full_sentiment \n", + "0 Absolutely delicious! The sushi was fresh, beautifully packed, and arrived right on time. Will d... \n", + "1 Half my order was missing and the burger looked thrown together. Not worth the money. \n", + "2 Packaging was leaking sauce everywhere. Presentation was a mess. Tasted like leftovers. \n", + "3 Burger was hot, fries were still crispy, and the milkshake wasn’t melted at all. Fantastic deliv... \n", + "4 Received the wrong items. I ordered vegetarian and got meat. Totally unacceptable. " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "pd.set_option('display.max_colwidth', 100) # Increase from default (50) to view full sentiment\n", "display(df.head())" @@ -287,7 +408,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -339,9 +460,21 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "🔍 Query: Where there any comments about the 'spaghetti'?\n", + "\n", + "📝 Response:\n", + "----------------------------------------\n", + "I couldn’t find any comments that explicitly mention “spaghetti.” The closest related note says “Pasta was overcooked” in context_9_july.txt . If you have a specific date or file in mind, I can check that directly.\n" + ] + } + ], "source": [ "# Query the vector store for spaghetti reviews in July\n", "query = \"Where there any comments about the 'spaghetti'?\"\n", @@ -349,7 +482,7 @@ "\n", "# Execute the search with filtering\n", "response = client.responses.create(\n", - " model=\"gpt-4.1\",\n", + " model=\"gpt-5\",\n", " input=query,\n", " tools=[{\n", " \"type\": \"file_search\",\n", @@ -370,15 +503,27 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "🔍 Query: Where there any comments about the 'spaghetti'?\n", + "\n", + "📝 Response:\n", + "----------------------------------------\n", + "Yes. There’s a positive note describing “a neatly plated spaghetti in tomato sauce with parsley, served alongside arugula, garlic bread, and grated cheese.” \n" + ] + } + ], "source": [ "query = \"Where there any comments about the 'spaghetti'?\"\n", "print(f\"🔍 Query: {query}\\n\")\n", "\n", "response = client.responses.create(\n", - " model=\"gpt-4.1\",\n", + " model=\"gpt-5\",\n", " input=query,\n", " tools=[{\n", " \"type\": \"file_search\",\n", @@ -430,7 +575,7 @@ " \"\"\"\n", " # Get the annotations from the response\n", " try:\n", - " annotations = response.output[1].content[0].annotations\n", + " annotations = response.output[3].content[0].annotations\n", " retrieved_files = {result.filename for result in annotations}\n", " except (AttributeError, IndexError):\n", " print(\"No search results found in the response.\")\n", @@ -461,15 +606,27 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "🔍 Query: Were there any negative reviews for pizza, and if so, was the pizza burnt?\n", + "\n", + "📝 Response:\n", + "----------------------------------------\n", + "Yes. One review explicitly describes a “burnt pepperoni pizza with charred crust and grease stains in the box” and is marked as negative sentiment .\n" + ] + } + ], "source": [ "query = \"Were there any negative reviews for pizza, and if so, was the pizza burnt?\"\n", "print(f\"🔍 Query: {query}\\n\")\n", "\n", "response = client.responses.create(\n", - " model=\"gpt-4.1\",\n", + " model=\"gpt-5\",\n", " input=query,\n", " tools=[{\n", " \"type\": \"file_search\",\n", @@ -520,16 +677,10 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ - "def prepare_evaluation_data(df, text_col=\"full_sentiment\", label_col=\"label\"):\n", - " \"\"\"Prepare data items for evaluation from DataFrame.\"\"\"\n", - " return [{\"item\": {\"input\": str(row[text_col]), \"ground_truth\": row[label_col]}} \n", - " for _, row in df.iterrows()]\n", - "\n", - "\n", "def prepare_evaluation_data(\n", " df: pd.DataFrame,\n", " text_col: str = \"full_sentiment\",\n", @@ -564,7 +715,7 @@ " \"\"\"\n", " eval_config = {\n", " \"type\": \"completions\",\n", - " \"model\": \"gpt-4.1\",\n", + " \"model\": \"gpt-5\",\n", " \"input_messages\": {\n", " \"type\": \"template\",\n", " \"template\": [\n", @@ -656,7 +807,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "metadata": {}, "outputs": [], "source": [ @@ -675,9 +826,20 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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gzfffNP0IrJot/NGjRpJ2rRpzT56QdDgUP39999m4uQMGTKY6nWt/tYA0qIXEu1KrlO06GurQfeZM2ect2sPJG3EqrdrN/N33303TO0cACAs9Fr2zTffmGueZu40kWB56aWXpHXr1m776/dO+vTpTWJA6XeCXuP02qc9KMeNG2cyXSFVUep1Tq+zuuh1Uem1zdqmjfH1GqrXY83SjRkzxnlfPa5eb7XWysqqqRs3bpiZEXRgXh2ORq/XX3/9dZifg8iUKThffPGFuWavXbvWrB88eFAaNGggKVKkMMmUV155Ra5fv+52Xm+//ba5vltlcZ0xQq/5uq7f71oGDb51f8TyDhU6Jox+ULR9XNGiRc02DdL014Q1h5tF3zghTethbQ/cJi+0+2jbv2HDhklcpMGYXjS0h49WZefOnVtOnTplgjv9EGr7RqUZPv3Vt2nTJnOB09G/9UOsBg0aZNZ/+uknc0HUbuX//POP8yKpVeI6FtBvv/1mpmX58MMPTQZx//795vXVi4hebGfPnm2ysrqukzdb2VogronJ9rthkTN5TpleebrcvXo3yLfGxYCYHe5h18WL4b7PikUrJHve7BKQMkDKNygvY4eOlbod6prAqVz9cvJet/fk+PE7kjz5f9e0NWt+lrt370mFCs1EH65fvz6yadMWmT17hWTIkEk++2yw7N69R/LlK2luD82VK//9q+Pc6r779+82P3b79BkqjRu3ll27tsr7778p8eOnk9atO8qUKUulbt0S0q5dV2nXrou5r97v0qX7kj9/GenUqb+kTJlK1q790QRQqVLllVKlypn9NDGnv8mjukxKZ5zT/IvuP3XqKLMsWPCLFC5cTg4fvik1atSStm1fkwEDxsn9+//IRx/1lyZNWsmSJeucZZs790vp2rWPrFjxu5w6tc00FdLv/Lp168p3331ngmZtX69Bpn5f//HHH+F+reFlwZ0GDxr5b968OcYfW6skre7P6sKFC0HmpbMb/ZWkv7h+/vlnU1Xh+gtUf7VpAPb66687g7tz586Z7t36a1HlyZPHub/eVqpUKefEyXp/i/5a1sBdf+VZv0A1q6cB+4YNG0wbS61G19fAakupbSW1XAAQFb7/+ntp0LyB+btizYpyp88d2bNtj5SpVEYq1KggSZMllZ9+WiYvvviK2Wf58oVSr15jSZEipdy5EyBLlnwp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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# Calculate passed and total for text_only_run\n", "text_only_data = text_only_run_output_items.to_dict()['data']\n", @@ -726,9 +888,62 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
 InputModel Output
0[{'content': 'Classify the sentiment of this food delivery review: The food came looking like this... Categorize the request into one of \"positive\", \"negative\" or \"unclear\". Respond with only one of those words.', 'role': 'user'}][{'content': 'negative', 'role': 'assistant'}]
1[{'content': 'Classify the sentiment of this food delivery review: nan. Categorize the request into one of \"positive\", \"negative\" or \"unclear\". Respond with only one of those words.', 'role': 'user'}][{'content': 'unclear', 'role': 'assistant'}]
2[{'content': 'Classify the sentiment of this food delivery review: nan. Categorize the request into one of \"positive\", \"negative\" or \"unclear\". Respond with only one of those words.', 'role': 'user'}][{'content': 'unclear', 'role': 'assistant'}]
3[{'content': 'Classify the sentiment of this food delivery review: nan. Categorize the request into one of \"positive\", \"negative\" or \"unclear\". Respond with only one of those words.', 'role': 'user'}][{'content': 'unclear', 'role': 'assistant'}]
4[{'content': 'Classify the sentiment of this food delivery review: Wow look at this pizza!. Categorize the request into one of \"positive\", \"negative\" or \"unclear\". Respond with only one of those words.', 'role': 'user'}][{'content': 'positive', 'role': 'assistant'}]
\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "failed_samples = [\n", " {\n", @@ -787,7 +1002,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.8" + "version": "3.12.9" } }, "nbformat": 4,