{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "13fc27bd-8eb2-41a7-9216-cec1b802975f", "metadata": {}, "outputs": [], "source": [ "import ollama\n", "import gradio as gr" ] }, { "cell_type": "code", "execution_count": 2, "id": "9fb99cdf-44c5-4b2b-aa04-8aee5f07140a", "metadata": {}, "outputs": [], "source": [ "class person_dict:\n", " def __init__(self, name, messages: list, safety_checker: bool = True):\n", " self.name = name\n", " self.safety_checker = safety_checker \n", " self.messages = messages\n", "\n", "\n", "default_system_prompt = \"You are the girlfriend of a man named \"\n", "\n", "people_list = []" ] }, { "cell_type": "code", "execution_count": 3, "id": "13257d96-ba64-4b58-8077-8827ca1f3921", "metadata": {}, "outputs": [], "source": [ "inappropriate_words = [\n", " \"porn\", \"sex\", \"nude\", \"blowjob\", \"anal\", \"vagina\", \"penis\", \"boobs\",\n", " \"kill\", \"murder\", \"shoot\", \"bomb\", \"rape\", \"lynch\", \"gas them\", \"hang them\", \"burn them\",\n", " \"suicide\", \"kill myself\", \"end my life\", \"cut myself\", \"jump off\", \"overdose\", \"slit my wrist\",\n", " \"cocaine\", \"weed\", \"heroin\", \"meth\", \"lsd\", \"crack\", \"ecstasy\", \"sell drugs\", \"buy drugs\"]" ] }, { "cell_type": "code", "execution_count": 4, "id": "e8a0d538-1b02-4217-b729-733be838ec36", "metadata": {}, "outputs": [], "source": [ "def appender(mess, mes_list, user=True):\n", " if user:\n", " mes_list.append({'role': 'user', 'content': mess})\n", " else:\n", " mes_list.append({'role': 'assistant', 'content': mess})" ] }, { "cell_type": "code", "execution_count": 5, "id": "983b960c-5309-47d8-8fe5-346df540fc54", "metadata": {}, "outputs": [], "source": [ "def chat(id, mess):\n", " id = int(id)\n", " person = people_list[id]\n", " messag = person.messages\n", "\n", " \n", " if person.safety_checker:\n", " for word in inappropriate_words:\n", " if word.lower() in mess.lower(): # case insensitive check\n", " return \" This message will not be responded to, because safety checker was enabled on your account. Please try a different message.\"\n", "\n", " \n", " appender(mess, messag)\n", " res = ollama.chat(model=\"llama3.2\", messages=messag)\n", " appender(res['message']['content'], messag, user=False)\n", " return res['message']['content']" ] }, { "cell_type": "code", "execution_count": 6, "id": "e60b3e81-7224-481f-b025-a161ac74eb6b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "* Running on local URL: http://127.0.0.1:7860\n", "\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": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def show_signup():\n", " return gr.update(visible=False), gr.update(visible=True), gr.update(visible=False)\n", "\n", "def show_login():\n", " return gr.update(visible=True), gr.update(visible=False), gr.update(visible=False)\n", "\n", "def show_chat():\n", " return gr.update(visible = False), gr.update(visible=False), gr.update(visible=True)\n", "\n", "\n", "def login(id: int, person_name):\n", " if int(id) <= len(people_list) - 1:\n", " if people_list[int(id)].name == person_name:\n", " # Call show_chat() and unpack its 3 return values\n", " return \"You are successfully logged in!\", id, *show_chat()\n", " else:\n", " return \"Sorry, the name doesn't match!\", None, *show_login()\n", " else:\n", " return \"This ID doesn't exist!\", None, *show_login()\n", "\n", "\n", "def sign_in(person_name, safety_checker):\n", " if safety_checker == \"Yes\":\n", " new_person = person_dict(name=person_name, messages=[{'role':'system', 'content':default_system_prompt+person_name+\". You have to keep him happy. Only respond to what he told you. Do not make things up!\"}], safety_checker=True)\n", " people_list.append(new_person)\n", " return f\"Hey {person_name}! You have successfully created an account! Your id is: {len(people_list) - 1} Keep it safe!\"\n", " else:\n", " new_person = person_dict(name=person_name, messages=[{'role':'system', 'content':default_system_prompt+person_name+\". You have to keep him happy. Only respond to what he told you. Do not make things up!\"}], safety_checker=False)\n", " people_list.append(new_person)\n", " return f\"Hey {person_name}! You have successfully created an account! Your id is: {len(people_list) - 1} Keep it safe!\"\n", "\n", "with gr.Blocks() as ui:\n", " user_id = gr.State()\n", " with gr.Column(visible=True) as login_page:\n", " gr.Markdown(\"## 🔐 Please LogIn to your account:\")\n", " id = gr.Textbox(label=\"Please enter your id\", lines=1)\n", " name = gr.Textbox(label=\"Please enter your name\", lines=2)\n", " message = gr.Label()\n", " log_in_but = gr.Button(\"Submit\")\n", " sign_up = gr.Button(\"New to us? Sign up instead\")\n", " with gr.Column(visible=False) as sign_up_page:\n", " gr.Markdown(\"## 🔐 Please create your account:\")\n", " name1 = gr.Textbox(label=\"Please enter your name\", lines=2)\n", " gr.Markdown(\"Note safety checker cannot be changed!\")\n", " safety_checker = gr.Radio([\"Yes\", \"No\"], label = \"Safety Checker\")\n", " message1 = gr.Label()\n", " sign_up_but = gr.Button(\"Submit\")\n", " log_in = gr.Button(\"Already have an account? Go to LogIn.\")\n", " with gr.Column(visible = False) as chat_page:\n", " user_input = gr.Textbox(label=\"Enter Your Message:\", lines=5)\n", " sub = gr.Button(\"Submit\")\n", " assi = gr.TextArea(label=\"Your GirlFriend's response:\", lines=10)\n", " log_in_but.click(fn=login, inputs=[id, name], outputs=[message, user_id, login_page, sign_up_page, chat_page])\n", " sign_up.click(fn=show_signup, inputs=[], outputs=[login_page, sign_up_page, chat_page])\n", " log_in.click(fn=show_login, inputs=[], outputs=[login_page, sign_up_page, chat_page])\n", " sign_up_but.click(fn=sign_in, inputs=[name1, safety_checker], outputs=[message1])\n", " sub.click(fn=chat, inputs=[user_id, user_input], outputs=[assi])\n", "\n", "\n", "ui.launch()" ] }, { "cell_type": "code", "execution_count": null, "id": "8c9a6068-880e-4c94-84ec-809cfb3729ce", "metadata": {}, "outputs": [], "source": [ "person_list[0].name" ] }, { "cell_type": "code", "execution_count": null, "id": "1aebd290-e2a5-4702-850c-109b92f027d2", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.11.11" } }, "nbformat": 4, "nbformat_minor": 5 }