diff --git a/Email Read Allowed.ipynb b/Email Read Allowed.ipynb new file mode 100644 index 0000000..76badc1 --- /dev/null +++ b/Email Read Allowed.ipynb @@ -0,0 +1,235 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 30, + "id": "bee40edd-5f36-49e6-a64f-361674f1e681", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Chat with AI (type 'stop' or 'quit' to exit)\n", + "Note: First response may take longer while model loads\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "\n", + "You: hi\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Assistant: Hello! It's nice to meet you. Is there something I can help you with or would you like to chat for a bit?\n", + "Speech saved to response.mp3\n", + "Speed adjustment failed: [Errno 2] No such file or directory: 'ffprobe'. Using simple playback.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/masih/anaconda3/lib/python3.12/site-packages/pydub/utils.py:198: RuntimeWarning: Couldn't find ffprobe or avprobe - defaulting to ffprobe, but may not work\n", + " warn(\"Couldn't find ffprobe or avprobe - defaulting to ffprobe, but may not work\", RuntimeWarning)\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "\n", + "You: I don't know\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Assistant: We can start with something simple then. Would you like to play a game, have a fun conversation, or just explore some topics together? I'm here to listen and help if you need it. What's been on your mind lately?\n", + "Speech saved to response.mp3\n", + "Speed adjustment failed: [Errno 2] No such file or directory: 'ffprobe'. Using simple playback.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/masih/anaconda3/lib/python3.12/site-packages/pydub/utils.py:198: RuntimeWarning: Couldn't find ffprobe or avprobe - defaulting to ffprobe, but may not work\n", + " warn(\"Couldn't find ffprobe or avprobe - defaulting to ffprobe, but may not work\", RuntimeWarning)\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "\n", + "You: quit\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Conversation ended\n" + ] + } + ], + "source": [ + "from ollama import Client\n", + "from gtts import gTTS\n", + "from playsound import playsound\n", + "import os\n", + "from pydub import AudioSegment\n", + "from pydub.playback import play\n", + "\n", + "# Configure ffmpeg paths - IMPORTANT: Replace with your actual conda path\n", + "ffprobe_path = \"/home/masih/anaconda3/bin/ffprobe\"\n", + "AudioSegment.ffprobe = ffprobe_path\n", + "os.environ[\"PATH\"] += os.pathsep + os.path.dirname(ffprobe_path)\n", + "\n", + "# Initialize Ollama client\n", + "client = Client(host='http://localhost:11434')\n", + "\n", + "system_prompt = (\n", + " \"You are a helpful and polite assistant. \"\n", + " \"Provide clear and concise responses. \"\n", + " \"Avoid repetition and maintain a friendly tone.\"\n", + ")\n", + "\n", + "conversation_history = []\n", + "max_history_length = 5\n", + "\n", + "def generate_response(user_input):\n", + " global conversation_history\n", + " conversation_history.append(f\"User: {user_input}\")\n", + " \n", + " messages = [{'role': 'system', 'content': system_prompt}]\n", + " for interaction in conversation_history[-max_history_length:]:\n", + " try:\n", + " role_part, content = interaction.split(': ', 1)\n", + " messages.append({\n", + " 'role': role_part.lower(),\n", + " 'content': content\n", + " })\n", + " except ValueError:\n", + " continue\n", + " \n", + " try:\n", + " response = client.chat(\n", + " model='llama3.2', # Corrected model name\n", + " messages=messages,\n", + " options={\n", + " 'temperature': 0.7,\n", + " 'top_p': 0.9,\n", + " 'num_predict': 100\n", + " }\n", + " )\n", + " assistant_response = response['message']['content']\n", + " except Exception as e:\n", + " assistant_response = f\"Error: {str(e)}\"\n", + " \n", + " conversation_history.append(f\"Assistant: {assistant_response}\")\n", + " return assistant_response\n", + "\n", + "def text_to_speech(text, output_file=\"response.mp3\", lang='en'):\n", + " try:\n", + " if os.path.exists(output_file):\n", + " os.remove(output_file)\n", + " tts = gTTS(text=text, lang=lang)\n", + " tts.save(output_file)\n", + " print(f\"Speech saved to {output_file}\")\n", + " except Exception as e:\n", + " print(f\"Text-to-speech error: {e}\")\n", + "\n", + "def play_sound_with_speed(file_path, speed=1.2):\n", + " if not os.path.exists(file_path):\n", + " print(\"Audio file not found\")\n", + " return\n", + " \n", + " try:\n", + " # Try speed-adjusted playback\n", + " audio = AudioSegment.from_file(file_path)\n", + " altered_audio = audio._spawn(\n", + " audio.raw_data,\n", + " overrides={\"frame_rate\": int(audio.frame_rate * speed)}\n", + " )\n", + " play(altered_audio)\n", + " print(\"Playing at 1.2x speed\")\n", + " except Exception as e:\n", + " print(f\"Speed adjustment failed: {str(e)}. Using simple playback.\")\n", + " try:\n", + " playsound(file_path)\n", + " except Exception as fallback_e:\n", + " print(f\"All playback methods failed: {str(fallback_e)}\")\n", + "\n", + "print(\"Chat with AI (type 'stop' or 'quit' to exit)\")\n", + "print(\"Note: First response may take longer while model loads\")\n", + "\n", + "while True:\n", + " try:\n", + " user_input = input(\"\\nYou: \")\n", + " if user_input.lower() in ['stop', 'quit']:\n", + " print(\"Conversation ended\")\n", + " break\n", + " \n", + " response = generate_response(user_input)\n", + " print(f\"\\nAssistant: {response}\")\n", + " \n", + " text_to_speech(response)\n", + " play_sound_with_speed(\"response.mp3\")\n", + " \n", + " except KeyboardInterrupt:\n", + " print(\"\\nConversation interrupted\")\n", + " break\n", + " except Exception as e:\n", + " print(f\"Critical error: {str(e)}\")\n", + " break" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d673f565-6002-4b90-8c1b-7df956f536a0", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "afbdf0c0-aa60-46a6-a2a1-044e58f26162", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:base] *", + "language": "python", + "name": "conda-base-py" + }, + "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.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}