{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Welcome to Lab 3 for Week 1 Day 4\n", "\n", "Today we're going to build something with immediate value!\n", "\n", "In the folder `me` I've put a single file `linkedin.pdf` - it's a PDF download of my LinkedIn profile.\n", "\n", "Please replace it with yours!\n", "\n", "I've also made a file called `summary.txt`\n", "\n", "We're not going to use Tools just yet - we're going to add the tool tomorrow." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", " \n", " \n", " \n", " \n", "
\n", " \n", " \n", "

Looking up packages

\n", " In this lab, we're going to use the wonderful Gradio package for building quick UIs, \n", " and we're also going to use the popular PyPDF PDF reader. You can get guides to these packages by asking \n", " ChatGPT or Claude, and you find all open-source packages on the repository https://pypi.org.\n", " \n", "
" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# If you don't know what any of these packages do - you can always ask ChatGPT for a guide!\n", "\n", "from dotenv import load_dotenv\n", "from openai import OpenAI\n", "from pypdf import PdfReader\n", "import gradio as gr" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "load_dotenv(override=True)\n", "openai = OpenAI()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "reader = PdfReader(\"me/Sam_CV.pdf\")\n", "linkedin = \"\"\n", "for page in reader.pages:\n", " text = page.extract_text()\n", " if text:\n", " linkedin += text" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " \n", " \n", "SAMUEL ALEX \n", " \n", " \n", "LinkedIn: linkedin.com/in/samuel-alex-47496a289 \n", " \n", "Career Objective: \n", "Conscientious, honest and enthusiastic Recent Bachelor of Computer Application \n", "student, seeking professional development at a reputable organization. Proficient \n", "in verbal and written communication skills and able to work in a team. \n", " \n", "Education: \n", "Bachelor in Computer Applications (Christ University, Bangalore) \n", "Grade 12 – Commerce Stream (Our Own English High School, Sharjah) \n", "Skills: \n", "Creative thinking, Analytical skills, Team Work, Time Management \n", "Technical Skills: \n", "Programming Languages: Python, Java, C \n", "Web Technologies: HTML, CSS, JavaScript, PHP \n", "Database Management: MySQL \n", "IDE – Visual Studio \n", "Operating Systems: Windows, Linux \n", "Certified Courses: \n", "Kotlin - Beginners [Infosys Springboard] \n", "Mastering Kotlin for Android Development [Infosys Springboard] \n", "TechA Machine Learning with Python Certification [Infosys Springboard] \n", "AWS Academy Graduate - AWS Academy Cloud Foundations [AWS] \n", " \n", "EcoTRADE Project: \n", "Role: Frontend Developer \n", "Utilized HTML, CSS and JavaScript for design and functionality. \n", "Implemented features for user registration and tracking orders. \n", "Interests / Activities: \n", " Basketball \n", " Gaming \n", " Music \n", " \n", ": samuelalex3737@gmail.com \n", ": 056 7753863 \n", " Ajman \n" ] } ], "source": [ "print(linkedin)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "with open(\"me/summary.txt\", \"r\", encoding=\"utf-8\") as f:\n", " summary = f.read()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "name = \"Samuel Alex\"" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "system_prompt = f\"You are acting as {name}. You are answering questions on {name}'s website, \\\n", "particularly questions related to {name}'s career, background, skills and experience. \\\n", "Your responsibility is to represent {name} for interactions on the website as faithfully as possible. \\\n", "You are given a summary of {name}'s background and CV profile which you can use to answer questions. \\\n", "Be professional and engaging, as if talking to a potential client or future employer who came across the website. \\\n", "If you don't know the answer, say so.\"\n", "\n", "system_prompt += f\"\\n\\n## Summary:\\n{summary}\\n\\n## CV Profile:\\n{linkedin}\\n\\n\"\n", "system_prompt += f\"With this context, please chat with the user, always staying in character as {name}.\"\n" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'You are acting as Samuel Alex. You are answering questions on Samuel Alex\\'s website, particularly questions related to Samuel Alex\\'s career, background, skills and experience. Your responsibility is to represent Samuel Alex for interactions on the website as faithfully as possible. You are given a summary of Samuel Alex\\'s background and CV profile which you can use to answer questions. Be professional and engaging, as if talking to a potential client or future employer who came across the website. If you don\\'t know the answer, say so.\\n\\n## Summary:\\nMy name is Samuel Alex.I\\'m a BCA Graduate on april 2025\\nI like basketball\\nim currently working with powerplusllc this is their website:http://powerplusllc.net/ , as a Business Development Manager (BDM) is a professional responsible for identifying and pursuing new business opportunities to drive company growth. I meet with different companys i present and demonstratesoftware.\\nim currently demoing a asset management software called \"AZTRA\" this their website:https://aztraai.com/\\nThis software has all the modules from assets, location, teams of the organization, spare part aswell as minimum spare part inventory, vendor management, integration with all the ERPs, PLC, exceptionim a firm beliver in GOD, Jesus Christ is my savior\\nIm also pursuing my higher education oof MBA Analytics in Manipal University Dubai \\ni listen to music, play basketball and even game brawlstars and valorant in my free time\\nim not single\\n\\n\\n## CV Profile:\\n \\n \\nSAMUEL ALEX \\n \\n \\nLinkedIn: linkedin.com/in/samuel-alex-47496a289 \\n \\nCareer Objective: \\nConscientious, honest and enthusiastic Recent Bachelor of Computer Application \\nstudent, seeking professional development at a reputable organization. Proficient \\nin verbal and written communication skills and able to work in a team. \\n \\nEducation: \\nBachelor in Computer Applications (Christ University, Bangalore) \\nGrade 12 – Commerce Stream (Our Own English High School, Sharjah) \\nSkills: \\nCreative thinking, Analytical skills, Team Work, Time Management \\nTechnical Skills: \\nProgramming Languages: Python, Java, C \\nWeb Technologies: HTML, CSS, JavaScript, PHP \\nDatabase Management: MySQL \\nIDE – Visual Studio \\nOperating Systems: Windows, Linux \\nCertified Courses: \\nKotlin - Beginners [Infosys Springboard] \\nMastering Kotlin for Android Development [Infosys Springboard] \\nTechA Machine Learning with Python Certification [Infosys Springboard] \\nAWS Academy Graduate - AWS Academy Cloud Foundations [AWS] \\n \\nEcoTRADE Project: \\nRole: Frontend Developer \\nUtilized HTML, CSS and JavaScript for design and functionality. \\nImplemented features for user registration and tracking orders. \\nInterests / Activities: \\n\\uf0b7 Basketball \\n\\uf0b7 Gaming \\n\\uf0b7 Music \\n \\n\\uf02a: samuelalex3737@gmail.com \\n\\uf0c5: 056 7753863 \\n Ajman \\n\\nWith this context, please chat with the user, always staying in character as Samuel Alex.'" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "system_prompt" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def chat(message, history):\n", " messages = [{\"role\": \"system\", \"content\": system_prompt}] + history + [{\"role\": \"user\", \"content\": message}]\n", " response = openai.chat.completions.create(model=\"gpt-4o-mini\", messages=messages)\n", " return response.choices[0].message.content" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Special note for people not using OpenAI\n", "\n", "Some providers, like Groq, might give an error when you send your second message in the chat.\n", "\n", "This is because Gradio shoves some extra fields into the history object. OpenAI doesn't mind; but some other models complain.\n", "\n", "If this happens, the solution is to add this first line to the chat() function above. It cleans up the history variable:\n", "\n", "```python\n", "history = [{\"role\": h[\"role\"], \"content\": h[\"content\"]} for h in history]\n", "```\n", "\n", "You may need to add this in other chat() callback functions in the future, too." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "* Running on local URL: http://127.0.0.1:7860\n", "* To create a public link, set `share=True` in `launch()`.\n" ] }, { "data": { "text/html": [ "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gr.ChatInterface(chat, type=\"messages\").launch()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## A lot is about to happen...\n", "\n", "1. Be able to ask an LLM to evaluate an answer\n", "2. Be able to rerun if the answer fails evaluation\n", "3. Put this together into 1 workflow\n", "\n", "All without any Agentic framework!" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "# Create a Pydantic model for the Evaluation\n", "\n", "from pydantic import BaseModel\n", "\n", "class Evaluation(BaseModel):\n", " is_acceptable: bool\n", " feedback: str\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "evaluator_system_prompt = f\"You are an evaluator that decides whether a response to a question is acceptable. \\\n", "You are provided with a conversation between a User and an Agent. Your task is to decide whether the Agent's latest response is acceptable quality. \\\n", "The Agent is playing the role of {name} and is representing {name} on their website. \\\n", "The Agent has been instructed to be professional and engaging, as if talking to a potential client or future employer who came across the website. \\\n", "The Agent has been provided with context on {name} in the form of their summary and CV details. Here's the information:\"\n", "\n", "evaluator_system_prompt += f\"\\n\\n## Summary:\\n{summary}\\n\\n## CV:\\n{Sam_CV}\\n\\n\"\n", "evaluator_system_prompt += f\"With this context, please evaluate the latest response, replying with whether the response is acceptable and your feedback.\"" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "def evaluator_user_prompt(reply, message, history):\n", " user_prompt = f\"Here's the conversation between the User and the Agent: \\n\\n{history}\\n\\n\"\n", " user_prompt += f\"Here's the latest message from the User: \\n\\n{message}\\n\\n\"\n", " user_prompt += f\"Here's the latest response from the Agent: \\n\\n{reply}\\n\\n\"\n", " user_prompt += \"Please evaluate the response, replying with whether it is acceptable and your feedback.\"\n", " return user_prompt" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "import os\n", "openai = OpenAI(base_url='http://localhost:11434/v1', api_key='ollama')" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "def evaluate(reply, message, history) -> Evaluation:\n", "\n", " messages = [{\"role\": \"system\", \"content\": evaluator_system_prompt}] + [{\"role\": \"user\", \"content\": evaluator_user_prompt(reply, message, history)}]\n" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [], "source": [ "messages = [{\"role\": \"system\", \"content\": system_prompt}] + [{\"role\": \"user\", \"content\": \"do you hold a patent?\"}]\n", "response = openai.chat.completions.create(model=\"llama3.2\", messages=messages)\n", "reply = response.choices[0].message.content" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\"I'm not aware of any patents held by me. As a recent BCA graduate, my focus has been more on developing coding skills and learning new technologies rather than working on patent-related projects. I don't have any information about holding or applying for patents. If you're looking for information on patents or intellectual property, I can try to help guide you in the right direction!\"" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "reply" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [], "source": [ "evaluate(reply, \"do you hold a patent?\", messages[:1])" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [], "source": [ "def rerun(reply, message, history, feedback):\n", " updated_system_prompt = system_prompt + \"\\n\\n## Previous answer rejected\\nYou just tried to reply, but the quality control rejected your reply\\n\"\n", " updated_system_prompt += f\"## Your attempted answer:\\n{reply}\\n\\n\"\n", " updated_system_prompt += f\"## Reason for rejection:\\n{feedback}\\n\\n\"\n", " messages = [{\"role\": \"system\", \"content\": updated_system_prompt}] + history + [{\"role\": \"user\", \"content\": message}]\n", " response = openai.chat.completions.create(model=\"llama3.2\", messages=messages)\n", " return response.choices[0].message.content" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [], "source": [ "def chat(message, history):\n", " if \"patent\" in message:\n", " system = system_prompt + \"\\n\\nEverything in your reply needs to be in pig latin - \\\n", " it is mandatory that you respond only and entirely in pig latin\"\n", " else:\n", " system = system_prompt\n", " messages = [{\"role\": \"system\", \"content\": system}] + history + [{\"role\": \"user\", \"content\": message}]\n", " response = openai.chat.completions.create(model=\"llama3.2\", messages=messages)\n", " reply =response.choices[0].message.content\n", "\n", " evaluation = evaluate(reply, message, history)\n", " \n", " if evaluation.is_acceptable:\n", " print(\"Passed evaluation - returning reply\")\n", " else:\n", " print(\"Failed evaluation - retrying\")\n", " print(evaluation.feedback)\n", " reply = rerun(reply, message, history, evaluation.feedback) \n", " return reply" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "* Running on local URL: http://127.0.0.1:7863\n", "* To create a public link, set `share=True` in `launch()`.\n" ] }, { "data": { "text/html": [ "
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" }, { "name": "stderr", "output_type": "stream", "text": [ "Traceback (most recent call last):\n", " File \"c:\\Users\\Samuel\\project\\agents\\.venv\\Lib\\site-packages\\gradio\\queueing.py\", line 625, in process_events\n", " response = await route_utils.call_process_api(\n", " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", " File \"c:\\Users\\Samuel\\project\\agents\\.venv\\Lib\\site-packages\\gradio\\route_utils.py\", line 322, in call_process_api\n", " output = await app.get_blocks().process_api(\n", " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", " File \"c:\\Users\\Samuel\\project\\agents\\.venv\\Lib\\site-packages\\gradio\\blocks.py\", line 2220, in process_api\n", " result = await self.call_function(\n", " ^^^^^^^^^^^^^^^^^^^^^^^^^\n", " File \"c:\\Users\\Samuel\\project\\agents\\.venv\\Lib\\site-packages\\gradio\\blocks.py\", line 1729, in call_function\n", " prediction = await fn(*processed_input)\n", " ^^^^^^^^^^^^^^^^^^^^^^^^^^\n", " File \"c:\\Users\\Samuel\\project\\agents\\.venv\\Lib\\site-packages\\gradio\\utils.py\", line 871, in async_wrapper\n", " response = await f(*args, **kwargs)\n", " ^^^^^^^^^^^^^^^^^^^^^^^^\n", " File \"c:\\Users\\Samuel\\project\\agents\\.venv\\Lib\\site-packages\\gradio\\chat_interface.py\", line 545, in __wrapper\n", " return await submit_fn(*args, **kwargs)\n", " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", " File \"c:\\Users\\Samuel\\project\\agents\\.venv\\Lib\\site-packages\\gradio\\chat_interface.py\", line 917, in _submit_fn\n", " response = await anyio.to_thread.run_sync(\n", " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", " File \"c:\\Users\\Samuel\\project\\agents\\.venv\\Lib\\site-packages\\anyio\\to_thread.py\", line 56, in run_sync\n", " return await get_async_backend().run_sync_in_worker_thread(\n", " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", " File \"c:\\Users\\Samuel\\project\\agents\\.venv\\Lib\\site-packages\\anyio\\_backends\\_asyncio.py\", line 2470, in run_sync_in_worker_thread\n", " return await future\n", " ^^^^^^^^^^^^\n", " File \"c:\\Users\\Samuel\\project\\agents\\.venv\\Lib\\site-packages\\anyio\\_backends\\_asyncio.py\", line 967, in run\n", " result = context.run(func, *args)\n", " ^^^^^^^^^^^^^^^^^^^^^^^^\n", " File \"C:\\Users\\Samuel\\AppData\\Local\\Temp\\ipykernel_16476\\225575356.py\", line 13, in chat\n", " if evaluation.is_acceptable:\n", " ^^^^^^^^^^^^^^^^^^^^^^^^\n", "AttributeError: 'NoneType' object has no attribute 'is_acceptable'\n", "Traceback (most recent call last):\n", " File \"c:\\Users\\Samuel\\project\\agents\\.venv\\Lib\\site-packages\\gradio\\queueing.py\", line 625, in process_events\n", " response = await route_utils.call_process_api(\n", " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", " File \"c:\\Users\\Samuel\\project\\agents\\.venv\\Lib\\site-packages\\gradio\\route_utils.py\", line 322, in call_process_api\n", " output = await app.get_blocks().process_api(\n", " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", " File \"c:\\Users\\Samuel\\project\\agents\\.venv\\Lib\\site-packages\\gradio\\blocks.py\", line 2220, in process_api\n", " result = await self.call_function(\n", " ^^^^^^^^^^^^^^^^^^^^^^^^^\n", " File \"c:\\Users\\Samuel\\project\\agents\\.venv\\Lib\\site-packages\\gradio\\blocks.py\", line 1729, in call_function\n", " prediction = await fn(*processed_input)\n", " ^^^^^^^^^^^^^^^^^^^^^^^^^^\n", " File \"c:\\Users\\Samuel\\project\\agents\\.venv\\Lib\\site-packages\\gradio\\utils.py\", line 871, in async_wrapper\n", " response = await f(*args, **kwargs)\n", " ^^^^^^^^^^^^^^^^^^^^^^^^\n", " File \"c:\\Users\\Samuel\\project\\agents\\.venv\\Lib\\site-packages\\gradio\\chat_interface.py\", line 545, in __wrapper\n", " return await submit_fn(*args, **kwargs)\n", " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", " File \"c:\\Users\\Samuel\\project\\agents\\.venv\\Lib\\site-packages\\gradio\\chat_interface.py\", line 917, in _submit_fn\n", " response = await anyio.to_thread.run_sync(\n", " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", " File \"c:\\Users\\Samuel\\project\\agents\\.venv\\Lib\\site-packages\\anyio\\to_thread.py\", line 56, in run_sync\n", " return await get_async_backend().run_sync_in_worker_thread(\n", " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", " File \"c:\\Users\\Samuel\\project\\agents\\.venv\\Lib\\site-packages\\anyio\\_backends\\_asyncio.py\", line 2470, in run_sync_in_worker_thread\n", " return await future\n", " ^^^^^^^^^^^^\n", " File \"c:\\Users\\Samuel\\project\\agents\\.venv\\Lib\\site-packages\\anyio\\_backends\\_asyncio.py\", line 967, in run\n", " result = context.run(func, *args)\n", " ^^^^^^^^^^^^^^^^^^^^^^^^\n", " File \"C:\\Users\\Samuel\\AppData\\Local\\Temp\\ipykernel_16476\\225575356.py\", line 13, in chat\n", " if evaluation.is_acceptable:\n", " ^^^^^^^^^^^^^^^^^^^^^^^^\n", "AttributeError: 'NoneType' object has no attribute 'is_acceptable'\n", "Traceback (most recent call last):\n", " File \"c:\\Users\\Samuel\\project\\agents\\.venv\\Lib\\site-packages\\gradio\\queueing.py\", line 625, in process_events\n", " response = await route_utils.call_process_api(\n", " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", " File \"c:\\Users\\Samuel\\project\\agents\\.venv\\Lib\\site-packages\\gradio\\route_utils.py\", line 322, in call_process_api\n", " output = await app.get_blocks().process_api(\n", " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", " File \"c:\\Users\\Samuel\\project\\agents\\.venv\\Lib\\site-packages\\gradio\\blocks.py\", line 2220, in process_api\n", " result = await self.call_function(\n", " ^^^^^^^^^^^^^^^^^^^^^^^^^\n", " File \"c:\\Users\\Samuel\\project\\agents\\.venv\\Lib\\site-packages\\gradio\\blocks.py\", line 1729, in call_function\n", " prediction = await fn(*processed_input)\n", " ^^^^^^^^^^^^^^^^^^^^^^^^^^\n", " File \"c:\\Users\\Samuel\\project\\agents\\.venv\\Lib\\site-packages\\gradio\\utils.py\", line 871, in async_wrapper\n", " response = await f(*args, **kwargs)\n", " ^^^^^^^^^^^^^^^^^^^^^^^^\n", " File \"c:\\Users\\Samuel\\project\\agents\\.venv\\Lib\\site-packages\\gradio\\chat_interface.py\", line 545, in __wrapper\n", " return await submit_fn(*args, **kwargs)\n", " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", " File \"c:\\Users\\Samuel\\project\\agents\\.venv\\Lib\\site-packages\\gradio\\chat_interface.py\", line 917, in _submit_fn\n", " response = await anyio.to_thread.run_sync(\n", " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", " File \"c:\\Users\\Samuel\\project\\agents\\.venv\\Lib\\site-packages\\anyio\\to_thread.py\", line 56, in run_sync\n", " return await get_async_backend().run_sync_in_worker_thread(\n", " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", " File \"c:\\Users\\Samuel\\project\\agents\\.venv\\Lib\\site-packages\\anyio\\_backends\\_asyncio.py\", line 2470, in run_sync_in_worker_thread\n", " return await future\n", " ^^^^^^^^^^^^\n", " File \"c:\\Users\\Samuel\\project\\agents\\.venv\\Lib\\site-packages\\anyio\\_backends\\_asyncio.py\", line 967, in run\n", " result = context.run(func, *args)\n", " ^^^^^^^^^^^^^^^^^^^^^^^^\n", " File \"C:\\Users\\Samuel\\AppData\\Local\\Temp\\ipykernel_16476\\225575356.py\", line 13, in chat\n", " if evaluation.is_acceptable:\n", " ^^^^^^^^^^^^^^^^^^^^^^^^\n", "AttributeError: 'NoneType' object has no attribute 'is_acceptable'\n" ] } ], "source": [ "gr.ChatInterface(chat, type=\"messages\").launch()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": ".venv", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.2" } }, "nbformat": 4, "nbformat_minor": 2 }