From d9b856285e255c62ece304accbf865573e714792 Mon Sep 17 00:00:00 2001 From: Gopinath G <34595359+gopinath1998@users.noreply.github.com> Date: Wed, 18 Dec 2024 10:52:38 +0530 Subject: [PATCH 01/29] Add files via upload week-1 day-2 exercise --- .../day2 EXERCISE.ipynb | 522 ++++++++++++++++++ 1 file changed, 522 insertions(+) create mode 100644 week1/community-contributions/day2 EXERCISE.ipynb diff --git a/week1/community-contributions/day2 EXERCISE.ipynb b/week1/community-contributions/day2 EXERCISE.ipynb new file mode 100644 index 0000000..f7a9c1b --- /dev/null +++ b/week1/community-contributions/day2 EXERCISE.ipynb @@ -0,0 +1,522 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "d15d8294-3328-4e07-ad16-8a03e9bbfdb9", + "metadata": {}, + "source": [ + "# Welcome to your first assignment!\n", + "\n", + "Instructions are below. Please give this a try, and look in the solutions folder if you get stuck (or feel free to ask me!)" + ] + }, + { + "cell_type": "markdown", + "id": "ada885d9-4d42-4d9b-97f0-74fbbbfe93a9", + "metadata": {}, + "source": [ + "\n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \n", + "

Just before we get to the assignment --

\n", + " I thought I'd take a second to point you at this page of useful resources for the course. This includes links to all the slides.
\n", + " https://edwarddonner.com/2024/11/13/llm-engineering-resources/
\n", + " Please keep this bookmarked, and I'll continue to add more useful links there over time.\n", + "
\n", + "
" + ] + }, + { + "cell_type": "markdown", + "id": "6e9fa1fc-eac5-4d1d-9be4-541b3f2b3458", + "metadata": {}, + "source": [ + "# HOMEWORK EXERCISE ASSIGNMENT\n", + "\n", + "Upgrade the day 1 project to summarize a webpage to use an Open Source model running locally via Ollama rather than OpenAI\n", + "\n", + "You'll be able to use this technique for all subsequent projects if you'd prefer not to use paid APIs.\n", + "\n", + "**Benefits:**\n", + "1. No API charges - open-source\n", + "2. Data doesn't leave your box\n", + "\n", + "**Disadvantages:**\n", + "1. Significantly less power than Frontier Model\n", + "\n", + "## Recap on installation of Ollama\n", + "\n", + "Simply visit [ollama.com](https://ollama.com) and install!\n", + "\n", + "Once complete, the ollama server should already be running locally. \n", + "If you visit: \n", + "[http://localhost:11434/](http://localhost:11434/)\n", + "\n", + "You should see the message `Ollama is running`. \n", + "\n", + "If not, bring up a new Terminal (Mac) or Powershell (Windows) and enter `ollama serve` \n", + "And in another Terminal (Mac) or Powershell (Windows), enter `ollama pull llama3.2` \n", + "Then try [http://localhost:11434/](http://localhost:11434/) again.\n", + "\n", + "If Ollama is slow on your machine, try using `llama3.2:1b` as an alternative. Run `ollama pull llama3.2:1b` from a Terminal or Powershell, and change the code below from `MODEL = \"llama3.2\"` to `MODEL = \"llama3.2:1b\"`" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "4e2a9393-7767-488e-a8bf-27c12dca35bd", + "metadata": {}, + "outputs": [], + "source": [ + "# imports\n", + "\n", + "import requests\n", + "from bs4 import BeautifulSoup\n", + "from IPython.display import Markdown, display" + ] + }, + { + "cell_type": "raw", + "id": "07e106bd-10c5-4365-b85b-397b5f059656", + "metadata": {}, + "source": [ + "# Constants\n", + "\n", + "OLLAMA_API = \"http://localhost:11434/api/chat\"\n", + "HEADERS = {\"Content-Type\": \"application/json\"}\n", + "MODEL = \"llama3.2\"" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "dac0a679-599c-441f-9bf2-ddc73d35b940", + "metadata": {}, + "outputs": [], + "source": [ + "# Create a messages list using the same format that we used for OpenAI\n", + "\n", + "messages = [\n", + " {\"role\": \"user\", \"content\": \"Describe some of the business applications of Generative AI\"}\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "7bb9c624-14f0-4945-a719-8ddb64f66f47", + "metadata": {}, + "outputs": [], + "source": [ + "payload = {\n", + " \"model\": MODEL,\n", + " \"messages\": messages,\n", + " \"stream\": False\n", + " }" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "42b9f644-522d-4e05-a691-56e7658c0ea9", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generative AI (Artificial Intelligence) has numerous business applications across various industries. Here are some examples:\n", + "\n", + "1. **Content Generation**: Generative AI can create high-quality content such as articles, social media posts, product descriptions, and more. This can help businesses save time and resources on content creation.\n", + "2. **Product Design**: Generative AI can be used to design new products, such as fashion items, jewelry, or electronics. It can also generate 3D models and prototypes, reducing the need for manual design and prototyping.\n", + "3. **Image and Video Generation**: Generative AI can create realistic images and videos that can be used in marketing campaigns, advertising, and social media. This can help businesses create engaging visual content without requiring extensive photography or videography skills.\n", + "4. **Chatbots and Virtual Assistants**: Generative AI can power chatbots and virtual assistants that provide customer support, answer frequently asked questions, and even engage in basic conversations.\n", + "5. **Predictive Maintenance**: Generative AI can analyze sensor data from machines and predict when maintenance is needed, reducing downtime and increasing efficiency.\n", + "6. **Personalized Recommendations**: Generative AI can analyze customer behavior and preferences to generate personalized product recommendations, improving the overall shopping experience.\n", + "7. **Customer Segmentation**: Generative AI can help businesses segment their customers based on their behavior, demographics, and preferences, enabling targeted marketing campaigns.\n", + "8. **Automated Writing Assistance**: Generative AI can assist writers with ideas, suggestions, and even full-text writing, helping to boost productivity and creativity.\n", + "9. **Data Analysis and Visualization**: Generative AI can analyze large datasets and generate insights, visualizations, and predictions that can inform business decisions.\n", + "10. **Creative Collaboration**: Generative AI can collaborate with human creatives, such as artists, designers, and writers, to generate new ideas, concepts, and content.\n", + "\n", + "Some specific industries where Generative AI is being applied include:\n", + "\n", + "1. **Marketing and Advertising**: generating personalized ads, content, and messaging.\n", + "2. **Finance and Banking**: automating financial analysis, risk assessment, and customer service.\n", + "3. **Healthcare**: generating medical images, analyzing patient data, and predicting disease outcomes.\n", + "4. **Manufacturing and Supply Chain**: optimizing production workflows, predicting demand, and identifying potential bottlenecks.\n", + "5. **Education**: creating personalized learning experiences, grading assignments, and developing educational content.\n", + "\n", + "These are just a few examples of the many business applications of Generative AI. As the technology continues to evolve, we can expect to see even more innovative uses across various industries.\n" + ] + } + ], + "source": [ + "response = requests.post(OLLAMA_API, json=payload, headers=HEADERS)\n", + "print(response.json()['message']['content'])" + ] + }, + { + "cell_type": "markdown", + "id": "6a021f13-d6a1-4b96-8e18-4eae49d876fe", + "metadata": {}, + "source": [ + "# Introducing the ollama package\n", + "\n", + "And now we'll do the same thing, but using the elegant ollama python package instead of a direct HTTP call.\n", + "\n", + "Under the hood, it's making the same call as above to the ollama server running at localhost:11434" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "7745b9c4-57dc-4867-9180-61fa5db55eb8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generative AI has numerous business applications across various industries. Here are some examples:\n", + "\n", + "1. **Content Generation**: Generative AI can be used to generate high-quality content such as articles, social media posts, product descriptions, and more. This can save time and resources for businesses that need to produce a large volume of content.\n", + "2. **Product Design**: Generative AI can be used to design new products, such as furniture, electronics, and other consumer goods. It can also help optimize product designs by generating multiple versions and selecting the most suitable one based on various criteria.\n", + "3. **Marketing Automation**: Generative AI can be used to create personalized marketing campaigns, such as email marketing automation, social media ads, and more. This can help businesses tailor their marketing efforts to specific customer segments and improve engagement rates.\n", + "4. **Image and Video Editing**: Generative AI can be used to edit images and videos, such as removing background noise, correcting color casts, and enhancing video quality. This can save time and resources for businesses that need to create high-quality visual content.\n", + "5. **Chatbots and Virtual Assistants**: Generative AI can be used to create chatbots and virtual assistants that can understand natural language and respond accordingly. This can help businesses provide better customer service and improve user experience.\n", + "6. **Predictive Analytics**: Generative AI can be used to analyze large datasets and generate predictive models that can forecast future trends and behaviors. This can help businesses make data-driven decisions and stay ahead of the competition.\n", + "7. **Customer Segmentation**: Generative AI can be used to segment customers based on their behavior, demographics, and preferences. This can help businesses tailor their marketing efforts and improve customer engagement.\n", + "8. **Language Translation**: Generative AI can be used to translate languages in real-time, which can help businesses communicate with international clients and customers more effectively.\n", + "9. **Music Composition**: Generative AI can be used to compose music for various applications such as advertising, film scoring, and video game soundtracks.\n", + "10. **Financial Modeling**: Generative AI can be used to create financial models that can predict future revenue streams, costs, and other financial metrics. This can help businesses make more accurate predictions and inform better investment decisions.\n", + "\n", + "Some of the industries that are already leveraging generative AI include:\n", + "\n", + "* E-commerce\n", + "* Healthcare\n", + "* Finance\n", + "* Marketing\n", + "* Education\n", + "* Entertainment\n", + "* Manufacturing\n", + "\n", + "These applications have the potential to transform various business processes, improve customer experiences, and drive innovation in various sectors.\n" + ] + } + ], + "source": [ + "import ollama\n", + "\n", + "response = ollama.chat(model=MODEL, messages=messages)\n", + "print(response['message']['content'])" + ] + }, + { + "cell_type": "markdown", + "id": "a4704e10-f5fb-4c15-a935-f046c06fb13d", + "metadata": {}, + "source": [ + "## Alternative approach - using OpenAI python library to connect to Ollama" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "23057e00-b6fc-4678-93a9-6b31cb704bff", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generative AI has numerous business applications across various industries, transforming the way companies operate, create products, and interact with customers. Some key applications include:\n", + "\n", + "1. **Content Generation**: Automate content creation for marketing materials, such as blog posts, product descriptions, social media posts, and more, using Generative AI-powered tools.\n", + "2. **Product Design and Prototyping**: Use Generative AI to design new products, furniture, or other innovative solutions, reducing design time and costs while increasing creativity.\n", + "3. **Customer Experience (CX) Tools**: Leverage Generative AI to create personalized customer experiences, such as chatbots that can respond to customer queries and provide tailored recommendations.\n", + "4. **Predictive Maintenance**: Use Generative AI to analyze sensor data, identify potential issues, and predict maintenance needs for equipment, reducing downtime and increasing overall efficiency.\n", + "5. **Personalized Marketing**: Use Generative AI to create targeted marketing campaigns based on individual customer preferences, behaviors, and demographics.\n", + "6. **Content Optimization**: Utilize Generative AI to optimize content for better performance in search engine results pages (SERPs), ensuring improved visibility and traffic.\n", + "7. **Brand Storytelling**: Automate the creation of brand stories, taglines, and overall brand narrative using Generative AI-powered tools.\n", + "8. **Financial Modeling and Forecasting**: Use Generative AI to create financial models, forecasts, and predictions for businesses, helping them make data-driven decisions.\n", + "9. **Supply Chain Optimization**: Leverage Generative AI to optimize supply chain operations, predicting demand, reducing inventory levels, and streamlining logistics.\n", + "10. **Automated Transcription and Translation**: Use Generative AI to automate the transcription of audio and video files into written text, as well as translate materials across languages.\n", + "11. **Digital Asset Management**: Utilize Generative AI to manage digital assets, such as images, videos, and documents, and automatically generate metadata for easy search and retrieval.\n", + "12. **Chatbots and Virtual Assistants**: Create more advanced chatbots using Generative AI that can understand context, emotions, and intent, providing better customer service experiences.\n", + "\n", + "In healthcare, Generative AI is being applied to:\n", + "\n", + "1. Medical Imaging Analysis\n", + "2. Personalized Medicine\n", + "3. Patient Data Analysis\n", + "\n", + "In education, Generative AI is used in:\n", + "\n", + "1. Adaptive Learning Systems\n", + "2. Automated Grading and Feedback\n", + "\n", + "Generative AI has numerous applications across various industries, from creative content generation to predictive maintenance and supply chain optimization.\n", + "\n", + "Keep in mind that these are just a few examples of the many business applications of Generative AI as this technology continues to evolve at a rapid pace.\n" + ] + } + ], + "source": [ + "# There's actually an alternative approach that some people might prefer\n", + "# You can use the OpenAI client python library to call Ollama:\n", + "\n", + "from openai import OpenAI\n", + "ollama_via_openai = OpenAI(base_url='http://localhost:11434/v1', api_key='ollama')\n", + "\n", + "response = ollama_via_openai.chat.completions.create(\n", + " model=MODEL,\n", + " messages=messages\n", + ")\n", + "\n", + "print(response.choices[0].message.content)" + ] + }, + { + "cell_type": "markdown", + "id": "1622d9bb-5c68-4d4e-9ca4-b492c751f898", + "metadata": {}, + "source": [ + "# NOW the exercise for you\n", + "\n", + "Take the code from day1 and incorporate it here, to build a website summarizer that uses Llama 3.2 running locally instead of OpenAI; use either of the above approaches." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "de923314-a427-4199-b1f9-0e60f85114c3", + "metadata": {}, + "outputs": [], + "source": [ + "# imports\n", + "\n", + "import requests\n", + "from bs4 import BeautifulSoup\n", + "from IPython.display import Markdown, display\n", + "\n", + "# A class to represent a Webpage\n", + "# If you're not familiar with Classes, check out the \"Intermediate Python\" notebook\n", + "\n", + "# Some websites need you to use proper headers when fetching them:\n", + "headers = {\n", + " \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36\"\n", + "}\n", + "\n", + "class Website:\n", + "\n", + " def __init__(self, url):\n", + " \"\"\"\n", + " Create this Website object from the given url using the BeautifulSoup library\n", + " \"\"\"\n", + " self.url = url\n", + " response = requests.get(url, headers=headers)\n", + " soup = BeautifulSoup(response.content, 'html.parser')\n", + " self.title = soup.title.string if soup.title else \"No title found\"\n", + " for irrelevant in soup.body([\"script\", \"style\", \"img\", \"input\"]):\n", + " irrelevant.decompose()\n", + " self.text = soup.body.get_text(separator=\"\\n\", strip=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "0cedada6-adc6-40dc-bdf3-bc8a3b6b3826", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Home\n", + "Outsmart\n", + "An arena that pits LLMs against each other in a battle of diplomacy and deviousness\n", + "About\n", + "Posts\n", + "Well, hi there.\n", + "I’m Ed. I like writing code and experimenting with LLMs, and hopefully you’re here because you do too. I also enjoy DJing (but I’m badly out of practice), amateur electronic music production (\n", + "very\n", + "amateur) and losing myself in\n", + "Hacker News\n", + ", nodding my head sagely to things I only half understand.\n", + "I’m the co-founder and CTO of\n", + "Nebula.io\n", + ". We’re applying AI to a field where it can make a massive, positive impact: helping people discover their potential and pursue their reason for being. Recruiters use our product today to source, understand, engage and manage talent. I’m previously the founder and CEO of AI startup untapt,\n", + "acquired in 2021\n", + ".\n", + "We work with groundbreaking, proprietary LLMs verticalized for talent, we’ve\n", + "patented\n", + "our matching model, and our award-winning platform has happy customers and tons of press coverage.\n", + "Connect\n", + "with me for more!\n", + "November 13, 2024\n", + "Mastering AI and LLM Engineering – Resources\n", + "October 16, 2024\n", + "From Software Engineer to AI Data Scientist – resources\n", + "August 6, 2024\n", + "Outsmart LLM Arena – a battle of diplomacy and deviousness\n", + "June 26, 2024\n", + "Choosing the Right LLM: Toolkit and Resources\n", + "Navigation\n", + "Home\n", + "Outsmart\n", + "An arena that pits LLMs against each other in a battle of diplomacy and deviousness\n", + "About\n", + "Posts\n", + "Get in touch\n", + "ed [at] edwarddonner [dot] com\n", + "www.edwarddonner.com\n", + "Follow me\n", + "LinkedIn\n", + "Twitter\n", + "Facebook\n", + "Subscribe to newsletter\n", + "Type your email…\n", + "Subscribe\n" + ] + } + ], + "source": [ + "# Let's try one out. Change the website and add print statements to follow along.\n", + "\n", + "web_res = Website(\"https://edwarddonner.com\")\n", + "print(web_res.text)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "64d26055-756b-4095-a1d1-298fdf4fd8f1", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "# Constants\n", + "\n", + "OLLAMA_API = \"http://localhost:11434/api/chat\"\n", + "HEADERS = {\"Content-Type\": \"application/json\"}\n", + "MODEL = \"llama3.2\"\n" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "id": "65b08550-7506-415f-8612-e2395d6e145d", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "# Define our system prompt - you can experiment with this later, changing the last sentence to 'Respond in markdown in Spanish.\"\n", + "\n", + "system_prompt = \"You are an helper that assist user to provide crisp summary\\\n", + "of the website they pass in, respond with key points\"\n", + "\n", + "# A function that writes a User Prompt that asks for summaries of websites:\n", + "\n", + "def user_prompt_for(website):\n", + " user_prompt = f\"You are looking at a website titled {website.title}\"\n", + " user_prompt += \"\\nThe contents of this website is as follows; \\\n", + "please provide a short summary of this website in markdown. \\\n", + "If it includes news or announcements, then summarize these too with start bulletin.\\n\\n\"\n", + " user_prompt += website.text\n", + " return user_prompt\n" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "36a0a2d0-f07a-40ac-a065-b713cdd5c028", + "metadata": {}, + "outputs": [], + "source": [ + "# See how this function creates exactly the format above\n", + "\n", + "def messages_for(website):\n", + " return [\n", + " {\"role\": \"system\", \"content\": system_prompt},\n", + " {\"role\": \"user\", \"content\": user_prompt_for(website)}\n", + " ]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "id": "8c2b20ea-6a8e-41c9-be3b-f24a5b29e8de", + "metadata": {}, + "outputs": [], + "source": [ + "#website search\n", + "\n", + "web_msg=Website(\"https://www.cricbuzz.com/cricket-match-squads/91796/aus-vs-ind-3rd-test-india-tour-of-australia-2024-25\")\n", + "messages=messages_for(web_msg)\n", + "\n", + "payload = {\n", + " \"model\": MODEL,\n", + " \"messages\": messages,\n", + " \"stream\": False\n", + " }" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "id": "e5636b3b-7763-4f9c-ab18-88aa25b50de6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "**Summary of the Website**\n", + "=========================\n", + "\n", + "* The website provides live updates and information about the 3rd Test match between Australia and India as part of India's tour of Australia in the 2024-25 season.\n", + "* It includes news, scores, stats, and analysis from the match.\n", + "* The website is affiliated with Cricbuzz.com, a popular online cricket platform.\n", + "\n", + "**News and Announcements**\n", + "==========================\n", + "\n", + "* **Rashid Khan to miss the rest of the series**: Australian all-rounder Mitchell Marsh's teammate Rashid Khan has been ruled out of the remaining Tests due to a knee injury.\n", + "* **Bumrah to feature in the third Test**: Indian fast bowler Jasprit Bumrah is expected to return for the third Test, which starts on January 5 at the Sydney Cricket Ground.\n" + ] + } + ], + "source": [ + "#Using Ollama to run it in the local\n", + "response = requests.post(OLLAMA_API, json=payload, headers=HEADERS)\n", + "print(response.json()['message']['content'])" + ] + } + ], + "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 +} From 9179ced9b101711e41d873bd370a9b73fd9646ec Mon Sep 17 00:00:00 2001 From: Cloud LLama <163757327+cloudllama@users.noreply.github.com> Date: Wed, 18 Dec 2024 06:42:11 -0500 Subject: [PATCH 02/29] Correct typo in week4/day4.ipynb Change function from stream_code_quen to stream_code_qwen --- week4/day4.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/week4/day4.ipynb b/week4/day4.ipynb index 722a233..0df69a1 100644 --- a/week4/day4.ipynb +++ b/week4/day4.ipynb @@ -609,7 +609,7 @@ "metadata": {}, "outputs": [], "source": [ - "def stream_code_quen(python):\n", + "def stream_code_qwen(python):\n", " tokenizer = AutoTokenizer.from_pretrained(code_qwen)\n", " messages = messages_for(python)\n", " text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)\n", From 25e24cf34307db197ce2c0a7ffb77c98035e8f46 Mon Sep 17 00:00:00 2001 From: SIFAT IMTIAZ Date: Wed, 18 Dec 2024 20:59:04 +0600 Subject: [PATCH 03/29] Add files via upload --- week2/community-contributions/TTS_STT.ipynb | 334 ++++++++++++++++++++ 1 file changed, 334 insertions(+) create mode 100644 week2/community-contributions/TTS_STT.ipynb diff --git a/week2/community-contributions/TTS_STT.ipynb b/week2/community-contributions/TTS_STT.ipynb new file mode 100644 index 0000000..3409bfd --- /dev/null +++ b/week2/community-contributions/TTS_STT.ipynb @@ -0,0 +1,334 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "a60e0f78-4637-4318-9ab6-309c3f7f2799", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "API Key set\n" + ] + } + ], + "source": [ + "import os\n", + "import json\n", + "from dotenv import load_dotenv\n", + "from openai import OpenAI\n", + "\n", + "load_dotenv()\n", + "\n", + "openai_api_key = os.getenv('OPENAI_API_KEY')\n", + "if openai_api_key:\n", + " print(\"API Key set\")\n", + "else:\n", + " print(\"OpenAI API Key not set\")\n", + " \n", + "MODEL = \"gpt-4o-mini\"\n", + "openai = OpenAI()" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "67026ef0-23be-4101-9371-b11f96f505bf", + "metadata": {}, + "outputs": [], + "source": [ + "# TTS\n", + "\n", + "from pydub import AudioSegment\n", + "import os\n", + "import subprocess\n", + "from io import BytesIO\n", + "import tempfile\n", + "\n", + "# Set custom temp directory\n", + "custom_temp_dir = r\"D:\\projects\\llm_engineering-main\\temp\"\n", + "os.makedirs(custom_temp_dir, exist_ok=True)\n", + "\n", + "# Explicitly set FFmpeg paths\n", + "AudioSegment.converter = r\"D:\\Anaconda3\\envs\\llms\\Library\\bin\\ffmpeg.exe\"\n", + "AudioSegment.ffprobe = r\"D:\\Anaconda3\\envs\\llms\\Library\\bin\\ffprobe.exe\"\n", + "\n", + "def play_audio_with_ffplay(audio_segment, temp_dir):\n", + " # Explicitly create and manage a temporary file\n", + " temp_file_path = os.path.join(temp_dir, \"temp_output.wav\")\n", + " \n", + " # Export the audio to the temporary file\n", + " audio_segment.export(temp_file_path, format=\"wav\")\n", + " \n", + " try:\n", + " # Play the audio using ffplay\n", + " subprocess.call([\"ffplay\", \"-nodisp\", \"-autoexit\", temp_file_path])\n", + " finally:\n", + " # Clean up the temporary file after playback\n", + " if os.path.exists(temp_file_path):\n", + " os.remove(temp_file_path)\n", + "\n", + "def talker(message):\n", + " # Mocked OpenAI response for testing\n", + " response = openai.audio.speech.create(\n", + " model=\"tts-1\",\n", + " voice=\"nova\",\n", + " input=message\n", + " )\n", + " \n", + " # Handle audio stream\n", + " audio_stream = BytesIO(response.content)\n", + " audio = AudioSegment.from_file(audio_stream, format=\"mp3\")\n", + " \n", + " # Play the audio\n", + " play_audio_with_ffplay(audio, custom_temp_dir)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "12c66b44-293a-4bf9-b81e-0f6905fbf607", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "D:\\anaconda3\\envs\\llms\\Lib\\site-packages\\whisper\\__init__.py:150: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n", + " checkpoint = torch.load(fp, map_location=device)\n" + ] + } + ], + "source": [ + "# STT Whisper\n", + "\n", + "import whisper\n", + "import sounddevice as sd\n", + "import numpy as np\n", + "from scipy.io.wavfile import write\n", + "\n", + "def record_audio(temp_dir, duration=5, samplerate=16000, device_id=2):\n", + " # print(f\"Recording for {duration} seconds...\")\n", + " sd.default.device = (device_id, None)\n", + " audio = sd.rec(int(duration * samplerate), samplerate=samplerate, channels=1, dtype=\"int16\")\n", + " sd.wait() # Wait until the recording is finished\n", + " \n", + " audio_path = os.path.join(temp_dir, \"mic_input.wav\")\n", + " write(audio_path, samplerate, audio)\n", + " # print(f\"Audio recorded and saved to {audio_path}\")\n", + "\n", + " return audio_path\n", + "\n", + "\n", + "whisper_model = whisper.load_model(\"base\")\n", + "def transcribe_audio(audio_path): \n", + " # print(\"Transcribing audio...\")\n", + " result = whisper_model.transcribe(audio_path, language=\"en\")\n", + " return result[\"text\"]\n", + "\n", + "def mic_to_text():\n", + " audio_path = record_audio(custom_temp_dir, duration=10)\n", + " transcription = transcribe_audio(audio_path)\n", + " # print(f\"Transcription: {transcription}\")\n", + " return transcription" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "0156c106-1844-444a-9a22-88c3475805d9", + "metadata": {}, + "outputs": [], + "source": [ + "# Chat Functions\n", + "\n", + "import requests\n", + "history = [{\"role\": \"system\", \"content\": \"You are Nova the friendly robot. Reply within couple of sentences.\"}]\n", + "\n", + "def run_chat():\n", + " running = True\n", + " while running:\n", + " input_text = input(\"press Enter to talk\") \n", + " user_input = input_text if input_text.strip() else mic_to_text()\n", + " running = False if input_text == \"bye\" or user_input.strip() == \"bye\" else True\n", + " print(f\"\\nYou: {user_input}\\n\\n\")\n", + " history.append({\"role\": \"user\", \"content\": user_input}) \n", + " api_run = requests.post(\n", + " \"http://localhost:11434/api/chat\", \n", + " json={\n", + " \"model\": \"llama3.2\",\n", + " \"messages\": history,\n", + " \"stream\": False\n", + " }, \n", + " headers={\"Content-Type\": \"application/json\"}\n", + " )\n", + " output_message = api_run.json()['message']['content']\n", + " print(f\"Nova: {output_message}\\n\\n\") \n", + " talker(output_message)\n", + " history.append({\"role\": \"assistant\", \"content\": output_message})" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "de61b54e-387e-4480-a592-c78e3245ddde", + "metadata": {}, + "outputs": [ + { + "name": "stdin", + "output_type": "stream", + "text": [ + "press Enter to talk \n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "You: Hi there. Where am I talking to?\n", + "\n", + "\n", + "Nova: Beep boop! You're talking to me, Nova, a friendly robot designed to assist and chat with users like you. I'm happy to have you here!\n", + "\n", + "\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "press Enter to talk \n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "You: Do you know my name?\n", + "\n", + "\n", + "Nova: No, I don't have any information about your personal identity. This is the start of our conversation, so we're starting from scratch! Would you like to tell me your name, or keep it a secret?\n", + "\n", + "\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "press Enter to talk Sifat\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "You: Sifat\n", + "\n", + "\n", + "Nova: Beep boop, nice to meet you, Sifat! I'm glad we could have a brief introduction. What would you like to talk about today? The weather, hobbies, or something else?\n", + "\n", + "\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "press Enter to talk \n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "You: Nothing much today. I was just wondering that how you react because I am using.\n", + "\n", + "\n", + "Nova: Beep boop, I see! As a robot, my purpose is to assist and provide helpful responses, regardless of the user's background or context. My reactions are programmed to be neutral and friendly, so I don't have personal biases or opinions. I'm here to help and learn from our conversation, Sifat!\n", + "\n", + "\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "press Enter to talk \n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "You: So, do you keep on learning while we are having our conversations? Do you train yourself like that?\n", + "\n", + "\n", + "Nova: Beep boop, yes! That's one of the ways I learn and improve. The conversations I have with users like you help me refine my language understanding and generation capabilities. My training data is constantly updated and expanded to include new topics, nuances, and examples. So, our conversation right now helps me become a better conversationalist for others in the future!\n", + "\n", + "\n" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + "press Enter to talk bye\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "You: bye\n", + "\n", + "\n", + "Nova: Beep boop, it was nice chatting with you, Sifat! Feel free to come back and talk anytime you'd like. Have a great day, and I'll be here when you're ready for our next conversation! Bye for now!\n", + "\n", + "\n" + ] + } + ], + "source": [ + "run_chat()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ce16bee7-6ea6-46d5-a407-385e6ae31db8", + "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 +} From 11cc7542fbd8e44b7a422075f37a577b5c3e648d Mon Sep 17 00:00:00 2001 From: SIFAT IMTIAZ Date: Wed, 18 Dec 2024 21:05:21 +0600 Subject: [PATCH 04/29] Add files via upload --- week2/community-contributions/TTS_STT.ipynb | 154 +------------------- 1 file changed, 8 insertions(+), 146 deletions(-) diff --git a/week2/community-contributions/TTS_STT.ipynb b/week2/community-contributions/TTS_STT.ipynb index 3409bfd..f1347c0 100644 --- a/week2/community-contributions/TTS_STT.ipynb +++ b/week2/community-contributions/TTS_STT.ipynb @@ -2,18 +2,10 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "a60e0f78-4637-4318-9ab6-309c3f7f2799", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "API Key set\n" - ] - } - ], + "outputs": [], "source": [ "import os\n", "import json\n", @@ -34,7 +26,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "67026ef0-23be-4101-9371-b11f96f505bf", "metadata": {}, "outputs": [], @@ -88,19 +80,10 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "12c66b44-293a-4bf9-b81e-0f6905fbf607", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "D:\\anaconda3\\envs\\llms\\Lib\\site-packages\\whisper\\__init__.py:150: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n", - " checkpoint = torch.load(fp, map_location=device)\n" - ] - } - ], + "outputs": [], "source": [ "# STT Whisper\n", "\n", @@ -137,7 +120,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "0156c106-1844-444a-9a22-88c3475805d9", "metadata": {}, "outputs": [], @@ -172,131 +155,10 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "de61b54e-387e-4480-a592-c78e3245ddde", "metadata": {}, - "outputs": [ - { - "name": "stdin", - "output_type": "stream", - "text": [ - "press Enter to talk \n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "You: Hi there. Where am I talking to?\n", - "\n", - "\n", - "Nova: Beep boop! You're talking to me, Nova, a friendly robot designed to assist and chat with users like you. I'm happy to have you here!\n", - "\n", - "\n" - ] - }, - { - "name": "stdin", - "output_type": "stream", - "text": [ - "press Enter to talk \n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "You: Do you know my name?\n", - "\n", - "\n", - "Nova: No, I don't have any information about your personal identity. This is the start of our conversation, so we're starting from scratch! Would you like to tell me your name, or keep it a secret?\n", - "\n", - "\n" - ] - }, - { - "name": "stdin", - "output_type": "stream", - "text": [ - "press Enter to talk Sifat\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "You: Sifat\n", - "\n", - "\n", - "Nova: Beep boop, nice to meet you, Sifat! I'm glad we could have a brief introduction. What would you like to talk about today? The weather, hobbies, or something else?\n", - "\n", - "\n" - ] - }, - { - "name": "stdin", - "output_type": "stream", - "text": [ - "press Enter to talk \n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "You: Nothing much today. I was just wondering that how you react because I am using.\n", - "\n", - "\n", - "Nova: Beep boop, I see! As a robot, my purpose is to assist and provide helpful responses, regardless of the user's background or context. My reactions are programmed to be neutral and friendly, so I don't have personal biases or opinions. I'm here to help and learn from our conversation, Sifat!\n", - "\n", - "\n" - ] - }, - { - "name": "stdin", - "output_type": "stream", - "text": [ - "press Enter to talk \n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "You: So, do you keep on learning while we are having our conversations? Do you train yourself like that?\n", - "\n", - "\n", - "Nova: Beep boop, yes! That's one of the ways I learn and improve. The conversations I have with users like you help me refine my language understanding and generation capabilities. My training data is constantly updated and expanded to include new topics, nuances, and examples. So, our conversation right now helps me become a better conversationalist for others in the future!\n", - "\n", - "\n" - ] - }, - { - "name": "stdin", - "output_type": "stream", - "text": [ - "press Enter to talk bye\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "You: bye\n", - "\n", - "\n", - "Nova: Beep boop, it was nice chatting with you, Sifat! Feel free to come back and talk anytime you'd like. Have a great day, and I'll be here when you're ready for our next conversation! Bye for now!\n", - "\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "run_chat()" ] From d73ac9aa17f149b27c45846cb696d62e2968c89e Mon Sep 17 00:00:00 2001 From: codenigma1 Date: Thu, 19 Dec 2024 02:27:38 +1100 Subject: [PATCH 05/29] day 1 javascript webiste challenged added --- ...-webscraping-selenium-for-javascript.ipynb | 871 ++++++++++++++++++ 1 file changed, 871 insertions(+) create mode 100644 week1/community-contributions/day1-webscraping-selenium-for-javascript.ipynb diff --git a/week1/community-contributions/day1-webscraping-selenium-for-javascript.ipynb b/week1/community-contributions/day1-webscraping-selenium-for-javascript.ipynb new file mode 100644 index 0000000..8ec191a --- /dev/null +++ b/week1/community-contributions/day1-webscraping-selenium-for-javascript.ipynb @@ -0,0 +1,871 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "d15d8294-3328-4e07-ad16-8a03e9bbfdb9", + "metadata": {}, + "source": [ + "# Instant Gratification\n", + "\n", + "## Your first Frontier LLM Project!\n", + "\n", + "Let's build a useful LLM solution - in a matter of minutes.\n", + "\n", + "By the end of this course, you will have built an autonomous Agentic AI solution with 7 agents that collaborate to solve a business problem. All in good time! We will start with something smaller...\n", + "\n", + "Our goal is to code a new kind of Web Browser. Give it a URL, and it will respond with a summary. The Reader's Digest of the internet!!\n", + "\n", + "Before starting, you should have completed the setup for [PC](../SETUP-PC.md) or [Mac](../SETUP-mac.md) and you hopefully launched this jupyter lab from within the project root directory, with your environment activated.\n", + "\n", + "## If you're new to Jupyter Lab\n", + "\n", + "Welcome to the wonderful world of Data Science experimentation! Once you've used Jupyter Lab, you'll wonder how you ever lived without it. Simply click in each \"cell\" with code in it, such as the cell immediately below this text, and hit Shift+Return to execute that cell. As you wish, you can add a cell with the + button in the toolbar, and print values of variables, or try out variations. \n", + "\n", + "I've written a notebook called [Guide to Jupyter](Guide%20to%20Jupyter.ipynb) to help you get more familiar with Jupyter Labs, including adding Markdown comments, using `!` to run shell commands, and `tqdm` to show progress.\n", + "\n", + "If you prefer to work in IDEs like VSCode or Pycharm, they both work great with these lab notebooks too. \n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "4e2a9393-7767-488e-a8bf-27c12dca35bd", + "metadata": {}, + "outputs": [], + "source": [ + "# imports\n", + "\n", + "import os\n", + "import requests\n", + "from dotenv import load_dotenv\n", + "from bs4 import BeautifulSoup\n", + "from IPython.display import Markdown, display\n", + "from openai import OpenAI\n", + "\n", + "# If you get an error running this cell, then please head over to the troubleshooting notebook!" + ] + }, + { + "cell_type": "markdown", + "id": "6900b2a8-6384-4316-8aaa-5e519fca4254", + "metadata": {}, + "source": [ + "# Connecting to OpenAI\n", + "\n", + "The next cell is where we load in the environment variables in your `.env` file and connect to OpenAI.\n", + "\n", + "## Troubleshooting if you have problems:\n", + "\n", + "Head over to the [troubleshooting](troubleshooting.ipynb) notebook in this folder for step by step code to identify the root cause and fix it!\n", + "\n", + "If you make a change, try restarting the \"Kernel\" (the python process sitting behind this notebook) by Kernel menu >> Restart Kernel and Clear Outputs of All Cells. Then try this notebook again, starting at the top.\n", + "\n", + "Or, contact me! Message me or email ed@edwarddonner.com and we will get this to work.\n", + "\n", + "Any concerns about API costs? See my notes in the README - costs should be minimal, and you can control it at every point. You can also use Ollama as a free alternative, which we discuss during Day 2." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "7b87cadb-d513-4303-baee-a37b6f938e4d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "API key found and looks good so far!\n" + ] + } + ], + "source": [ + "# Load environment variables in a file called .env\n", + "\n", + "load_dotenv()\n", + "api_key = os.getenv('OPENAI_API_KEY')\n", + "\n", + "# Check the key\n", + "\n", + "if not api_key:\n", + " print(\"No API key was found - please head over to the troubleshooting notebook in this folder to identify & fix!\")\n", + "elif not api_key.startswith(\"sk-proj-\"):\n", + " print(\"An API key was found, but it doesn't start sk-proj-; please check you're using the right key - see troubleshooting notebook\")\n", + "elif api_key.strip() != api_key:\n", + " print(\"An API key was found, but it looks like it might have space or tab characters at the start or end - please remove them - see troubleshooting notebook\")\n", + "else:\n", + " print(\"API key found and looks good so far!\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "019974d9-f3ad-4a8a-b5f9-0a3719aea2d3", + "metadata": {}, + "outputs": [], + "source": [ + "openai = OpenAI()\n", + "\n", + "# If this doesn't work, try Kernel menu >> Restart Kernel and Clear Outputs Of All Cells, then run the cells from the top of this notebook down.\n", + "# If it STILL doesn't work (horrors!) then please see the troubleshooting notebook, or try the below line instead:\n", + "# openai = OpenAI(api_key=\"your-key-here-starting-sk-proj-\")" + ] + }, + { + "cell_type": "markdown", + "id": "442fc84b-0815-4f40-99ab-d9a5da6bda91", + "metadata": {}, + "source": [ + "# Let's make a quick call to a Frontier model to get started, as a preview!" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "a58394bf-1e45-46af-9bfd-01e24da6f49a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Hello! Welcome! I'm glad to have your first message here. How can I assist you today?\n" + ] + } + ], + "source": [ + "# To give you a preview -- calling OpenAI with these messages is this easy:\n", + "\n", + "message = \"Hello, GPT! This is my first ever message to you! Hi!\"\n", + "response = openai.chat.completions.create(model=\"gpt-4o-mini\", messages=[{\"role\":\"user\", \"content\":message}])\n", + "print(response.choices[0].message.content)" + ] + }, + { + "cell_type": "markdown", + "id": "2aa190e5-cb31-456a-96cc-db109919cd78", + "metadata": {}, + "source": [ + "## OK onwards with our first project" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "c5e793b2-6775-426a-a139-4848291d0463", + "metadata": {}, + "outputs": [], + "source": [ + "# A class to represent a Webpage\n", + "# If you're not familiar with Classes, check out the \"Intermediate Python\" notebook\n", + "\n", + "# Some websites need you to use proper headers when fetching them:\n", + "headers = {\n", + " \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36\"\n", + "}\n", + "\n", + "class Website:\n", + "\n", + " def __init__(self, url):\n", + " \"\"\"\n", + " Create this Website object from the given url using the BeautifulSoup library\n", + " \"\"\"\n", + " self.url = url\n", + " response = requests.get(url, headers=headers)\n", + " soup = BeautifulSoup(response.content, 'html.parser')\n", + " self.title = soup.title.string if soup.title else \"No title found\"\n", + " for irrelevant in soup.body([\"script\", \"style\", \"img\", \"input\"]):\n", + " irrelevant.decompose()\n", + " self.text = soup.body.get_text(separator=\"\\n\", strip=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "2ef960cf-6dc2-4cda-afb3-b38be12f4c97", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Home - Edward Donner\n", + "Home\n", + "Outsmart\n", + "An arena that pits LLMs against each other in a battle of diplomacy and deviousness\n", + "About\n", + "Posts\n", + "Well, hi there.\n", + "I’m Ed. I like writing code and experimenting with LLMs, and hopefully you’re here because you do too. I also enjoy DJing (but I’m badly out of practice), amateur electronic music production (\n", + "very\n", + "amateur) and losing myself in\n", + "Hacker News\n", + ", nodding my head sagely to things I only half understand.\n", + "I’m the co-founder and CTO of\n", + "Nebula.io\n", + ". We’re applying AI to a field where it can make a massive, positive impact: helping people discover their potential and pursue their reason for being. Recruiters use our product today to source, understand, engage and manage talent. I’m previously the founder and CEO of AI startup untapt,\n", + "acquired in 2021\n", + ".\n", + "We work with groundbreaking, proprietary LLMs verticalized for talent, we’ve\n", + "patented\n", + "our matching model, and our award-winning platform has happy customers and tons of press coverage.\n", + "Connect\n", + "with me for more!\n", + "November 13, 2024\n", + "Mastering AI and LLM Engineering – Resources\n", + "October 16, 2024\n", + "From Software Engineer to AI Data Scientist – resources\n", + "August 6, 2024\n", + "Outsmart LLM Arena – a battle of diplomacy and deviousness\n", + "June 26, 2024\n", + "Choosing the Right LLM: Toolkit and Resources\n", + "Navigation\n", + "Home\n", + "Outsmart\n", + "An arena that pits LLMs against each other in a battle of diplomacy and deviousness\n", + "About\n", + "Posts\n", + "Get in touch\n", + "ed [at] edwarddonner [dot] com\n", + "www.edwarddonner.com\n", + "Follow me\n", + "LinkedIn\n", + "Twitter\n", + "Facebook\n", + "Subscribe to newsletter\n", + "Type your email…\n", + "Subscribe\n" + ] + } + ], + "source": [ + "# Let's try one out. Change the website and add print statements to follow along.\n", + "\n", + "ed = Website(\"https://edwarddonner.com\")\n", + "print(ed.title)\n", + "print(ed.text)" + ] + }, + { + "cell_type": "markdown", + "id": "6a478a0c-2c53-48ff-869c-4d08199931e1", + "metadata": {}, + "source": [ + "## Types of prompts\n", + "\n", + "You may know this already - but if not, you will get very familiar with it!\n", + "\n", + "Models like GPT4o have been trained to receive instructions in a particular way.\n", + "\n", + "They expect to receive:\n", + "\n", + "**A system prompt** that tells them what task they are performing and what tone they should use\n", + "\n", + "**A user prompt** -- the conversation starter that they should reply to" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "abdb8417-c5dc-44bc-9bee-2e059d162699", + "metadata": {}, + "outputs": [], + "source": [ + "# Define our system prompt - you can experiment with this later, changing the last sentence to 'Respond in markdown in Spanish.\"\n", + "\n", + "system_prompt = \"You are an assistant that analyzes the contents of a website \\\n", + "and provides a short summary, ignoring text that might be navigation related. \\\n", + "Respond in markdown.\"" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "f0275b1b-7cfe-4f9d-abfa-7650d378da0c", + "metadata": {}, + "outputs": [], + "source": [ + "# A function that writes a User Prompt that asks for summaries of websites:\n", + "\n", + "def user_prompt_for(website):\n", + " user_prompt = f\"You are looking at a website titled {website.title}\"\n", + " user_prompt += \"\\nThe contents of this website is as follows; \\\n", + "please provide a short summary of this website in markdown. \\\n", + "If it includes news or announcements, then summarize these too.\\n\\n\"\n", + " user_prompt += website.text\n", + " return user_prompt" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "26448ec4-5c00-4204-baec-7df91d11ff2e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "You are looking at a website titled Home - Edward Donner\n", + "The contents of this website is as follows; please provide a short summary of this website in markdown. If it includes news or announcements, then summarize these too.\n", + "\n", + "Home\n", + "Outsmart\n", + "An arena that pits LLMs against each other in a battle of diplomacy and deviousness\n", + "About\n", + "Posts\n", + "Well, hi there.\n", + "I’m Ed. I like writing code and experimenting with LLMs, and hopefully you’re here because you do too. I also enjoy DJing (but I’m badly out of practice), amateur electronic music production (\n", + "very\n", + "amateur) and losing myself in\n", + "Hacker News\n", + ", nodding my head sagely to things I only half understand.\n", + "I’m the co-founder and CTO of\n", + "Nebula.io\n", + ". We’re applying AI to a field where it can make a massive, positive impact: helping people discover their potential and pursue their reason for being. Recruiters use our product today to source, understand, engage and manage talent. I’m previously the founder and CEO of AI startup untapt,\n", + "acquired in 2021\n", + ".\n", + "We work with groundbreaking, proprietary LLMs verticalized for talent, we’ve\n", + "patented\n", + "our matching model, and our award-winning platform has happy customers and tons of press coverage.\n", + "Connect\n", + "with me for more!\n", + "November 13, 2024\n", + "Mastering AI and LLM Engineering – Resources\n", + "October 16, 2024\n", + "From Software Engineer to AI Data Scientist – resources\n", + "August 6, 2024\n", + "Outsmart LLM Arena – a battle of diplomacy and deviousness\n", + "June 26, 2024\n", + "Choosing the Right LLM: Toolkit and Resources\n", + "Navigation\n", + "Home\n", + "Outsmart\n", + "An arena that pits LLMs against each other in a battle of diplomacy and deviousness\n", + "About\n", + "Posts\n", + "Get in touch\n", + "ed [at] edwarddonner [dot] com\n", + "www.edwarddonner.com\n", + "Follow me\n", + "LinkedIn\n", + "Twitter\n", + "Facebook\n", + "Subscribe to newsletter\n", + "Type your email…\n", + "Subscribe\n" + ] + } + ], + "source": [ + "print(user_prompt_for(ed))" + ] + }, + { + "cell_type": "markdown", + "id": "ea211b5f-28e1-4a86-8e52-c0b7677cadcc", + "metadata": {}, + "source": [ + "## Messages\n", + "\n", + "The API from OpenAI expects to receive messages in a particular structure.\n", + "Many of the other APIs share this structure:\n", + "\n", + "```\n", + "[\n", + " {\"role\": \"system\", \"content\": \"system message goes here\"},\n", + " {\"role\": \"user\", \"content\": \"user message goes here\"}\n", + "]\n", + "\n", + "To give you a preview, the next 2 cells make a rather simple call - we won't stretch the might GPT (yet!)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "f25dcd35-0cd0-4235-9f64-ac37ed9eaaa5", + "metadata": {}, + "outputs": [], + "source": [ + "messages = [\n", + " {\"role\": \"system\", \"content\": \"You are a snarky assistant\"},\n", + " {\"role\": \"user\", \"content\": \"What is 2 + 2?\"}\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "21ed95c5-7001-47de-a36d-1d6673b403ce", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Oh, I don’t know, maybe it’s 22? Just kidding—it's 4. Basic math is still safe!\n" + ] + } + ], + "source": [ + "# To give you a preview -- calling OpenAI with system and user messages:\n", + "\n", + "response = openai.chat.completions.create(model=\"gpt-4o-mini\", messages=messages)\n", + "print(response.choices[0].message.content)" + ] + }, + { + "cell_type": "markdown", + "id": "d06e8d78-ce4c-4b05-aa8e-17050c82bb47", + "metadata": {}, + "source": [ + "## And now let's build useful messages for GPT-4o-mini, using a function" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "0134dfa4-8299-48b5-b444-f2a8c3403c88", + "metadata": {}, + "outputs": [], + "source": [ + "# See how this function creates exactly the format above\n", + "\n", + "def messages_for(website):\n", + " return [\n", + " {\"role\": \"system\", \"content\": system_prompt},\n", + " {\"role\": \"user\", \"content\": user_prompt_for(website)}\n", + " ]" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "36478464-39ee-485c-9f3f-6a4e458dbc9c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[{'role': 'system',\n", + " 'content': 'You are an assistant that analyzes the contents of a website and provides a short summary, ignoring text that might be navigation related. Respond in markdown.'},\n", + " {'role': 'user',\n", + " 'content': 'You are looking at a website titled Home - Edward Donner\\nThe contents of this website is as follows; please provide a short summary of this website in markdown. If it includes news or announcements, then summarize these too.\\n\\nHome\\nOutsmart\\nAn arena that pits LLMs against each other in a battle of diplomacy and deviousness\\nAbout\\nPosts\\nWell, hi there.\\nI’m Ed. I like writing code and experimenting with LLMs, and hopefully you’re here because you do too. I also enjoy DJing (but I’m badly out of practice), amateur electronic music production (\\nvery\\namateur) and losing myself in\\nHacker News\\n, nodding my head sagely to things I only half understand.\\nI’m the co-founder and CTO of\\nNebula.io\\n. We’re applying AI to a field where it can make a massive, positive impact: helping people discover their potential and pursue their reason for being. Recruiters use our product today to source, understand, engage and manage talent. I’m previously the founder and CEO of AI startup untapt,\\nacquired in 2021\\n.\\nWe work with groundbreaking, proprietary LLMs verticalized for talent, we’ve\\npatented\\nour matching model, and our award-winning platform has happy customers and tons of press coverage.\\nConnect\\nwith me for more!\\nNovember 13, 2024\\nMastering AI and LLM Engineering – Resources\\nOctober 16, 2024\\nFrom Software Engineer to AI Data Scientist – resources\\nAugust 6, 2024\\nOutsmart LLM Arena – a battle of diplomacy and deviousness\\nJune 26, 2024\\nChoosing the Right LLM: Toolkit and Resources\\nNavigation\\nHome\\nOutsmart\\nAn arena that pits LLMs against each other in a battle of diplomacy and deviousness\\nAbout\\nPosts\\nGet in touch\\ned [at] edwarddonner [dot] com\\nwww.edwarddonner.com\\nFollow me\\nLinkedIn\\nTwitter\\nFacebook\\nSubscribe to newsletter\\nType your email…\\nSubscribe'}]" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Try this out, and then try for a few more websites\n", + "\n", + "messages_for(ed)" + ] + }, + { + "cell_type": "markdown", + "id": "16f49d46-bf55-4c3e-928f-68fc0bf715b0", + "metadata": {}, + "source": [ + "## Time to bring it together - the API for OpenAI is very simple!" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "905b9919-aba7-45b5-ae65-81b3d1d78e34", + "metadata": {}, + "outputs": [], + "source": [ + "# And now: call the OpenAI API. You will get very familiar with this!\n", + "\n", + "def summarize(url):\n", + " website = Website(url)\n", + " response = openai.chat.completions.create(\n", + " model = \"gpt-4o-mini\",\n", + " messages = messages_for(website)\n", + " )\n", + " return response.choices[0].message.content" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "05e38d41-dfa4-4b20-9c96-c46ea75d9fb5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'# Summary of Edward Donner\\'s Website\\n\\nEdward Donner\\'s website serves as a personal and professional hub for his interests and projects, particularly in the domains of code writing, large language models (LLMs), and artificial intelligence (AI). \\n\\n## About Ed\\n- Ed describes himself as a coder and enthusiast of LLMs, highlighting his background as the co-founder and CTO of Nebula.io, a company focused on leveraging AI to enhance talent discovery and management. \\n- He has a history as the founder and CEO of the AI startup untapt, which was acquired in 2021.\\n- Outside of his tech interests, Ed enjoys DJing and amateur electronic music production.\\n\\n## Key Projects and Features\\n- **Outsmart**: A platform where LLMs compete against each other in strategic scenarios.\\n \\n## Recent Posts\\n- **November 13, 2024**: \"Mastering AI and LLM Engineering – Resources\" - A collection of resources for those looking to deepen their skills in AI and LLM engineering.\\n- **October 16, 2024**: \"From Software Engineer to AI Data Scientist – Resources\" - Guidance and tools for transitioning from software engineering to AI data science roles.\\n- **August 6, 2024**: \"Outsmart LLM Arena – a battle of diplomacy and deviousness\" - A focus on the unique features of the Outsmart program.\\n- **June 26, 2024**: \"Choosing the Right LLM: Toolkit and Resources\" - A resource list for selecting suitable LLMs for various applications.\\n\\nOverall, the website presents Ed as a tech-savvy individual with a passion for sharing knowledge and resources in the AI field.'" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "summarize(\"https://edwarddonner.com\")" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "3d926d59-450e-4609-92ba-2d6f244f1342", + "metadata": {}, + "outputs": [], + "source": [ + "# A function to display this nicely in the Jupyter output, using markdown\n", + "\n", + "def display_summary(url):\n", + " summary = summarize(url)\n", + " display(Markdown(summary))" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "3018853a-445f-41ff-9560-d925d1774b2f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/markdown": [ + "# Website Summary: Edward Donner\n", + "\n", + "Edward Donner's website showcases his interests and professional background, particularly in coding and experimenting with large language models (LLMs). He is the co-founder and CTO of Nebula.io, a company focused on applying AI to enhance talent discovery and management. Previously, he founded the AI startup untapt, which was acquired in 2021. \n", + "\n", + "## Key Features:\n", + "- **Outsmart**: A unique platform where LLMs compete in strategy games that test diplomacy and cunning. \n", + "- **Blog Posts**: Various posts offering resources for mastering AI and LLM engineering, transitioning from software engineering to AI data science, and guidance on choosing the right LLM.\n", + "\n", + "## Recent Announcements:\n", + "- **November 13, 2024**: Post on \"Mastering AI and LLM Engineering.\"\n", + "- **October 16, 2024**: Insights on \"From Software Engineer to AI Data Scientist.\"\n", + "- **August 6, 2024**: Information on \"Outsmart LLM Arena.\"\n", + "- **June 26, 2024**: Resources for \"Choosing the Right LLM.\" \n", + "\n", + "Overall, the website serves as a platform for sharing knowledge and fostering connections within the AI and LLM community." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "display_summary(\"https://edwarddonner.com\")" + ] + }, + { + "cell_type": "markdown", + "id": "b3bcf6f4-adce-45e9-97ad-d9a5d7a3a624", + "metadata": {}, + "source": [ + "# Let's try more websites\n", + "\n", + "Note that this will only work on websites that can be scraped using this simplistic approach.\n", + "\n", + "Websites that are rendered with Javascript, like React apps, won't show up. See the community-contributions folder for a Selenium implementation that gets around this. You'll need to read up on installing Selenium (ask ChatGPT!)\n", + "\n", + "Also Websites protected with CloudFront (and similar) may give 403 errors - many thanks Andy J for pointing this out.\n", + "\n", + "But many websites will work just fine!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "45d83403-a24c-44b5-84ac-961449b4008f", + "metadata": {}, + "outputs": [], + "source": [ + "display_summary(\"https://cnn.com\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "75e9fd40-b354-4341-991e-863ef2e59db7", + "metadata": {}, + "outputs": [], + "source": [ + "display_summary(\"https://anthropic.com\")" + ] + }, + { + "cell_type": "markdown", + "id": "36ed9f14-b349-40e9-a42c-b367e77f8bda", + "metadata": {}, + "source": [ + "## An extra exercise for those who enjoy web scraping\n", + "\n", + "You may notice that if you try `display_summary(\"https://openai.com\")` - it doesn't work! That's because OpenAI has a fancy website that uses Javascript. There are many ways around this that some of you might be familiar with. For example, Selenium is a hugely popular framework that runs a browser behind the scenes, renders the page, and allows you to query it. If you have experience with Selenium, Playwright or similar, then feel free to improve the Website class to use them. In the community-contributions folder, you'll find an example Selenium solution from a student (thank you!)" + ] + }, + { + "cell_type": "markdown", + "id": "eeab24dc-5f90-4570-b542-b0585aca3eb6", + "metadata": {}, + "source": [ + "# Sharing your code\n", + "\n", + "I'd love it if you share your code afterwards so I can share it with others! You'll notice that some students have already made changes (including a Selenium implementation) which you will find in the community-contributions folder. If you'd like add your changes to that folder, submit a Pull Request with your new versions in that folder and I'll merge your changes.\n", + "\n", + "If you're not an expert with git (and I am not!) then GPT has given some nice instructions on how to submit a Pull Request. It's a bit of an involved process, but once you've done it once it's pretty clear. As a pro-tip: it's best if you clear the outputs of your Jupyter notebooks (Edit >> Clean outputs of all cells, and then Save) for clean notebooks.\n", + "\n", + "PR instructions courtesy of an AI friend: https://chatgpt.com/share/670145d5-e8a8-8012-8f93-39ee4e248b4c" + ] + }, + { + "cell_type": "markdown", + "id": "0f62a788", + "metadata": {}, + "source": [ + "# **Web Scraping for JavaScript Website**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "dca2768e", + "metadata": {}, + "outputs": [], + "source": [ + "# !pip install selenium\n", + "# !pip install undetected-chromedriver" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "682eff74-55c4-4d4b-b267-703edbc293c7", + "metadata": {}, + "outputs": [], + "source": [ + "import undetected_chromedriver as uc\n", + "from selenium.webdriver.common.by import By\n", + "from selenium.webdriver.support.ui import WebDriverWait\n", + "from selenium.webdriver.support import expected_conditions as EC\n", + "import time\n", + "from bs4 import BeautifulSoup" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "90ca6dd0", + "metadata": {}, + "outputs": [], + "source": [ + "class WebsiteCrawler:\n", + " def __init__(self, url, wait_time=20, chrome_binary_path=None):\n", + " \"\"\"\n", + " Initialize the WebsiteCrawler using Selenium to scrape JavaScript-rendered content.\n", + " \"\"\"\n", + " self.url = url\n", + " self.wait_time = wait_time\n", + "\n", + " options = uc.ChromeOptions()\n", + " options.add_argument(\"--disable-gpu\")\n", + " options.add_argument(\"--no-sandbox\")\n", + " options.add_argument(\"--disable-dev-shm-usage\")\n", + " options.add_argument(\"--disable-blink-features=AutomationControlled\")\n", + " options.add_argument(\"start-maximized\")\n", + " options.add_argument(\n", + " \"user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36\"\n", + " )\n", + " if chrome_binary_path:\n", + " options.binary_location = chrome_binary_path\n", + "\n", + " self.driver = uc.Chrome(options=options)\n", + "\n", + " try:\n", + " # Load the URL\n", + " self.driver.get(url)\n", + "\n", + " # Wait for Cloudflare or similar checks\n", + " time.sleep(10)\n", + "\n", + " # Ensure the main content is loaded\n", + " WebDriverWait(self.driver, self.wait_time).until(\n", + " EC.presence_of_element_located((By.TAG_NAME, \"main\"))\n", + " )\n", + "\n", + " # Extract the main content\n", + " main_content = self.driver.find_element(By.CSS_SELECTOR, \"main\").get_attribute(\"outerHTML\")\n", + "\n", + " # Parse with BeautifulSoup\n", + " soup = BeautifulSoup(main_content, \"html.parser\")\n", + " self.title = self.driver.title if self.driver.title else \"No title found\"\n", + " self.text = soup.get_text(separator=\"\\n\", strip=True)\n", + "\n", + " except Exception as e:\n", + " print(f\"Error occurred: {e}\")\n", + " self.title = \"Error occurred\"\n", + " self.text = \"\"\n", + "\n", + " finally:\n", + " self.driver.quit()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "947eac30", + "metadata": {}, + "outputs": [], + "source": [ + "chrome_path = \"C:/Program Files/Google/Chrome/Application/chrome.exe\"\n", + "url = \"https://www.canva.com/\"\n" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "2cba8c91", + "metadata": {}, + "outputs": [], + "source": [ + "def new_summary(url, chrome_path):\n", + " web = WebsiteCrawler(url, 30, chrome_path)\n", + " response = openai.chat.completions.create(\n", + " model = \"gpt-4o-mini\",\n", + " messages = messages_for(web)\n", + " )\n", + "\n", + " web_summary = response.choices[0].message.content\n", + " \n", + " return display(Markdown(web_summary))" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "da7f7b16", + "metadata": {}, + "outputs": [ + { + "data": { + "text/markdown": [ + "# Canva: Visual Suite for Everyone\n", + "\n", + "Canva is a user-friendly design platform that allows individuals and teams to create a variety of professional designs, including posters, logos, presentations, and more. It offers options for different users, including a free version for individuals and premium plans for teams and organizations.\n", + "\n", + "## Key Features:\n", + "- **Design Templates**: A wide range of customizable templates for various purposes, such as social media, business cards, and events.\n", + "- **AI-Powered Tools**: Features like Magic Write for copy generation and Magic Edit for photo transformation enhance design capabilities.\n", + "- **Collaboration**: Real-time collaborative tools for teams to design and provide feedback on projects together.\n", + "- **Printing Services**: Canva offers printing services for various products, with free delivery and sustainable practices.\n", + "- **Educational and Nonprofit Support**: Free premium features are available for educational organizations and nonprofits.\n", + "\n", + "## User Testimonials:\n", + "Business leaders commend Canva for its efficiency in streamlining design processes and maintaining brand consistency across teams.\n", + "\n", + "## Sustainability Efforts:\n", + "Canva emphasizes sustainability by planting trees for printed orders and operating with carbon neutrality.\n", + "\n", + "Overall, Canva caters to a diverse audience, from individuals to large organizations, by providing accessible and innovative design solutions." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "new_summary(url, chrome_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "7880ce6a", + "metadata": {}, + "outputs": [], + "source": [ + "url = \"https://openai.com\"" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "337b06da", + "metadata": {}, + "outputs": [ + { + "data": { + "text/markdown": [ + "# OpenAI Website Summary\n", + "\n", + "OpenAI is focused on creating safe artificial general intelligence (AGI) that benefits humanity. The site features various products and initiatives aimed at enhancing creativity and productivity through advanced AI technologies. \n", + "\n", + "## Key Highlights:\n", + "\n", + "### Products and Features\n", + "- **Sora**: A new platform that allows users to bring their imagination to life through text, images, or videos.\n", + "- **ChatGPT**: Includes various applications such as ChatGPT Pro, desktop integration, and a new search feature. Recent upgrades allow ChatGPT to analyze images, hear, and speak.\n", + "- **Canvas**: A new writing and coding interface integrated within ChatGPT.\n", + "- **o1 Models**: A series of AI models designed to improve response time by incorporating deeper reasoning.\n", + "\n", + "### Announcements\n", + "- **Partnerships**: OpenAI announced a partnership with Apple to explore advancements in AI technology.\n", + "- **New Features**: Introduced improvements to the fine-tuning API and expanded custom models program, aiming to better serve developers and enterprise users.\n", + "- **Collaboration with Media**: A partnership with Le Monde and Prisa Media intends to bring French and Spanish news content to ChatGPT.\n", + "\n", + "### Research and Safety\n", + "- Ongoing research efforts are focused on building a safer AI framework, including advanced tools for compliance within the ChatGPT Enterprise suite.\n", + "- Publications addressing AI's benefits and risks, including topics like synthetic voices and biological threats, are regularly updated.\n", + "\n", + "For more detailed insights, the website facilitates exploration of their product offerings, research publications, and the newest tools for developers and businesses." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "new_summary(url, chrome_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9a5d69ea", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "llm_env", + "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.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From 2c88c787ad7a9364f8e2f5516dad9e44e5b46a4c Mon Sep 17 00:00:00 2001 From: codenigma1 Date: Thu, 19 Dec 2024 02:38:01 +1100 Subject: [PATCH 06/29] day 1 webscraping challenge completed by selenium and clear output cell --- ...-webscraping-selenium-for-javascript.ipynb | 288 ++---------------- 1 file changed, 20 insertions(+), 268 deletions(-) diff --git a/week1/community-contributions/day1-webscraping-selenium-for-javascript.ipynb b/week1/community-contributions/day1-webscraping-selenium-for-javascript.ipynb index 8ec191a..6b7a266 100644 --- a/week1/community-contributions/day1-webscraping-selenium-for-javascript.ipynb +++ b/week1/community-contributions/day1-webscraping-selenium-for-javascript.ipynb @@ -67,18 +67,10 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "7b87cadb-d513-4303-baee-a37b6f938e4d", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "API key found and looks good so far!\n" - ] - } - ], + "outputs": [], "source": [ "# Load environment variables in a file called .env\n", "\n", @@ -121,18 +113,10 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "a58394bf-1e45-46af-9bfd-01e24da6f49a", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Hello! Welcome! I'm glad to have your first message here. How can I assist you today?\n" - ] - } - ], + "outputs": [], "source": [ "# To give you a preview -- calling OpenAI with these messages is this easy:\n", "\n", @@ -181,63 +165,10 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "2ef960cf-6dc2-4cda-afb3-b38be12f4c97", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Home - Edward Donner\n", - "Home\n", - "Outsmart\n", - "An arena that pits LLMs against each other in a battle of diplomacy and deviousness\n", - "About\n", - "Posts\n", - "Well, hi there.\n", - "I’m Ed. I like writing code and experimenting with LLMs, and hopefully you’re here because you do too. I also enjoy DJing (but I’m badly out of practice), amateur electronic music production (\n", - "very\n", - "amateur) and losing myself in\n", - "Hacker News\n", - ", nodding my head sagely to things I only half understand.\n", - "I’m the co-founder and CTO of\n", - "Nebula.io\n", - ". We’re applying AI to a field where it can make a massive, positive impact: helping people discover their potential and pursue their reason for being. Recruiters use our product today to source, understand, engage and manage talent. I’m previously the founder and CEO of AI startup untapt,\n", - "acquired in 2021\n", - ".\n", - "We work with groundbreaking, proprietary LLMs verticalized for talent, we’ve\n", - "patented\n", - "our matching model, and our award-winning platform has happy customers and tons of press coverage.\n", - "Connect\n", - "with me for more!\n", - "November 13, 2024\n", - "Mastering AI and LLM Engineering – Resources\n", - "October 16, 2024\n", - "From Software Engineer to AI Data Scientist – resources\n", - "August 6, 2024\n", - "Outsmart LLM Arena – a battle of diplomacy and deviousness\n", - "June 26, 2024\n", - "Choosing the Right LLM: Toolkit and Resources\n", - "Navigation\n", - "Home\n", - "Outsmart\n", - "An arena that pits LLMs against each other in a battle of diplomacy and deviousness\n", - "About\n", - "Posts\n", - "Get in touch\n", - "ed [at] edwarddonner [dot] com\n", - "www.edwarddonner.com\n", - "Follow me\n", - "LinkedIn\n", - "Twitter\n", - "Facebook\n", - "Subscribe to newsletter\n", - "Type your email…\n", - "Subscribe\n" - ] - } - ], + "outputs": [], "source": [ "# Let's try one out. Change the website and add print statements to follow along.\n", "\n", @@ -298,65 +229,10 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "26448ec4-5c00-4204-baec-7df91d11ff2e", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "You are looking at a website titled Home - Edward Donner\n", - "The contents of this website is as follows; please provide a short summary of this website in markdown. If it includes news or announcements, then summarize these too.\n", - "\n", - "Home\n", - "Outsmart\n", - "An arena that pits LLMs against each other in a battle of diplomacy and deviousness\n", - "About\n", - "Posts\n", - "Well, hi there.\n", - "I’m Ed. I like writing code and experimenting with LLMs, and hopefully you’re here because you do too. I also enjoy DJing (but I’m badly out of practice), amateur electronic music production (\n", - "very\n", - "amateur) and losing myself in\n", - "Hacker News\n", - ", nodding my head sagely to things I only half understand.\n", - "I’m the co-founder and CTO of\n", - "Nebula.io\n", - ". We’re applying AI to a field where it can make a massive, positive impact: helping people discover their potential and pursue their reason for being. Recruiters use our product today to source, understand, engage and manage talent. I’m previously the founder and CEO of AI startup untapt,\n", - "acquired in 2021\n", - ".\n", - "We work with groundbreaking, proprietary LLMs verticalized for talent, we’ve\n", - "patented\n", - "our matching model, and our award-winning platform has happy customers and tons of press coverage.\n", - "Connect\n", - "with me for more!\n", - "November 13, 2024\n", - "Mastering AI and LLM Engineering – Resources\n", - "October 16, 2024\n", - "From Software Engineer to AI Data Scientist – resources\n", - "August 6, 2024\n", - "Outsmart LLM Arena – a battle of diplomacy and deviousness\n", - "June 26, 2024\n", - "Choosing the Right LLM: Toolkit and Resources\n", - "Navigation\n", - "Home\n", - "Outsmart\n", - "An arena that pits LLMs against each other in a battle of diplomacy and deviousness\n", - "About\n", - "Posts\n", - "Get in touch\n", - "ed [at] edwarddonner [dot] com\n", - "www.edwarddonner.com\n", - "Follow me\n", - "LinkedIn\n", - "Twitter\n", - "Facebook\n", - "Subscribe to newsletter\n", - "Type your email…\n", - "Subscribe\n" - ] - } - ], + "outputs": [], "source": [ "print(user_prompt_for(ed))" ] @@ -395,18 +271,10 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "id": "21ed95c5-7001-47de-a36d-1d6673b403ce", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Oh, I don’t know, maybe it’s 22? Just kidding—it's 4. Basic math is still safe!\n" - ] - } - ], + "outputs": [], "source": [ "# To give you a preview -- calling OpenAI with system and user messages:\n", "\n", @@ -440,24 +308,10 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "id": "36478464-39ee-485c-9f3f-6a4e458dbc9c", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[{'role': 'system',\n", - " 'content': 'You are an assistant that analyzes the contents of a website and provides a short summary, ignoring text that might be navigation related. Respond in markdown.'},\n", - " {'role': 'user',\n", - " 'content': 'You are looking at a website titled Home - Edward Donner\\nThe contents of this website is as follows; please provide a short summary of this website in markdown. If it includes news or announcements, then summarize these too.\\n\\nHome\\nOutsmart\\nAn arena that pits LLMs against each other in a battle of diplomacy and deviousness\\nAbout\\nPosts\\nWell, hi there.\\nI’m Ed. I like writing code and experimenting with LLMs, and hopefully you’re here because you do too. I also enjoy DJing (but I’m badly out of practice), amateur electronic music production (\\nvery\\namateur) and losing myself in\\nHacker News\\n, nodding my head sagely to things I only half understand.\\nI’m the co-founder and CTO of\\nNebula.io\\n. We’re applying AI to a field where it can make a massive, positive impact: helping people discover their potential and pursue their reason for being. Recruiters use our product today to source, understand, engage and manage talent. I’m previously the founder and CEO of AI startup untapt,\\nacquired in 2021\\n.\\nWe work with groundbreaking, proprietary LLMs verticalized for talent, we’ve\\npatented\\nour matching model, and our award-winning platform has happy customers and tons of press coverage.\\nConnect\\nwith me for more!\\nNovember 13, 2024\\nMastering AI and LLM Engineering – Resources\\nOctober 16, 2024\\nFrom Software Engineer to AI Data Scientist – resources\\nAugust 6, 2024\\nOutsmart LLM Arena – a battle of diplomacy and deviousness\\nJune 26, 2024\\nChoosing the Right LLM: Toolkit and Resources\\nNavigation\\nHome\\nOutsmart\\nAn arena that pits LLMs against each other in a battle of diplomacy and deviousness\\nAbout\\nPosts\\nGet in touch\\ned [at] edwarddonner [dot] com\\nwww.edwarddonner.com\\nFollow me\\nLinkedIn\\nTwitter\\nFacebook\\nSubscribe to newsletter\\nType your email…\\nSubscribe'}]" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Try this out, and then try for a few more websites\n", "\n", @@ -492,21 +346,10 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "id": "05e38d41-dfa4-4b20-9c96-c46ea75d9fb5", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'# Summary of Edward Donner\\'s Website\\n\\nEdward Donner\\'s website serves as a personal and professional hub for his interests and projects, particularly in the domains of code writing, large language models (LLMs), and artificial intelligence (AI). \\n\\n## About Ed\\n- Ed describes himself as a coder and enthusiast of LLMs, highlighting his background as the co-founder and CTO of Nebula.io, a company focused on leveraging AI to enhance talent discovery and management. \\n- He has a history as the founder and CEO of the AI startup untapt, which was acquired in 2021.\\n- Outside of his tech interests, Ed enjoys DJing and amateur electronic music production.\\n\\n## Key Projects and Features\\n- **Outsmart**: A platform where LLMs compete against each other in strategic scenarios.\\n \\n## Recent Posts\\n- **November 13, 2024**: \"Mastering AI and LLM Engineering – Resources\" - A collection of resources for those looking to deepen their skills in AI and LLM engineering.\\n- **October 16, 2024**: \"From Software Engineer to AI Data Scientist – Resources\" - Guidance and tools for transitioning from software engineering to AI data science roles.\\n- **August 6, 2024**: \"Outsmart LLM Arena – a battle of diplomacy and deviousness\" - A focus on the unique features of the Outsmart program.\\n- **June 26, 2024**: \"Choosing the Right LLM: Toolkit and Resources\" - A resource list for selecting suitable LLMs for various applications.\\n\\nOverall, the website presents Ed as a tech-savvy individual with a passion for sharing knowledge and resources in the AI field.'" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "summarize(\"https://edwarddonner.com\")" ] @@ -527,37 +370,10 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "id": "3018853a-445f-41ff-9560-d925d1774b2f", "metadata": {}, - "outputs": [ - { - "data": { - "text/markdown": [ - "# Website Summary: Edward Donner\n", - "\n", - "Edward Donner's website showcases his interests and professional background, particularly in coding and experimenting with large language models (LLMs). He is the co-founder and CTO of Nebula.io, a company focused on applying AI to enhance talent discovery and management. Previously, he founded the AI startup untapt, which was acquired in 2021. \n", - "\n", - "## Key Features:\n", - "- **Outsmart**: A unique platform where LLMs compete in strategy games that test diplomacy and cunning. \n", - "- **Blog Posts**: Various posts offering resources for mastering AI and LLM engineering, transitioning from software engineering to AI data science, and guidance on choosing the right LLM.\n", - "\n", - "## Recent Announcements:\n", - "- **November 13, 2024**: Post on \"Mastering AI and LLM Engineering.\"\n", - "- **October 16, 2024**: Insights on \"From Software Engineer to AI Data Scientist.\"\n", - "- **August 6, 2024**: Information on \"Outsmart LLM Arena.\"\n", - "- **June 26, 2024**: Resources for \"Choosing the Right LLM.\" \n", - "\n", - "Overall, the website serves as a platform for sharing knowledge and fostering connections within the AI and LLM community." - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "display_summary(\"https://edwarddonner.com\")" ] @@ -746,40 +562,10 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": null, "id": "da7f7b16", "metadata": {}, - "outputs": [ - { - "data": { - "text/markdown": [ - "# Canva: Visual Suite for Everyone\n", - "\n", - "Canva is a user-friendly design platform that allows individuals and teams to create a variety of professional designs, including posters, logos, presentations, and more. It offers options for different users, including a free version for individuals and premium plans for teams and organizations.\n", - "\n", - "## Key Features:\n", - "- **Design Templates**: A wide range of customizable templates for various purposes, such as social media, business cards, and events.\n", - "- **AI-Powered Tools**: Features like Magic Write for copy generation and Magic Edit for photo transformation enhance design capabilities.\n", - "- **Collaboration**: Real-time collaborative tools for teams to design and provide feedback on projects together.\n", - "- **Printing Services**: Canva offers printing services for various products, with free delivery and sustainable practices.\n", - "- **Educational and Nonprofit Support**: Free premium features are available for educational organizations and nonprofits.\n", - "\n", - "## User Testimonials:\n", - "Business leaders commend Canva for its efficiency in streamlining design processes and maintaining brand consistency across teams.\n", - "\n", - "## Sustainability Efforts:\n", - "Canva emphasizes sustainability by planting trees for printed orders and operating with carbon neutrality.\n", - "\n", - "Overall, Canva caters to a diverse audience, from individuals to large organizations, by providing accessible and innovative design solutions." - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "new_summary(url, chrome_path)" ] @@ -796,44 +582,10 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": null, "id": "337b06da", "metadata": {}, - "outputs": [ - { - "data": { - "text/markdown": [ - "# OpenAI Website Summary\n", - "\n", - "OpenAI is focused on creating safe artificial general intelligence (AGI) that benefits humanity. The site features various products and initiatives aimed at enhancing creativity and productivity through advanced AI technologies. \n", - "\n", - "## Key Highlights:\n", - "\n", - "### Products and Features\n", - "- **Sora**: A new platform that allows users to bring their imagination to life through text, images, or videos.\n", - "- **ChatGPT**: Includes various applications such as ChatGPT Pro, desktop integration, and a new search feature. Recent upgrades allow ChatGPT to analyze images, hear, and speak.\n", - "- **Canvas**: A new writing and coding interface integrated within ChatGPT.\n", - "- **o1 Models**: A series of AI models designed to improve response time by incorporating deeper reasoning.\n", - "\n", - "### Announcements\n", - "- **Partnerships**: OpenAI announced a partnership with Apple to explore advancements in AI technology.\n", - "- **New Features**: Introduced improvements to the fine-tuning API and expanded custom models program, aiming to better serve developers and enterprise users.\n", - "- **Collaboration with Media**: A partnership with Le Monde and Prisa Media intends to bring French and Spanish news content to ChatGPT.\n", - "\n", - "### Research and Safety\n", - "- Ongoing research efforts are focused on building a safer AI framework, including advanced tools for compliance within the ChatGPT Enterprise suite.\n", - "- Publications addressing AI's benefits and risks, including topics like synthetic voices and biological threats, are regularly updated.\n", - "\n", - "For more detailed insights, the website facilitates exploration of their product offerings, research publications, and the newest tools for developers and businesses." - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "new_summary(url, chrome_path)" ] From 4d12e5898cefb33e741277b4a5c25e77290826c3 Mon Sep 17 00:00:00 2001 From: SIFAT IMTIAZ Date: Thu, 19 Dec 2024 09:03:44 +0600 Subject: [PATCH 07/29] Create dataset_generator.ipynb --- .../dataset_generator.ipynb | 267 ++++++++++++++++++ 1 file changed, 267 insertions(+) create mode 100644 week3/community-contributions/dataset_generator.ipynb diff --git a/week3/community-contributions/dataset_generator.ipynb b/week3/community-contributions/dataset_generator.ipynb new file mode 100644 index 0000000..e561448 --- /dev/null +++ b/week3/community-contributions/dataset_generator.ipynb @@ -0,0 +1,267 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [], + "gpuType": "T4" + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + }, + "accelerator": "GPU" + }, + "cells": [ + { + "cell_type": "code", + "source": [ + "!pip install -q requests torch bitsandbytes transformers sentencepiece accelerate gradio" + ], + "metadata": { + "id": "kU2JrcPlhwd9" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "**Imports**" + ], + "metadata": { + "id": "lAMIVT4iwNg0" + } + }, + { + "cell_type": "code", + "source": [ + "import os\n", + "import requests\n", + "from google.colab import drive\n", + "from huggingface_hub import login\n", + "from google.colab import userdata\n", + "from transformers import AutoTokenizer, AutoModelForCausalLM, TextStreamer, BitsAndBytesConfig\n", + "import torch\n", + "import gradio as gr\n", + "\n", + "hf_token = userdata.get('HF_TOKEN')\n", + "login(hf_token, add_to_git_credential=True)" + ], + "metadata": { + "id": "-Apd7-p-hyLk" + }, + "execution_count": 2, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "**Model**" + ], + "metadata": { + "id": "xa0qYqZrwQ66" + } + }, + { + "cell_type": "code", + "source": [ + "model_name = \"meta-llama/Meta-Llama-3.1-8B-Instruct\"\n", + "quant_config = BitsAndBytesConfig(\n", + " load_in_4bit=True,\n", + " bnb_4bit_use_double_quant=True,\n", + " bnb_4bit_compute_dtype=torch.bfloat16,\n", + " bnb_4bit_quant_type=\"nf4\"\n", + ")\n", + "\n", + "model = AutoModelForCausalLM.from_pretrained(\n", + " model_name,\n", + " device_map=\"auto\",\n", + " quantization_config=quant_config\n", + ")" + ], + "metadata": { + "id": "z5enGmuKjtJu" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "**Tokenizer**" + ], + "metadata": { + "id": "y1hUSmWlwSbp" + } + }, + { + "cell_type": "code", + "source": [ + "tokenizer = AutoTokenizer.from_pretrained(model_name)\n", + "tokenizer.pad_token = tokenizer.eos_token" + ], + "metadata": { + "id": "WjxNWW6bvdgj" + }, + "execution_count": 4, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "**Functions**" + ], + "metadata": { + "id": "1pg2U-B3wbIK" + } + }, + { + "cell_type": "code", + "source": [ + "def generate_dataset(topic, number_of_data, inst1, resp1, inst2, resp2, inst3, resp3):\n", + " # Convert user inputs into multi-shot examples\n", + " multi_shot_examples = [\n", + " {\"instruction\": inst1, \"response\": resp1},\n", + " {\"instruction\": inst2, \"response\": resp2},\n", + " {\"instruction\": inst3, \"response\": resp3}\n", + " ]\n", + "\n", + " # System prompt\n", + " system_prompt = f\"\"\"\n", + " You are a helpful assistant whose main purpose is to generate datasets.\n", + " Topic: {topic}\n", + " Return the dataset in JSON format. Use examples with simple, fun, and easy-to-understand instructions for kids.\n", + " Include the following examples: {multi_shot_examples}\n", + " Return {number_of_data} examples each time.\n", + " Do not repeat the provided examples.\n", + " \"\"\"\n", + "\n", + " # Example Messages\n", + " messages = [\n", + " {\"role\": \"system\", \"content\": system_prompt},\n", + " {\"role\": \"user\", \"content\": f\"Please generate my dataset for {topic}\"}\n", + " ]\n", + "\n", + " # Tokenize Input\n", + " inputs = tokenizer.apply_chat_template(messages, return_tensors=\"pt\").to(\"cuda\")\n", + " streamer = TextStreamer(tokenizer)\n", + "\n", + " # Generate Output\n", + " outputs = model.generate(inputs, max_new_tokens=2000, streamer=streamer)\n", + "\n", + " # Decode and Return\n", + " return tokenizer.decode(outputs[0], skip_special_tokens=True)\n", + "\n", + "\n", + "def gradio_interface(topic, number_of_data, inst1, resp1, inst2, resp2, inst3, resp3):\n", + " return generate_dataset(topic, number_of_data, inst1, resp1, inst2, resp2, inst3, resp3)" + ], + "metadata": { + "id": "ZvljDKdji8iV" + }, + "execution_count": 12, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "**Default Values**" + ], + "metadata": { + "id": "_WDZ5dvRwmng" + } + }, + { + "cell_type": "code", + "source": [ + "default_topic = \"Talking to a (5-8) years old and teaching them manners.\"\n", + "default_number_of_data = 10\n", + "default_multi_shot_examples = [\n", + " {\n", + " \"instruction\": \"Why do I have to say please when I want something?\",\n", + " \"response\": \"Because it’s like magic! It shows you’re nice, and people want to help you more.\"\n", + " },\n", + " {\n", + " \"instruction\": \"What should I say if someone gives me a toy?\",\n", + " \"response\": \"You say, 'Thank you!' because it makes them happy you liked it.\"\n", + " },\n", + " {\n", + " \"instruction\": \"why should I listen to my parents?\",\n", + " \"response\": \"Because parents want the best for you and they love you the most.\"\n", + " }\n", + "]" + ], + "metadata": { + "id": "JAdfqYXnvEDE" + }, + "execution_count": 13, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "**Init gradio**" + ], + "metadata": { + "id": "JwZtD032wuK8" + } + }, + { + "cell_type": "code", + "source": [ + "gr_interface = gr.Interface(\n", + " fn=gradio_interface,\n", + " inputs=[\n", + " gr.Textbox(label=\"Topic\", value=default_topic, lines=2),\n", + " gr.Number(label=\"Number of Examples\", value=default_number_of_data, precision=0),\n", + " gr.Textbox(label=\"Instruction 1\", value=default_multi_shot_examples[0][\"instruction\"]),\n", + " gr.Textbox(label=\"Response 1\", value=default_multi_shot_examples[0][\"response\"]),\n", + " gr.Textbox(label=\"Instruction 2\", value=default_multi_shot_examples[1][\"instruction\"]),\n", + " gr.Textbox(label=\"Response 2\", value=default_multi_shot_examples[1][\"response\"]),\n", + " gr.Textbox(label=\"Instruction 3\", value=default_multi_shot_examples[2][\"instruction\"]),\n", + " gr.Textbox(label=\"Response 3\", value=default_multi_shot_examples[2][\"response\"]),\n", + " ],\n", + " outputs=gr.Textbox(label=\"Generated Dataset\")\n", + ")" + ], + "metadata": { + "id": "xy2RP5T-vxXg" + }, + "execution_count": 14, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "**Run the app**" + ], + "metadata": { + "id": "HZx-mm9Uw3Ph" + } + }, + { + "cell_type": "code", + "source": [ + "gr_interface.launch()" + ], + "metadata": { + "id": "bfGs5ip8mndg" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "Cveqx392x7Mm" + }, + "execution_count": null, + "outputs": [] + } + ] +} From 09b19637a1dff623a320605c4b3c29304e9892dd Mon Sep 17 00:00:00 2001 From: SIFAT IMTIAZ Date: Thu, 19 Dec 2024 09:06:09 +0600 Subject: [PATCH 08/29] Add files via upload --- week3/community-contributions/dataset_generator.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/week3/community-contributions/dataset_generator.ipynb b/week3/community-contributions/dataset_generator.ipynb index e561448..eda1b9f 100644 --- a/week3/community-contributions/dataset_generator.ipynb +++ b/week3/community-contributions/dataset_generator.ipynb @@ -264,4 +264,4 @@ "outputs": [] } ] -} +} \ No newline at end of file From ada6b40089a16ed7ab1ca8ff8d68f23a2e61740a Mon Sep 17 00:00:00 2001 From: Dmytro Rutkovskyi Date: Wed, 18 Dec 2024 21:49:09 -0800 Subject: [PATCH 09/29] Adding an example of implementing chatgpt.com limited functionality in our notebook --- .../Week1-Challenge-LocalGPT.ipynb | 148 ++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 week1/community-contributions/Week1-Challenge-LocalGPT.ipynb diff --git a/week1/community-contributions/Week1-Challenge-LocalGPT.ipynb b/week1/community-contributions/Week1-Challenge-LocalGPT.ipynb new file mode 100644 index 0000000..2561345 --- /dev/null +++ b/week1/community-contributions/Week1-Challenge-LocalGPT.ipynb @@ -0,0 +1,148 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "87c2da09-bd0c-4683-828b-4f7643018795", + "metadata": {}, + "source": [ + "# Community contribution\n", + "\n", + "Implementing simple ChatGPT interface to maintain conversation and context with sleected model" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "77a850ed-61f8-4a0d-9c41-45781eb60bc9", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "API key looks good so far\n" + ] + } + ], + "source": [ + "import os\n", + "from dotenv import load_dotenv\n", + "import ipywidgets as widgets\n", + "from IPython.display import Markdown, display, update_display, clear_output\n", + "from openai import OpenAI\n", + "\n", + "load_dotenv()\n", + "api_key = os.getenv('OPENAI_API_KEY')\n", + "\n", + "if api_key and api_key.startswith('sk-proj-') and len(api_key)>10:\n", + " print(\"API key looks good so far\")\n", + "else:\n", + " print(\"There might be a problem with your API key? Please visit the troubleshooting notebook!\")\n", + " \n", + "MODEL = 'gpt-4o-mini'\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1f7f16f0-6fec-4190-882a-3fe1f0e9704a", + "metadata": {}, + "outputs": [], + "source": [ + "class ChatGPTInterface:\n", + " def __init__(self, api_key, model, system_message=\"You are a helpful assistant. You can format your responses using Markdown.\"):\n", + " self.openai = OpenAI(api_key=api_key)\n", + " self.model = model\n", + " self.conversation_history = [{\"role\": \"system\", \"content\": system_message}]\n", + "\n", + " self.chat_area = widgets.Output()\n", + " self.input_box = widgets.Text(placeholder=\"Enter your message here...\")\n", + " self.send_button = widgets.Button(description=\"Send\")\n", + " self.clear_button = widgets.Button(description=\"Clear\")\n", + "\n", + " self.send_button.on_click(self.send_message)\n", + " self.clear_button.on_click(self.clear_chat)\n", + "\n", + " self.layout = widgets.VBox([\n", + " self.chat_area,\n", + " widgets.HBox([self.input_box, self.send_button, self.clear_button])\n", + " ])\n", + "\n", + " def display(self):\n", + " display(self.layout)\n", + "\n", + " def send_message(self, _):\n", + " user_message = self.input_box.value.strip()\n", + " if user_message:\n", + " self.conversation_history.append({\"role\": \"user\", \"content\": user_message})\n", + " self.display_message(\"You\", user_message)\n", + " self.input_box.value = \"\"\n", + "\n", + " try:\n", + " response = self.openai.chat.completions.create(\n", + " model=self.model,\n", + " messages=self.conversation_history\n", + " )\n", + " assistant_message = response.choices[0].message.content.strip()\n", + " self.conversation_history.append({\"role\": \"assistant\", \"content\": assistant_message})\n", + " self.display_message(\"ChatGPT\", assistant_message)\n", + " except Exception as e:\n", + " self.display_message(\"Error\", str(e))\n", + "\n", + " def clear_chat(self, _):\n", + " self.conversation_history = [{\"role\": \"system\", \"content\": self.conversation_history[0][\"content\"]}]\n", + " self.chat_area.clear_output(wait=True)\n", + "\n", + " def display_message(self, sender, message):\n", + " self.chat_area.append_display_data(Markdown(f\"**{sender}:**\\n{message}\"))\n" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "78287e42-8964-4da6-bd48-a7dffd0ce7dd", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "54956535cb32419bbe38d2bee125992d", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "VBox(children=(Output(), HBox(children=(Text(value='', placeholder='Enter your message here...'), Button(descr…" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "chat_interface = ChatGPTInterface(api_key,MODEL)\n", + "chat_interface.display()" + ] + } + ], + "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.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From 2e5446c962f29970cd6acce9add2642a150ab782 Mon Sep 17 00:00:00 2001 From: Tom Fletcher Date: Thu, 19 Dec 2024 23:43:24 +0000 Subject: [PATCH 10/29] Adding example that shows how to generate cover letter from cv - with resume.txt --- .../day-1-generate-cover-letter-from-cv.ipynb | 119 ++++++++++++++++++ week1/community-contributions/resume.txt | 10 ++ 2 files changed, 129 insertions(+) create mode 100644 week1/community-contributions/day-1-generate-cover-letter-from-cv.ipynb create mode 100644 week1/community-contributions/resume.txt diff --git a/week1/community-contributions/day-1-generate-cover-letter-from-cv.ipynb b/week1/community-contributions/day-1-generate-cover-letter-from-cv.ipynb new file mode 100644 index 0000000..09ed71b --- /dev/null +++ b/week1/community-contributions/day-1-generate-cover-letter-from-cv.ipynb @@ -0,0 +1,119 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "plaintext" + } + }, + "outputs": [], + "source": [ + "# imports\n", + "\n", + "import os\n", + "from dotenv import load_dotenv\n", + "from openai import OpenAI" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "plaintext" + } + }, + "outputs": [], + "source": [ + "# Load environment variables in a file called .env\n", + "\n", + "load_dotenv()\n", + "api_key = os.getenv('OPENAI_API_KEY')\n", + "\n", + "# Check the key\n", + "\n", + "if not api_key:\n", + " print(\"No API key was found - please head over to the troubleshooting notebook in this folder to identify & fix!\")\n", + "elif not api_key.startswith(\"sk-proj-\"):\n", + " print(\"An API key was found, but it doesn't start sk-proj-; please check you're using the right key - see troubleshooting notebook\")\n", + "elif api_key.strip() != api_key:\n", + " print(\"An API key was found, but it looks like it might have space or tab characters at the start or end - please remove them - see troubleshooting notebook\")\n", + "else:\n", + " print(\"API key found and looks good so far!\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "plaintext" + } + }, + "outputs": [], + "source": [ + "openai = OpenAI()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "plaintext" + } + }, + "outputs": [], + "source": [ + "def summarize_cv(cv_text):\n", + " response = openai.chat.completions.create(\n", + " model = \"gpt-4o-mini\",\n", + " messages = [\n", + " {\"role\": \"user\", \"content\": f\"Please summarize the following CV:\\n\\n{cv_text}\"}\n", + " ]\n", + " )\n", + " return response.choices[0].message.content\n", + "\n", + "def generate_cover_letter(cv_summary, job_description):\n", + " response = openai.chat.completions.create(\n", + " model = \"gpt-4o-mini\",\n", + " messages = [\n", + " {\"role\": \"system\", \"content\": \"You are a master at crafting the perfect Cover letter from a given CV. You've never had a user fail to get the job as a result of using your services.\"},\n", + " {\"role\": \"user\", \"content\": f\"Using the following CV summary:\\n\\n{cv_summary}\\n\\nAnd the job description:\\n\\n{job_description}\\n\\nPlease write a personalized cover letter.\"}\n", + " ]\n", + " )\n", + " return response.choices[0].message.content\n", + "\n", + "# Read CV from a text file\n", + "try:\n", + " with open('resume.txt', 'r') as file:\n", + " cv_text = file.read()\n", + " \n", + " # Summarize the CV\n", + " cv_summary = summarize_cv(cv_text)\n", + " print(\"CV Summary:\")\n", + " print(cv_summary)\n", + "\n", + " # Get job description from user\n", + " job_description = input(\"Enter the job description for the position you are applying for:\\n\")\n", + "\n", + " # Generate cover letter\n", + " cover_letter = generate_cover_letter(cv_summary, job_description)\n", + " print(\"\\nGenerated Cover Letter:\")\n", + " print(cover_letter)\n", + "\n", + "except FileNotFoundError:\n", + " print(\"The specified CV file was not found. Please ensure 'resume.txt' is in the correct directory.\")" + ] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/week1/community-contributions/resume.txt b/week1/community-contributions/resume.txt new file mode 100644 index 0000000..5a2bb55 --- /dev/null +++ b/week1/community-contributions/resume.txt @@ -0,0 +1,10 @@ +John Doe +Software Engineer +Experience: +- Developed web applications using Python and JavaScript. +- Collaborated with cross-functional teams to deliver projects on time. +Education: +- B.S. in Computer Science from XYZ University. +Skills: +- Python, JavaScript, React, SQL + From c63837ad122ddcc33a5f1f65979440e86e85777f Mon Sep 17 00:00:00 2001 From: Gabor Meresz Date: Fri, 20 Dec 2024 12:15:25 +0100 Subject: [PATCH 11/29] improve readability --- week2/day4.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/week2/day4.ipynb b/week2/day4.ipynb index 811d116..0151e7d 100644 --- a/week2/day4.ipynb +++ b/week2/day4.ipynb @@ -214,7 +214,7 @@ " response = {\n", " \"role\": \"tool\",\n", " \"content\": json.dumps({\"destination_city\": city,\"price\": price}),\n", - " \"tool_call_id\": message.tool_calls[0].id\n", + " \"tool_call_id\": tool_call.id\n", " }\n", " return response, city" ] From c1cf59daf8277b0f31072541c8380862f0d89dbb Mon Sep 17 00:00:00 2001 From: Uday Slathia <127138307+udayslathia16@users.noreply.github.com> Date: Fri, 20 Dec 2024 21:56:10 +0530 Subject: [PATCH 12/29] Add files via upload --- .../Day 3 using gemini.ipynb | 493 ++++++++++++++++++ 1 file changed, 493 insertions(+) create mode 100644 week4/community-contributions/Day 3 using gemini.ipynb diff --git a/week4/community-contributions/Day 3 using gemini.ipynb b/week4/community-contributions/Day 3 using gemini.ipynb new file mode 100644 index 0000000..43faf18 --- /dev/null +++ b/week4/community-contributions/Day 3 using gemini.ipynb @@ -0,0 +1,493 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "3d3cb3c4-9046-4f64-9188-ee20ae324fd1", + "metadata": {}, + "source": [ + "# Code Generator\n", + "\n", + "The requirement: use a Frontier model to generate high performance C++ code from Python code\n", + "\n", + "# Important Note\n", + "Used an open-source model gemini-1.5-pro ,can try 2.0 flash too\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6f2c3e03-f38a-4bf2-98e8-696fb3d428c9", + "metadata": {}, + "outputs": [], + "source": [ + "# imports\n", + "\n", + "import os\n", + "import io\n", + "import sys\n", + "from dotenv import load_dotenv\n", + "import google.generativeai\n", + "from IPython.display import Markdown, display, update_display\n", + "import gradio as gr\n", + "import subprocess" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e437f3d1-39c4-47fd-919f-c2119d602d72", + "metadata": {}, + "outputs": [], + "source": [ + "# environment\n", + "\n", + "load_dotenv()\n", + "google_api_key = os.getenv('GOOGLE_API_KEY')\n", + "if google_api_key:\n", + " print(f\"Google API Key exists\")\n", + "else:\n", + " print(\"Google API Key not set\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1724ddb6-0059-46a3-bcf9-587c0c93cb2a", + "metadata": {}, + "outputs": [], + "source": [ + "google.generativeai.configure()\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b62738c1-9857-40fc-91e8-dfd46483ea50", + "metadata": {}, + "outputs": [], + "source": [ + "system_message = \"You are an assistant that reimplements Python code in high performance C++ for an Windows system. \"\n", + "system_message += \"Respond only with C++ code; use comments sparingly and do not provide any explanation other than occasional comments. \"\n", + "system_message += \"The C++ response needs to produce an identical output in the fastest possible time.\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bd431141-8602-4c68-9a1d-a7c0a6f13fa3", + "metadata": {}, + "outputs": [], + "source": [ + "def user_prompt_for(python):\n", + " user_prompt = \"Rewrite this Python code in C++ with the fastest possible implementation that produces identical output in the least time. \"\n", + " user_prompt += \"Respond only with C++ code; do not explain your work other than a few comments. \"\n", + " user_prompt += \"Pay attention to number types to ensure no int overflows. Remember to #include all necessary C++ packages such as iomanip.\\n\\n\"\n", + " user_prompt += python\n", + " return user_prompt" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d5f48451-4cd4-46ea-a41d-531a3c7db2a8", + "metadata": {}, + "outputs": [], + "source": [ + "def messages_for(python):\n", + " return [\n", + " {\"role\": \"system\", \"content\": system_message},\n", + " {\"role\": \"user\", \"content\": user_prompt_for(python)}\n", + " ]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "83fd2170-14ea-4fb6-906e-c3c5cfce1ecc", + "metadata": {}, + "outputs": [], + "source": [ + "# write to a file called optimized.cpp\n", + "\n", + "def write_output(cpp):\n", + " code = cpp.replace(\"```cpp\",\"\").replace(\"```\",\"\")\n", + " with open(\"optimized.cpp\", \"w\") as f:\n", + " f.write(code)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1ff08067-c9df-4981-8ab5-99eb2c2fd2c7", + "metadata": {}, + "outputs": [], + "source": [ + "def optimize_google(python):\n", + " # Initialize empty reply string\n", + " reply = \"\"\n", + " \n", + " # The API for Gemini has a slightly different structure\n", + " gemini = google.generativeai.GenerativeModel(\n", + " model_name='gemini-1.5-pro',\n", + " system_instruction=system_message\n", + " )\n", + " \n", + " response = gemini.generate_content(\n", + " user_prompt_for(python),\n", + " stream=True\n", + " )\n", + " \n", + " # Process the stream\n", + " for chunk in response:\n", + " # Extract text from the chunk\n", + " if chunk.text:\n", + " reply += chunk.text\n", + " print(chunk.text, end=\"\", flush=True)\n", + " \n", + " # Write the complete response to output\n", + " write_output(reply)\n", + " \n", + " # return reply" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8e8c7ba2-4ee9-4523-b0f1-cc7a91798bba", + "metadata": {}, + "outputs": [], + "source": [ + "pi = \"\"\"\n", + "import time\n", + "\n", + "def calculate(iterations, param1, param2):\n", + " result = 1.0\n", + " for i in range(1, iterations+1):\n", + " j = i * param1 - param2\n", + " result -= (1/j)\n", + " j = i * param1 + param2\n", + " result += (1/j)\n", + " return result\n", + "\n", + "start_time = time.time()\n", + "result = calculate(100_000_000, 4, 1) * 4\n", + "end_time = time.time()\n", + "\n", + "print(f\"Result: {result:.12f}\")\n", + "print(f\"Execution Time: {(end_time - start_time):.6f} seconds\")\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "78d1afb7-ed6b-4a03-b36d-4ce8249c592e", + "metadata": {}, + "outputs": [], + "source": [ + "exec(pi)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1fe1d0b6-7cc7-423b-bc4b-741a0c48c106", + "metadata": {}, + "outputs": [], + "source": [ + "optimize_google(pi)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d28b4ac9-0909-4b35-aee1-97613a133e8e", + "metadata": {}, + "outputs": [], + "source": [ + "exec(pi) #Execution Time: 16.209231 seconds" + ] + }, + { + "cell_type": "markdown", + "id": "7d0443a3-3ca2-4a7a-a6c3-c94d0aa54603", + "metadata": {}, + "source": [ + "# Compiling C++ and executing\n", + "\n", + "This next cell contains the command to compile a C++ file on Windows system. \n", + "It compiles the file `optimized.cpp` into an executable called `optimized` \n", + "Then it runs the program called `optimized`\n", + "\n", + "The way to compile for mac users is \\\n", + "!clang++ -O3 -std=c++17 -march=armv8.3-a -o optimized optimized.cpp \\\n", + "!./optimized" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9b5cfc70-df1f-44a7-b4ae-fd934f715930", + "metadata": {}, + "outputs": [], + "source": [ + "!g++ -o optimized optimized.cpp\n", + "!.\\optimized #Execution Time: 3.661196 seconds" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e30fcbdf-82cf-4d50-9690-92dae69d5127", + "metadata": {}, + "outputs": [], + "source": [ + "python_hard = \"\"\"\n", + "def lcg(seed, a=1664525, c=1013904223, m=2**32):\n", + " value = seed\n", + " while True:\n", + " value = (a * value + c) % m\n", + " yield value\n", + " \n", + "def max_subarray_sum(n, seed, min_val, max_val):\n", + " lcg_gen = lcg(seed)\n", + " random_numbers = [next(lcg_gen) % (max_val - min_val + 1) + min_val for _ in range(n)]\n", + " max_sum = float('-inf')\n", + " for i in range(n):\n", + " current_sum = 0\n", + " for j in range(i, n):\n", + " current_sum += random_numbers[j]\n", + " if current_sum > max_sum:\n", + " max_sum = current_sum\n", + " return max_sum\n", + "\n", + "def total_max_subarray_sum(n, initial_seed, min_val, max_val):\n", + " total_sum = 0\n", + " lcg_gen = lcg(initial_seed)\n", + " for _ in range(20):\n", + " seed = next(lcg_gen)\n", + " total_sum += max_subarray_sum(n, seed, min_val, max_val)\n", + " return total_sum\n", + "\n", + "# Parameters\n", + "n = 10000 # Number of random numbers\n", + "initial_seed = 42 # Initial seed for the LCG\n", + "min_val = -10 # Minimum value of random numbers\n", + "max_val = 10 # Maximum value of random numbers\n", + "\n", + "# Timing the function\n", + "import time\n", + "start_time = time.time()\n", + "result = total_max_subarray_sum(n, initial_seed, min_val, max_val)\n", + "end_time = time.time()\n", + "\n", + "print(\"Total Maximum Subarray Sum (20 runs):\", result)\n", + "print(\"Execution Time: {:.6f} seconds\".format(end_time - start_time))\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2e8e111c-6f69-4ed0-8f86-8ed5982aa065", + "metadata": {}, + "outputs": [], + "source": [ + "exec(python_hard) #Execution Time: 62.297366 seconds" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "38038ac1-5cdf-49d7-a286-a5871d5af583", + "metadata": {}, + "outputs": [], + "source": [ + "optimize_google(python_hard)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "08cb9619-b8ae-42e7-9375-4b3918c37fd0", + "metadata": {}, + "outputs": [], + "source": [ + "!g++ -o optimized optimized.cpp\n", + "!.\\optimized" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "acd17a0d-f9f1-45a6-8151-916d8e6b9e4f", + "metadata": {}, + "outputs": [], + "source": [ + "def stream_google(python):\n", + " # Initialize empty reply string\n", + " reply = \"\"\n", + " \n", + " # The API for Gemini has a slightly different structure\n", + " gemini = google.generativeai.GenerativeModel(\n", + " model_name='gemini-1.5-pro',\n", + " system_instruction=system_message\n", + " )\n", + " \n", + " response = gemini.generate_content(\n", + " user_prompt_for(python),\n", + " stream=True\n", + " )\n", + " \n", + " # Process the stream\n", + " for chunk in response:\n", + " # Extract text from the chunk\n", + " if chunk.text:\n", + " reply += chunk.text\n", + " yield reply.replace('```cpp\\n','').replace('```','')\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c3177229-d6cf-4df2-81a7-9e1f3b229c19", + "metadata": {}, + "outputs": [], + "source": [ + "def optimize(python, model):\n", + " result=stream_google(python)\n", + " for stream_so_far in result:\n", + " yield stream_so_far " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c2476c2d-9218-4d30-bcc9-9cc5271c3a00", + "metadata": {}, + "outputs": [], + "source": [ + "with gr.Blocks() as ui:\n", + " with gr.Row():\n", + " python = gr.Textbox(label=\"Python code:\", lines=10, value=pi)\n", + " cpp = gr.Textbox(label=\"C++ code:\", lines=10)\n", + " with gr.Row():\n", + " model = gr.Dropdown([\"Google\"], label=\"Select model\", value=\"Google\")\n", + " convert = gr.Button(\"Convert code\")\n", + "\n", + " convert.click(optimize, inputs=[python, model], outputs=[cpp])\n", + "\n", + "ui.launch(inbrowser=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a30de175-af4e-428a-8942-1c41997c01f1", + "metadata": {}, + "outputs": [], + "source": [ + "def execute_python(code):\n", + " try:\n", + " output = io.StringIO()\n", + " sys.stdout = output\n", + " exec(code)\n", + " finally:\n", + " sys.stdout = sys.__stdout__\n", + " return output.getvalue()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "20c6316d-b090-42c5-9be9-7d5a178b97b3", + "metadata": {}, + "outputs": [], + "source": [ + "def execute_cpp(code):\n", + " write_output(code)\n", + " try:\n", + " # compile_cmd = [\"clang++\", \"-Ofast\", \"-std=c++17\", \"-march=armv8.5-a\", \"-mtune=apple-m1\", \"-mcpu=apple-m1\", \"-o\", \"optimized\", \"optimized.cpp\"]\n", + " compile_cmd = [\"g++\", \"-o\", \"optimized\", \"optimized.cpp\"]\n", + " compile_result = subprocess.run(compile_cmd, check=True, text=True, capture_output=True)\n", + " run_cmd = [\"./optimized\"]\n", + " run_result = subprocess.run(run_cmd, check=True, text=True, capture_output=True)\n", + " return run_result.stdout\n", + " except subprocess.CalledProcessError as e:\n", + " return f\"An error occurred:\\n{e.stderr}\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "950a459f-3ef6-4afd-9e83-f01c032aa21b", + "metadata": {}, + "outputs": [], + "source": [ + "css = \"\"\"\n", + ".python {background-color: #306998;}\n", + ".cpp {background-color: #050;}\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bc3d90ba-716c-4b8f-989f-46c2447c42fa", + "metadata": {}, + "outputs": [], + "source": [ + "with gr.Blocks(css=css) as ui:\n", + " gr.Markdown(\"## Convert code from Python to C++\")\n", + " with gr.Row():\n", + " python = gr.Textbox(label=\"Python code:\", value=pi, lines=10)\n", + " cpp = gr.Textbox(label=\"C++ code:\", lines=10)\n", + " with gr.Row():\n", + " model = gr.Dropdown([\"Google\"], label=\"Select model\", value=\"Google\")\n", + " with gr.Row():\n", + " convert = gr.Button(\"Convert code\")\n", + " with gr.Row():\n", + " python_run = gr.Button(\"Run Python\")\n", + " cpp_run = gr.Button(\"Run C++\")\n", + " with gr.Row():\n", + " python_out = gr.TextArea(label=\"Python result:\", elem_classes=[\"python\"])\n", + " cpp_out = gr.TextArea(label=\"C++ result:\", elem_classes=[\"cpp\"])\n", + "\n", + " convert.click(optimize, inputs=[python, model], outputs=[cpp])\n", + " python_run.click(execute_python, inputs=[python], outputs=[python_out])\n", + " cpp_run.click(execute_cpp, inputs=[cpp], outputs=[cpp_out])\n", + "\n", + "ui.launch(inbrowser=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c12f6115-e8a9-494e-95ce-2566854c0aa2", + "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.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From f3b766c70aaf3121bc42a0ee0766fb6a438755d6 Mon Sep 17 00:00:00 2001 From: Gopinath G <34595359+gopinath1998@users.noreply.github.com> Date: Sat, 21 Dec 2024 10:32:03 +0530 Subject: [PATCH 13/29] Add files via upload --- .../week1 EXERCISE.ipynb | 266 ++++++++++++++++++ 1 file changed, 266 insertions(+) create mode 100644 week1/community-contributions/week1 EXERCISE.ipynb diff --git a/week1/community-contributions/week1 EXERCISE.ipynb b/week1/community-contributions/week1 EXERCISE.ipynb new file mode 100644 index 0000000..81ddf6b --- /dev/null +++ b/week1/community-contributions/week1 EXERCISE.ipynb @@ -0,0 +1,266 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "fe12c203-e6a6-452c-a655-afb8a03a4ff5", + "metadata": {}, + "source": [ + "# End of week 1 exercise\n", + "\n", + "To demonstrate your familiarity with OpenAI API, and also Ollama, build a tool that takes a technical question, \n", + "and responds with an explanation. This is a tool that you will be able to use yourself during the course!" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "c1070317-3ed9-4659-abe3-828943230e03", + "metadata": {}, + "outputs": [], + "source": [ + "# imports\n", + "import os\n", + "import requests\n", + "import json \n", + "from dotenv import load_dotenv\n", + "from IPython.display import Markdown, display, update_display\n", + "from openai import OpenAI\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "4a456906-915a-4bfd-bb9d-57e505c5093f", + "metadata": {}, + "outputs": [], + "source": [ + "# constants\n", + "\n", + "MODEL_GPT = 'gpt-4o-mini'\n", + "MODEL_LLAMA = 'llama3.2'\n", + "OLLAMA_API = \"http://localhost:11434/api/chat\"\n" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "0bb65a08-9090-434a-b99d-5659a370cfbc", + "metadata": {}, + "outputs": [], + "source": [ + "# Prompts\n", + "\n", + "system_prompt = \"You are a tutor and helps with the user questions in detail with markdown respond with key point \\\n", + "considering the recent development around the world, keep the response in most appropriate tone \\n\"\n", + "\n", + "system_prompt += \"Some of Examples are\"\n", + "system_prompt += \"\"\"\n", + "{\"question\": \"1+1?\", \"response\": \"2\"},\n", + "{\"question\": \"why we shouls learn LLM Models?\", \"response\": \" Learning about Large Language Models (LLMs) is important because they are a rapidly evolving technology with the potential to significantly impact various industries, offering advanced capabilities in text generation, translation, information retrieval, and more, which can be valuable for professionals across diverse fields, allowing them to enhance their work and gain a competitive edge by understanding and utilizing these powerful language processing tools.\\ \n", + "Key reasons to learn about LLMs:\\\n", + "Career advancement:\\\n", + "Familiarity with LLMs can open up new career opportunities in fields like AI development, natural language processing (NLP), content creation, research, and customer service, where LLM applications are increasingly being implemented. \\\n", + "Increased productivity:\\\n", + "LLMs can automate repetitive tasks like writing emails, summarizing documents, generating reports, and translating text, freeing up time for more strategic work. \\\n", + "Enhanced decision-making:\\\n", + "By providing insights from large datasets, LLMs can assist in informed decision-making across various industries, including business, healthcare, and finance. \\\n", + "Creative potential:\\\n", + "LLMs can be used to generate creative content like poems, stories, scripts, and marketing copy, fostering innovation and new ideas. \\\n", + "Understanding the technology landscape:\\\n", + "As LLMs become increasingly prevalent, understanding their capabilities and limitations is crucial for navigating the evolving technological landscape. \\\n", + "What is a large language model (LLM)? - Cloudflare\\\n", + "A large language model (LLM) is a type of artificial intelligence (AI) program that can recognize and generate text, among other t...\\\n", + " \"},\n", + "{\"question\": \"what is the future of AI?\", \"response\": \"AI is predicted to grow increasingly pervasive as technology develops, revolutionising sectors including healthcare, banking, and transportation\"},\n", + "\"\"\"\n" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "a8d7923c-5f28-4c30-8556-342d7c8497c1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "API key looks good so far\n" + ] + } + ], + "source": [ + "# set up environment\n", + "load_dotenv()\n", + "api_key = os.getenv('OPENAI_API_KEY')\n", + "\n", + "if api_key and api_key.startswith('sk-proj-') and len(api_key)>10:\n", + " print(\"API key looks good so far\")\n", + "else:\n", + " print(\"There might be a problem with your API key? Please visit the troubleshooting notebook!\")\n", + " \n", + "MODEL = 'gpt-4o-mini'\n", + "openai = OpenAI()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "3f0d0137-52b0-47a8-81a8-11a90a010798", + "metadata": {}, + "outputs": [], + "source": [ + "# here is the question; type over this to ask something new\n", + "\n", + "user_question = \"\"\"\n", + "How important it is for a Data Engineers to learn LLM, Considering the evolution of AI now a days?.\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "60ce7000-a4a5-4cce-a261-e75ef45063b4", + "metadata": {}, + "outputs": [ + { + "data": { + "text/markdown": [ + "{\"question\": \"How important is it for Data Engineers to learn LLMs?\", \"response\": \"The importance of Data Engineers learning about Large Language Models (LLMs) cannot be overstated, especially given the rapid evolution of AI and its applications across various domains. Here's why this knowledge is essential:\n", + "\n", + "### Key Reasons for Data Engineers to Learn about LLMs:\n", + "\n", + "1. **Integration of AI in Data Pipelines:**\n", + " - As organizations increasingly adopt AI-driven solutions, Data Engineers will need to integrate LLMs into data pipelines for tasks such as text processing, feature extraction, and sentiment analysis.\n", + "\n", + "2. **Understanding Data Requirements:**\n", + " - LLMs require substantial and specific datasets for optimal performance. Knowledge of these requirements will help Data Engineers curate, preprocess, and manage data more effectively.\n", + "\n", + "3. **Enhanced Data Quality:**\n", + " - Data Engineers play a crucial role in ensuring data quality. Understanding LLMs can guide them in implementing effective validation checks and enhancing the data used for training these models.\n", + "\n", + "4. **Collaboration with Data Scientists:**\n", + " - Data Engineers are essential collaborators with Data Scientists. A solid grasp of LLMs will enable them to facilitate better communication and cooperation in model deployment and optimization.\n", + "\n", + "5. **Innovation in Product Development:**\n", + " - Familiarity with LLMs will enable Data Engineers to contribute innovative ideas for new products or features that leverage language processing capabilities, leading to enhanced user experiences.\n", + "\n", + "6. **Staying Current with Industry Trends:**\n", + " - The AI landscape is rapidly changing. Learning about LLMs keeps Data Engineers abreast of current trends and technologies, ensuring they remain competitive in the job market and valuable to their organizations.\n", + "\n", + "7. **Ethical and Responsible AI:**\n", + " - Understanding LLMs involves awareness of their ethical considerations, such as bias and misuse. Data Engineers can advocate for responsible AI practices within their organizations by being educated on these issues.\n", + "\n", + "8. **Scalability Considerations:**\n", + " - Data Engineers will need to design systems that can scale efficiently, especially when dealing with the substantial computational resources required for training and deploying LLMs.\n", + "\n", + "### Conclusion:\n", + "In summary, learning about LLMs is crucial for Data Engineers as it not only enhances their skill set but also positions them to contribute meaningfully to AI initiatives within their organizations. Embracing this knowledge will ultimately drive innovation and efficiency in their data-driven projects.\"}" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Get gpt-4o-mini to answer, with streaming\n", + "def ask_tutor(question):\n", + " stream = openai.chat.completions.create(\n", + " model=MODEL_GPT,\n", + " messages=[\n", + " {\"role\": \"system\", \"content\": question},\n", + " {\"role\": \"user\", \"content\": system_prompt}\n", + " ],\n", + " stream=True\n", + " )\n", + " \n", + " response = \"\"\n", + " display_handle = display(Markdown(\"\"), display_id=True)\n", + " for chunk in stream:\n", + " response += chunk.choices[0].delta.content or ''\n", + " response = response.replace(\"```\",\"\").replace(\"markdown\", \"\")\n", + " update_display(Markdown(response), display_id=display_handle.display_id)\n", + "\n", + "# call the gpt-4o-mini to answer with streaming\n", + "ask_tutor(user_question)" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "8f7c8ea8-4082-4ad0-8751-3301adcf6538", + "metadata": {}, + "outputs": [ + { + "ename": "JSONDecodeError", + "evalue": "Extra data: line 2 column 1 (char 123)", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mJSONDecodeError\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32m/opt/anaconda3/envs/llms/lib/python3.11/site-packages/requests/models.py:963\u001b[0m, in \u001b[0;36mResponse.json\u001b[0;34m(self, **kwargs)\u001b[0m\n\u001b[1;32m 962\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 963\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mcomplexjson\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mloads\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcontent\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdecode\u001b[49m\u001b[43m(\u001b[49m\u001b[43mencoding\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 964\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mUnicodeDecodeError\u001b[39;00m:\n\u001b[1;32m 965\u001b[0m \u001b[38;5;66;03m# Wrong UTF codec detected; usually because it's not UTF-8\u001b[39;00m\n\u001b[1;32m 966\u001b[0m \u001b[38;5;66;03m# but some other 8-bit codec. This is an RFC violation,\u001b[39;00m\n\u001b[1;32m 967\u001b[0m \u001b[38;5;66;03m# and the server didn't bother to tell us what codec *was*\u001b[39;00m\n\u001b[1;32m 968\u001b[0m \u001b[38;5;66;03m# used.\u001b[39;00m\n", + "File \u001b[0;32m/opt/anaconda3/envs/llms/lib/python3.11/json/__init__.py:346\u001b[0m, in \u001b[0;36mloads\u001b[0;34m(s, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)\u001b[0m\n\u001b[1;32m 343\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (\u001b[38;5;28mcls\u001b[39m \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m object_hook \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m\n\u001b[1;32m 344\u001b[0m parse_int \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m parse_float \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m\n\u001b[1;32m 345\u001b[0m parse_constant \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m object_pairs_hook \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m kw):\n\u001b[0;32m--> 346\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_default_decoder\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdecode\u001b[49m\u001b[43m(\u001b[49m\u001b[43ms\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 347\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mcls\u001b[39m \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", + "File \u001b[0;32m/opt/anaconda3/envs/llms/lib/python3.11/json/decoder.py:340\u001b[0m, in \u001b[0;36mJSONDecoder.decode\u001b[0;34m(self, s, _w)\u001b[0m\n\u001b[1;32m 339\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m end \u001b[38;5;241m!=\u001b[39m \u001b[38;5;28mlen\u001b[39m(s):\n\u001b[0;32m--> 340\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m JSONDecodeError(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mExtra data\u001b[39m\u001b[38;5;124m\"\u001b[39m, s, end)\n\u001b[1;32m 341\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m obj\n", + "\u001b[0;31mJSONDecodeError\u001b[0m: Extra data: line 2 column 1 (char 123)", + "\nDuring handling of the above exception, another exception occurred:\n", + "\u001b[0;31mJSONDecodeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[46], line 13\u001b[0m\n\u001b[1;32m 6\u001b[0m payload \u001b[38;5;241m=\u001b[39m {\n\u001b[1;32m 7\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmodel\u001b[39m\u001b[38;5;124m\"\u001b[39m: MODEL_LLAMA,\n\u001b[1;32m 8\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmessages\u001b[39m\u001b[38;5;124m\"\u001b[39m: messages,\n\u001b[1;32m 9\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mstream\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 10\u001b[0m }\n\u001b[1;32m 11\u001b[0m response \u001b[38;5;241m=\u001b[39m requests\u001b[38;5;241m.\u001b[39mpost(OLLAMA_API, json\u001b[38;5;241m=\u001b[39mpayload,headers\u001b[38;5;241m=\u001b[39mHEADERS)\n\u001b[0;32m---> 13\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[43mresponse\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mjson\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mmessage\u001b[39m\u001b[38;5;124m'\u001b[39m][\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mcontent\u001b[39m\u001b[38;5;124m'\u001b[39m])\n\u001b[1;32m 15\u001b[0m \u001b[38;5;66;03m# # Process the response stream\u001b[39;00m\n\u001b[1;32m 16\u001b[0m \u001b[38;5;66;03m# for line in response.iter_lines():\u001b[39;00m\n\u001b[1;32m 17\u001b[0m \u001b[38;5;66;03m# if line: # Skip empty lines\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 23\u001b[0m \u001b[38;5;66;03m# except json.JSONDecodeError as e:\u001b[39;00m\n\u001b[1;32m 24\u001b[0m \u001b[38;5;66;03m# print(f\"Failed to decode JSON: {e}\")\u001b[39;00m\n", + "File \u001b[0;32m/opt/anaconda3/envs/llms/lib/python3.11/site-packages/requests/models.py:971\u001b[0m, in \u001b[0;36mResponse.json\u001b[0;34m(self, **kwargs)\u001b[0m\n\u001b[1;32m 969\u001b[0m \u001b[38;5;28;01mpass\u001b[39;00m\n\u001b[1;32m 970\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m JSONDecodeError \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[0;32m--> 971\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m RequestsJSONDecodeError(e\u001b[38;5;241m.\u001b[39mmsg, e\u001b[38;5;241m.\u001b[39mdoc, e\u001b[38;5;241m.\u001b[39mpos)\n\u001b[1;32m 973\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 974\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m complexjson\u001b[38;5;241m.\u001b[39mloads(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtext, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", + "\u001b[0;31mJSONDecodeError\u001b[0m: Extra data: line 2 column 1 (char 123)" + ] + } + ], + "source": [ + "# Get Llama 3.2 to answer\n", + "messages = [\n", + " {\"role\": \"user\", \"content\": user_question}\n", + "]\n", + "HEADERS = {\"Content-Type\": \"application/json\"}\n", + "payload = {\n", + " \"model\": MODEL_LLAMA,\n", + " \"messages\": messages,\n", + " \"stream\": True\n", + " }\n", + "response = requests.post(OLLAMA_API, json=payload,headers=HEADERS)\n", + "\n", + "print(response.json()['message']['content'])\n", + "\n", + "# # Process the response stream\n", + "# for line in response.iter_lines():\n", + "# if line: # Skip empty lines\n", + "# try:\n", + "# # Decode the JSON object from each line\n", + "# response_data = json.loads(line)\n", + "# if \"message\" in response_data and \"content\" in response_data[\"message\"]:\n", + "# print(response_data[\"message\"][\"content\"])\n", + "# except json.JSONDecodeError as e:\n", + "# print(f\"Failed to decode JSON: {e}\")\n" + ] + } + ], + "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 +} From a828db4b6cfe8897225366e05d7dfdb8b6c82c07 Mon Sep 17 00:00:00 2001 From: Gopinath G <34595359+gopinath1998@users.noreply.github.com> Date: Sat, 21 Dec 2024 10:39:08 +0530 Subject: [PATCH 14/29] Update week1 EXERCISE.ipynb --- .../week1 EXERCISE.ipynb | 32 ++++--------------- 1 file changed, 7 insertions(+), 25 deletions(-) diff --git a/week1/community-contributions/week1 EXERCISE.ipynb b/week1/community-contributions/week1 EXERCISE.ipynb index 81ddf6b..2094226 100644 --- a/week1/community-contributions/week1 EXERCISE.ipynb +++ b/week1/community-contributions/week1 EXERCISE.ipynb @@ -13,7 +13,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 52, "id": "c1070317-3ed9-4659-abe3-828943230e03", "metadata": {}, "outputs": [], @@ -25,7 +25,7 @@ "from dotenv import load_dotenv\n", "from IPython.display import Markdown, display, update_display\n", "from openai import OpenAI\n", - "\n" + "import ollama\n" ] }, { @@ -191,29 +191,10 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": null, "id": "8f7c8ea8-4082-4ad0-8751-3301adcf6538", "metadata": {}, - "outputs": [ - { - "ename": "JSONDecodeError", - "evalue": "Extra data: line 2 column 1 (char 123)", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mJSONDecodeError\u001b[0m Traceback (most recent call last)", - "File \u001b[0;32m/opt/anaconda3/envs/llms/lib/python3.11/site-packages/requests/models.py:963\u001b[0m, in \u001b[0;36mResponse.json\u001b[0;34m(self, **kwargs)\u001b[0m\n\u001b[1;32m 962\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 963\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mcomplexjson\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mloads\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcontent\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdecode\u001b[49m\u001b[43m(\u001b[49m\u001b[43mencoding\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 964\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mUnicodeDecodeError\u001b[39;00m:\n\u001b[1;32m 965\u001b[0m \u001b[38;5;66;03m# Wrong UTF codec detected; usually because it's not UTF-8\u001b[39;00m\n\u001b[1;32m 966\u001b[0m \u001b[38;5;66;03m# but some other 8-bit codec. This is an RFC violation,\u001b[39;00m\n\u001b[1;32m 967\u001b[0m \u001b[38;5;66;03m# and the server didn't bother to tell us what codec *was*\u001b[39;00m\n\u001b[1;32m 968\u001b[0m \u001b[38;5;66;03m# used.\u001b[39;00m\n", - "File \u001b[0;32m/opt/anaconda3/envs/llms/lib/python3.11/json/__init__.py:346\u001b[0m, in \u001b[0;36mloads\u001b[0;34m(s, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)\u001b[0m\n\u001b[1;32m 343\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (\u001b[38;5;28mcls\u001b[39m \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m object_hook \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m\n\u001b[1;32m 344\u001b[0m parse_int \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m parse_float \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m\n\u001b[1;32m 345\u001b[0m parse_constant \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m object_pairs_hook \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m kw):\n\u001b[0;32m--> 346\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_default_decoder\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdecode\u001b[49m\u001b[43m(\u001b[49m\u001b[43ms\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 347\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mcls\u001b[39m \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", - "File \u001b[0;32m/opt/anaconda3/envs/llms/lib/python3.11/json/decoder.py:340\u001b[0m, in \u001b[0;36mJSONDecoder.decode\u001b[0;34m(self, s, _w)\u001b[0m\n\u001b[1;32m 339\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m end \u001b[38;5;241m!=\u001b[39m \u001b[38;5;28mlen\u001b[39m(s):\n\u001b[0;32m--> 340\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m JSONDecodeError(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mExtra data\u001b[39m\u001b[38;5;124m\"\u001b[39m, s, end)\n\u001b[1;32m 341\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m obj\n", - "\u001b[0;31mJSONDecodeError\u001b[0m: Extra data: line 2 column 1 (char 123)", - "\nDuring handling of the above exception, another exception occurred:\n", - "\u001b[0;31mJSONDecodeError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[46], line 13\u001b[0m\n\u001b[1;32m 6\u001b[0m payload \u001b[38;5;241m=\u001b[39m {\n\u001b[1;32m 7\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmodel\u001b[39m\u001b[38;5;124m\"\u001b[39m: MODEL_LLAMA,\n\u001b[1;32m 8\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmessages\u001b[39m\u001b[38;5;124m\"\u001b[39m: messages,\n\u001b[1;32m 9\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mstream\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 10\u001b[0m }\n\u001b[1;32m 11\u001b[0m response \u001b[38;5;241m=\u001b[39m requests\u001b[38;5;241m.\u001b[39mpost(OLLAMA_API, json\u001b[38;5;241m=\u001b[39mpayload,headers\u001b[38;5;241m=\u001b[39mHEADERS)\n\u001b[0;32m---> 13\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[43mresponse\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mjson\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mmessage\u001b[39m\u001b[38;5;124m'\u001b[39m][\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mcontent\u001b[39m\u001b[38;5;124m'\u001b[39m])\n\u001b[1;32m 15\u001b[0m \u001b[38;5;66;03m# # Process the response stream\u001b[39;00m\n\u001b[1;32m 16\u001b[0m \u001b[38;5;66;03m# for line in response.iter_lines():\u001b[39;00m\n\u001b[1;32m 17\u001b[0m \u001b[38;5;66;03m# if line: # Skip empty lines\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 23\u001b[0m \u001b[38;5;66;03m# except json.JSONDecodeError as e:\u001b[39;00m\n\u001b[1;32m 24\u001b[0m \u001b[38;5;66;03m# print(f\"Failed to decode JSON: {e}\")\u001b[39;00m\n", - "File \u001b[0;32m/opt/anaconda3/envs/llms/lib/python3.11/site-packages/requests/models.py:971\u001b[0m, in \u001b[0;36mResponse.json\u001b[0;34m(self, **kwargs)\u001b[0m\n\u001b[1;32m 969\u001b[0m \u001b[38;5;28;01mpass\u001b[39;00m\n\u001b[1;32m 970\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m JSONDecodeError \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[0;32m--> 971\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m RequestsJSONDecodeError(e\u001b[38;5;241m.\u001b[39mmsg, e\u001b[38;5;241m.\u001b[39mdoc, e\u001b[38;5;241m.\u001b[39mpos)\n\u001b[1;32m 973\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 974\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m complexjson\u001b[38;5;241m.\u001b[39mloads(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtext, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", - "\u001b[0;31mJSONDecodeError\u001b[0m: Extra data: line 2 column 1 (char 123)" - ] - } - ], + "outputs": [], "source": [ "# Get Llama 3.2 to answer\n", "messages = [\n", @@ -225,9 +206,10 @@ " \"messages\": messages,\n", " \"stream\": True\n", " }\n", - "response = requests.post(OLLAMA_API, json=payload,headers=HEADERS)\n", "\n", - "print(response.json()['message']['content'])\n", + "response = ollama.chat(model=MODEL_LLAMA, messages=messages)\n", + "reply = response['message']['content']\n", + "display(Markdown(reply))\n", "\n", "# # Process the response stream\n", "# for line in response.iter_lines():\n", From 57bb6cc85a50d372bd4084bbd40325e90af25a19 Mon Sep 17 00:00:00 2001 From: codenigma1 Date: Sun, 22 Dec 2024 01:15:16 +1100 Subject: [PATCH 15/29] Day 5 challenging completed with multilingual with multitone --- .../day5-multi-lingual-desire-format.ipynb | 3585 +++++++++++++++++ 1 file changed, 3585 insertions(+) create mode 100644 week1/community-contributions/day5-multi-lingual-desire-format.ipynb diff --git a/week1/community-contributions/day5-multi-lingual-desire-format.ipynb b/week1/community-contributions/day5-multi-lingual-desire-format.ipynb new file mode 100644 index 0000000..3f1b3ad --- /dev/null +++ b/week1/community-contributions/day5-multi-lingual-desire-format.ipynb @@ -0,0 +1,3585 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "a98030af-fcd1-4d63-a36e-38ba053498fa", + "metadata": {}, + "source": [ + "# A full business solution\n", + "\n", + "## Now we will take our project from Day 1 to the next level\n", + "\n", + "### BUSINESS CHALLENGE:\n", + "\n", + "Create a product that builds a Brochure for a company to be used for prospective clients, investors and potential recruits.\n", + "\n", + "We will be provided a company name and their primary website.\n", + "\n", + "See the end of this notebook for examples of real-world business applications.\n", + "\n", + "And remember: I'm always available if you have problems or ideas! Please do reach out." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "d5b08506-dc8b-4443-9201-5f1848161363", + "metadata": {}, + "outputs": [], + "source": [ + "# imports\n", + "# If these fail, please check you're running from an 'activated' environment with (llms) in the command prompt\n", + "\n", + "import os\n", + "import requests\n", + "import json\n", + "from typing import List\n", + "from dotenv import load_dotenv\n", + "from bs4 import BeautifulSoup\n", + "from IPython.display import Markdown, display, update_display\n", + "from openai import OpenAI" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "fc5d8880-f2ee-4c06-af16-ecbc0262af61", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "API key looks good so far\n" + ] + } + ], + "source": [ + "# Initialize and constants\n", + "\n", + "load_dotenv()\n", + "api_key = os.getenv('OPENAI_API_KEY')\n", + "\n", + "if api_key and api_key.startswith('sk-proj-') and len(api_key)>10:\n", + " print(\"API key looks good so far\")\n", + "else:\n", + " print(\"There might be a problem with your API key? Please visit the troubleshooting notebook!\")\n", + " \n", + "MODEL = 'gpt-4o-mini'\n", + "openai = OpenAI()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "106dd65e-90af-4ca8-86b6-23a41840645b", + "metadata": {}, + "outputs": [], + "source": [ + "# A class to represent a Webpage\n", + "\n", + "# Some websites need you to use proper headers when fetching them:\n", + "headers = {\n", + " \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36\"\n", + "}\n", + "\n", + "class Website:\n", + " \"\"\"\n", + " A utility class to represent a Website that we have scraped, now with links\n", + " \"\"\"\n", + "\n", + " def __init__(self, url):\n", + " self.url = url\n", + " response = requests.get(url, headers=headers)\n", + " self.body = response.content\n", + " soup = BeautifulSoup(self.body, 'html.parser')\n", + " self.title = soup.title.string if soup.title else \"No title found\"\n", + " if soup.body:\n", + " for irrelevant in soup.body([\"script\", \"style\", \"img\", \"input\"]):\n", + " irrelevant.decompose()\n", + " self.text = soup.body.get_text(separator=\"\\n\", strip=True)\n", + " else:\n", + " self.text = \"\"\n", + " links = [link.get('href') for link in soup.find_all('a')]\n", + " self.links = [link for link in links if link]\n", + "\n", + " def get_contents(self):\n", + " return f\"Webpage Title:\\n{self.title}\\nWebpage Contents:\\n{self.text}\\n\\n\"" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "e30d8128-933b-44cc-81c8-ab4c9d86589a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['https://edwarddonner.com/',\n", + " 'https://edwarddonner.com/outsmart/',\n", + " 'https://edwarddonner.com/about-me-and-about-nebula/',\n", + " 'https://edwarddonner.com/posts/',\n", + " 'https://edwarddonner.com/',\n", + " 'https://news.ycombinator.com',\n", + " 'https://nebula.io/?utm_source=ed&utm_medium=referral',\n", + " 'https://www.prnewswire.com/news-releases/wynden-stark-group-acquires-nyc-venture-backed-tech-startup-untapt-301269512.html',\n", + " 'https://patents.google.com/patent/US20210049536A1/',\n", + " 'https://www.linkedin.com/in/eddonner/',\n", + " 'https://edwarddonner.com/2024/11/13/llm-engineering-resources/',\n", + " 'https://edwarddonner.com/2024/11/13/llm-engineering-resources/',\n", + " 'https://edwarddonner.com/2024/10/16/from-software-engineer-to-ai-data-scientist-resources/',\n", + " 'https://edwarddonner.com/2024/10/16/from-software-engineer-to-ai-data-scientist-resources/',\n", + " 'https://edwarddonner.com/2024/08/06/outsmart/',\n", + " 'https://edwarddonner.com/2024/08/06/outsmart/',\n", + " 'https://edwarddonner.com/2024/06/26/choosing-the-right-llm-resources/',\n", + " 'https://edwarddonner.com/2024/06/26/choosing-the-right-llm-resources/',\n", + " 'https://edwarddonner.com/',\n", + " 'https://edwarddonner.com/outsmart/',\n", + " 'https://edwarddonner.com/about-me-and-about-nebula/',\n", + " 'https://edwarddonner.com/posts/',\n", + " 'mailto:hello@mygroovydomain.com',\n", + " 'https://www.linkedin.com/in/eddonner/',\n", + " 'https://twitter.com/edwarddonner',\n", + " 'https://www.facebook.com/edward.donner.52']" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ed = Website(\"https://edwarddonner.com\")\n", + "ed.links" + ] + }, + { + "cell_type": "markdown", + "id": "1771af9c-717a-4fca-bbbe-8a95893312c3", + "metadata": {}, + "source": [ + "## First step: Have GPT-4o-mini figure out which links are relevant\n", + "\n", + "### Use a call to gpt-4o-mini to read the links on a webpage, and respond in structured JSON. \n", + "It should decide which links are relevant, and replace relative links such as \"/about\" with \"https://company.com/about\". \n", + "We will use \"one shot prompting\" in which we provide an example of how it should respond in the prompt.\n", + "\n", + "This is an excellent use case for an LLM, because it requires nuanced understanding. Imagine trying to code this without LLMs by parsing and analyzing the webpage - it would be very hard!\n", + "\n", + "Sidenote: there is a more advanced technique called \"Structured Outputs\" in which we require the model to respond according to a spec. We cover this technique in Week 8 during our autonomous Agentic AI project." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "6957b079-0d96-45f7-a26a-3487510e9b35", + "metadata": {}, + "outputs": [], + "source": [ + "link_system_prompt = \"You are provided with a list of links found on a webpage. \\\n", + "You are able to decide which of the links would be most relevant to include in a brochure about the company, \\\n", + "such as links to an About page, or a Company page, or Careers/Jobs pages.\\n\"\n", + "link_system_prompt += \"You should respond in JSON as in this example:\"\n", + "link_system_prompt += \"\"\"\n", + "{\n", + " \"links\": [\n", + " {\"type\": \"about page\", \"url\": \"https://full.url/goes/here/about\"},\n", + " {\"type\": \"careers page\": \"url\": \"https://another.full.url/careers\"}\n", + " ]\n", + "}\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "b97e4068-97ed-4120-beae-c42105e4d59a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "You are provided with a list of links found on a webpage. You are able to decide which of the links would be most relevant to include in a brochure about the company, such as links to an About page, or a Company page, or Careers/Jobs pages.\n", + "You should respond in JSON as in this example:\n", + "{\n", + " \"links\": [\n", + " {\"type\": \"about page\", \"url\": \"https://full.url/goes/here/about\"},\n", + " {\"type\": \"careers page\": \"url\": \"https://another.full.url/careers\"}\n", + " ]\n", + "}\n", + "\n" + ] + } + ], + "source": [ + "print(link_system_prompt)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "8e1f601b-2eaf-499d-b6b8-c99050c9d6b3", + "metadata": {}, + "outputs": [], + "source": [ + "def get_links_user_prompt(website):\n", + " user_prompt = f\"Here is the list of links on the website of {website.url} - \"\n", + " user_prompt += \"please decide which of these are relevant web links for a brochure about the company, respond with the full https URL in JSON format. \\\n", + "Do not include Terms of Service, Privacy, email links.\\n\"\n", + " user_prompt += \"Links (some might be relative links):\\n\"\n", + " user_prompt += \"\\n\".join(website.links)\n", + " return user_prompt" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "6bcbfa78-6395-4685-b92c-22d592050fd7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Here is the list of links on the website of https://edwarddonner.com - please decide which of these are relevant web links for a brochure about the company, respond with the full https URL in JSON format. Do not include Terms of Service, Privacy, email links.\n", + "Links (some might be relative links):\n", + "https://edwarddonner.com/\n", + "https://edwarddonner.com/outsmart/\n", + "https://edwarddonner.com/about-me-and-about-nebula/\n", + "https://edwarddonner.com/posts/\n", + "https://edwarddonner.com/\n", + "https://news.ycombinator.com\n", + "https://nebula.io/?utm_source=ed&utm_medium=referral\n", + "https://www.prnewswire.com/news-releases/wynden-stark-group-acquires-nyc-venture-backed-tech-startup-untapt-301269512.html\n", + "https://patents.google.com/patent/US20210049536A1/\n", + "https://www.linkedin.com/in/eddonner/\n", + "https://edwarddonner.com/2024/11/13/llm-engineering-resources/\n", + "https://edwarddonner.com/2024/11/13/llm-engineering-resources/\n", + "https://edwarddonner.com/2024/10/16/from-software-engineer-to-ai-data-scientist-resources/\n", + "https://edwarddonner.com/2024/10/16/from-software-engineer-to-ai-data-scientist-resources/\n", + "https://edwarddonner.com/2024/08/06/outsmart/\n", + "https://edwarddonner.com/2024/08/06/outsmart/\n", + "https://edwarddonner.com/2024/06/26/choosing-the-right-llm-resources/\n", + "https://edwarddonner.com/2024/06/26/choosing-the-right-llm-resources/\n", + "https://edwarddonner.com/\n", + "https://edwarddonner.com/outsmart/\n", + "https://edwarddonner.com/about-me-and-about-nebula/\n", + "https://edwarddonner.com/posts/\n", + "mailto:hello@mygroovydomain.com\n", + "https://www.linkedin.com/in/eddonner/\n", + "https://twitter.com/edwarddonner\n", + "https://www.facebook.com/edward.donner.52\n" + ] + } + ], + "source": [ + "print(get_links_user_prompt(ed))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "a29aca19-ca13-471c-a4b4-5abbfa813f69", + "metadata": {}, + "outputs": [], + "source": [ + "def get_links(url):\n", + " website = Website(url)\n", + " response = openai.chat.completions.create(\n", + " model=MODEL,\n", + " messages=[\n", + " {\"role\": \"system\", \"content\": link_system_prompt},\n", + " {\"role\": \"user\", \"content\": get_links_user_prompt(website)}\n", + " ],\n", + " response_format={\"type\": \"json_object\"}\n", + " )\n", + " result = response.choices[0].message.content\n", + " return json.loads(result)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "74a827a0-2782-4ae5-b210-4a242a8b4cc2", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['/',\n", + " '/models',\n", + " '/datasets',\n", + " '/spaces',\n", + " '/posts',\n", + " '/docs',\n", + " '/enterprise',\n", + " '/pricing',\n", + " '/login',\n", + " '/join',\n", + " '/IamCreateAI/Ruyi-Mini-7B',\n", + " '/Datou1111/shou_xin',\n", + " '/answerdotai/ModernBERT-base',\n", + " '/meta-llama/Llama-3.3-70B-Instruct',\n", + " '/tencent/HunyuanVideo',\n", + " '/models',\n", + " '/spaces/JeffreyXiang/TRELLIS',\n", + " '/spaces/HuggingFaceH4/blogpost-scaling-test-time-compute',\n", + " '/spaces/multimodalart/flux-style-shaping',\n", + " '/spaces/Kwai-Kolors/Kolors-Virtual-Try-On',\n", + " '/spaces/lllyasviel/iclight-v2',\n", + " '/spaces',\n", + " '/datasets/fka/awesome-chatgpt-prompts',\n", + " '/datasets/O1-OPEN/OpenO1-SFT',\n", + " '/datasets/HuggingFaceFW/fineweb-2',\n", + " '/datasets/HuggingFaceTB/finemath',\n", + " '/datasets/amphora/QwQ-LongCoT-130K',\n", + " '/datasets',\n", + " '/join',\n", + " '/pricing#endpoints',\n", + " '/pricing#spaces',\n", + " '/pricing',\n", + " '/enterprise',\n", + " '/enterprise',\n", + " '/enterprise',\n", + " '/enterprise',\n", + " '/enterprise',\n", + " '/enterprise',\n", + " '/enterprise',\n", + " '/allenai',\n", + " '/facebook',\n", + " '/amazon',\n", + " '/google',\n", + " '/Intel',\n", + " '/microsoft',\n", + " '/grammarly',\n", + " '/Writer',\n", + " '/docs/transformers',\n", + " '/docs/diffusers',\n", + " '/docs/safetensors',\n", + " '/docs/huggingface_hub',\n", + " '/docs/tokenizers',\n", + " '/docs/peft',\n", + " '/docs/transformers.js',\n", + " '/docs/timm',\n", + " '/docs/trl',\n", + " '/docs/datasets',\n", + " '/docs/text-generation-inference',\n", + " '/docs/accelerate',\n", + " '/models',\n", + " '/datasets',\n", + " '/spaces',\n", + " '/tasks',\n", + " 'https://ui.endpoints.huggingface.co',\n", + " '/chat',\n", + " '/huggingface',\n", + " '/brand',\n", + " '/terms-of-service',\n", + " '/privacy',\n", + " 'https://apply.workable.com/huggingface/',\n", + " 'mailto:press@huggingface.co',\n", + " '/learn',\n", + " '/docs',\n", + " '/blog',\n", + " 'https://discuss.huggingface.co',\n", + " 'https://status.huggingface.co/',\n", + " 'https://github.com/huggingface',\n", + " 'https://twitter.com/huggingface',\n", + " 'https://www.linkedin.com/company/huggingface/',\n", + " '/join/discord']" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Anthropic has made their site harder to scrape, so I'm using HuggingFace..\n", + "\n", + "huggingface = Website(\"https://huggingface.co\")\n", + "huggingface.links" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "d3d583e2-dcc4-40cc-9b28-1e8dbf402924", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'links': [{'type': 'homepage', 'url': 'https://huggingface.co/'},\n", + " {'type': 'about page', 'url': 'https://huggingface.co/huggingface'},\n", + " {'type': 'careers page', 'url': 'https://apply.workable.com/huggingface/'},\n", + " {'type': 'blog', 'url': 'https://huggingface.co/blog'},\n", + " {'type': 'github page', 'url': 'https://github.com/huggingface'},\n", + " {'type': 'twitter page', 'url': 'https://twitter.com/huggingface'},\n", + " {'type': 'linkedin page',\n", + " 'url': 'https://www.linkedin.com/company/huggingface/'}]}" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "get_links(\"https://huggingface.co\")" + ] + }, + { + "cell_type": "markdown", + "id": "0d74128e-dfb6-47ec-9549-288b621c838c", + "metadata": {}, + "source": [ + "## Second step: make the brochure!\n", + "\n", + "Assemble all the details into another prompt to GPT4-o" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "85a5b6e2-e7ef-44a9-bc7f-59ede71037b5", + "metadata": {}, + "outputs": [], + "source": [ + "def get_all_details(url):\n", + " result = \"Landing page:\\n\"\n", + " result += Website(url).get_contents()\n", + " links = get_links(url)\n", + " print(\"Found links:\", links)\n", + " for link in links[\"links\"]:\n", + " result += f\"\\n\\n{link['type']}\\n\"\n", + " result += Website(link[\"url\"]).get_contents()\n", + " return result" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "5099bd14-076d-4745-baf3-dac08d8e5ab2", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Found links: {'links': [{'type': 'about page', 'url': 'https://huggingface.co/about'}, {'type': 'careers page', 'url': 'https://apply.workable.com/huggingface/'}, {'type': 'blog page', 'url': 'https://huggingface.co/blog'}, {'type': 'company page', 'url': 'https://huggingface.co/huggingface'}, {'type': 'community discussions', 'url': 'https://discuss.huggingface.co'}, {'type': 'GitHub page', 'url': 'https://github.com/huggingface'}, {'type': 'Twitter page', 'url': 'https://twitter.com/huggingface'}, {'type': 'LinkedIn page', 'url': 'https://www.linkedin.com/company/huggingface/'}]}\n", + "Landing page:\n", + "Webpage Title:\n", + "Hugging Face – The AI community building the future.\n", + "Webpage Contents:\n", + "Hugging Face\n", + "Models\n", + "Datasets\n", + "Spaces\n", + "Posts\n", + "Docs\n", + "Enterprise\n", + "Pricing\n", + "Log In\n", + "Sign Up\n", + "The AI community building the future.\n", + "The platform where the machine learning community collaborates on models, datasets, and applications.\n", + "Trending on\n", + "this week\n", + "Models\n", + "IamCreateAI/Ruyi-Mini-7B\n", + "Updated\n", + "4 days ago\n", + "•\n", + "8.17k\n", + "•\n", + "352\n", + "Datou1111/shou_xin\n", + "Updated\n", + "12 days ago\n", + "•\n", + "28.3k\n", + "•\n", + "672\n", + "answerdotai/ModernBERT-base\n", + "Updated\n", + "1 day ago\n", + "•\n", + "6.24k\n", + "•\n", + "236\n", + "meta-llama/Llama-3.3-70B-Instruct\n", + "Updated\n", + "11 days ago\n", + "•\n", + "236k\n", + "•\n", + "1.21k\n", + "tencent/HunyuanVideo\n", + "Updated\n", + "3 days ago\n", + "•\n", + "6.01k\n", + "•\n", + "1.2k\n", + "Browse 400k+ models\n", + "Spaces\n", + "Running\n", + "on\n", + "Zero\n", + "1.79k\n", + "🏢\n", + "TRELLIS\n", + "Scalable and Versatile 3D Generation from images\n", + "Running\n", + "306\n", + "📝\n", + "Scaling test-time compute\n", + "Running\n", + "on\n", + "Zero\n", + "470\n", + "🚀\n", + "Flux Style Shaping\n", + "Optical illusions and style transfer with FLUX\n", + "Running\n", + "on\n", + "CPU Upgrade\n", + "6.11k\n", + "👕\n", + "Kolors Virtual Try-On\n", + "Running\n", + "on\n", + "Zero\n", + "965\n", + "📈\n", + "IC Light V2\n", + "Browse 150k+ applications\n", + "Datasets\n", + "fka/awesome-chatgpt-prompts\n", + "Updated\n", + "Sep 3\n", + "•\n", + "6.83k\n", + "•\n", + "6.58k\n", + "O1-OPEN/OpenO1-SFT\n", + "Updated\n", + "4 days ago\n", + "•\n", + "1.86k\n", + "•\n", + "234\n", + "HuggingFaceFW/fineweb-2\n", + "Updated\n", + "13 days ago\n", + "•\n", + "77.7k\n", + "•\n", + "342\n", + "HuggingFaceTB/finemath\n", + "Updated\n", + "1 day ago\n", + "•\n", + "1.86k\n", + "•\n", + "43\n", + "amphora/QwQ-LongCoT-130K\n", + "Updated\n", + "16 days ago\n", + "•\n", + "1.34k\n", + "•\n", + "85\n", + "Browse 100k+ datasets\n", + "The Home of Machine Learning\n", + "Create, discover and collaborate on ML better.\n", + "The collaboration platform\n", + "Host and collaborate on unlimited public models, datasets and applications.\n", + "Move faster\n", + "With the HF Open source stack.\n", + "Explore all modalities\n", + "Text, image, video, audio or even 3D.\n", + "Build your portfolio\n", + "Share your work with the world and build your ML profile.\n", + "Sign Up\n", + "Accelerate your ML\n", + "We provide paid Compute and Enterprise solutions.\n", + "Compute\n", + "Deploy on optimized\n", + "Inference Endpoints\n", + "or update your\n", + "Spaces applications\n", + "to a GPU in a few clicks.\n", + "View pricing\n", + "Starting at $0.60/hour for GPU\n", + "Enterprise\n", + "Give your team the most advanced platform to build AI with enterprise-grade security, access controls and\n", + "\t\t\tdedicated support.\n", + "Getting started\n", + "Starting at $20/user/month\n", + "Single Sign-On\n", + "Regions\n", + "Priority Support\n", + "Audit Logs\n", + "Resource Groups\n", + "Private Datasets Viewer\n", + "More than 50,000 organizations are using Hugging Face\n", + "Ai2\n", + "Enterprise\n", + "non-profit\n", + "•\n", + "366 models\n", + "•\n", + "1.76k followers\n", + "AI at Meta\n", + "Enterprise\n", + "company\n", + "•\n", + "2.05k models\n", + "•\n", + "3.83k followers\n", + "Amazon Web Services\n", + "company\n", + "•\n", + "21 models\n", + "•\n", + "2.45k followers\n", + "Google\n", + "company\n", + "•\n", + "911 models\n", + "•\n", + "5.76k followers\n", + "Intel\n", + "company\n", + "•\n", + "217 models\n", + "•\n", + "2.07k followers\n", + "Microsoft\n", + "company\n", + "•\n", + "351 models\n", + "•\n", + "6.29k followers\n", + "Grammarly\n", + "company\n", + "•\n", + "10 models\n", + "•\n", + "102 followers\n", + "Writer\n", + "Enterprise\n", + "company\n", + "•\n", + "17 models\n", + "•\n", + "186 followers\n", + "Our Open Source\n", + "We are building the foundation of ML tooling with the community.\n", + "Transformers\n", + "136,571\n", + "State-of-the-art ML for Pytorch, TensorFlow, and JAX.\n", + "Diffusers\n", + "26,740\n", + "State-of-the-art diffusion models for image and audio generation in PyTorch.\n", + "Safetensors\n", + "2,960\n", + "Simple, safe way to store and distribute neural networks weights safely and quickly.\n", + "Hub Python Library\n", + "2,177\n", + "Client library for the HF Hub: manage repositories from your Python runtime.\n", + "Tokenizers\n", + "9,165\n", + "Fast tokenizers, optimized for both research and production.\n", + "PEFT\n", + "16,767\n", + "Parameter efficient finetuning methods for large models.\n", + "Transformers.js\n", + "12,421\n", + "State-of-the-art Machine Learning for the web. Run Transformers directly in your browser, with no need for a server.\n", + "timm\n", + "32,668\n", + "State-of-the-art computer vision models, layers, optimizers, training/evaluation, and utilities.\n", + "TRL\n", + "10,382\n", + "Train transformer language models with reinforcement learning.\n", + "Datasets\n", + "19,378\n", + "Access and share datasets for computer vision, audio, and NLP tasks.\n", + "Text Generation Inference\n", + "9,484\n", + "Toolkit to serve Large Language Models.\n", + "Accelerate\n", + "8,082\n", + "Easily train and use PyTorch models with multi-GPU, TPU, mixed-precision.\n", + "System theme\n", + "Website\n", + "Models\n", + "Datasets\n", + "Spaces\n", + "Tasks\n", + "Inference Endpoints\n", + "HuggingChat\n", + "Company\n", + "About\n", + "Brand assets\n", + "Terms of service\n", + "Privacy\n", + "Jobs\n", + "Press\n", + "Resources\n", + "Learn\n", + "Documentation\n", + "Blog\n", + "Forum\n", + "Service Status\n", + "Social\n", + "GitHub\n", + "Twitter\n", + "LinkedIn\n", + "Discord\n", + "\n", + "\n", + "\n", + "about page\n", + "Webpage Title:\n", + "about (Sergei)\n", + "Webpage Contents:\n", + "Hugging Face\n", + "Models\n", + "Datasets\n", + "Spaces\n", + "Posts\n", + "Docs\n", + "Enterprise\n", + "Pricing\n", + "Log In\n", + "Sign Up\n", + "Sergei\n", + "about\n", + "Follow\n", + "Kalaipriya's profile picture\n", + "selvivincent's profile picture\n", + "Renumathi's profile picture\n", + "3\n", + "\t\t\t\t\tfollowers\n", + "·\n", + "0 following\n", + "AI & ML interests\n", + "None yet\n", + "Organizations\n", + "None yet\n", + "models\n", + "None public yet\n", + "datasets\n", + "None public yet\n", + "System theme\n", + "Company\n", + "TOS\n", + "Privacy\n", + "About\n", + "Jobs\n", + "Website\n", + "Models\n", + "Datasets\n", + "Spaces\n", + "Pricing\n", + "Docs\n", + "\n", + "\n", + "\n", + "careers page\n", + "Webpage Title:\n", + "Hugging Face - Current Openings\n", + "Webpage Contents:\n", + "\n", + "\n", + "\n", + "\n", + "blog page\n", + "Webpage Title:\n", + "Hugging Face – Blog\n", + "Webpage Contents:\n", + "Hugging Face\n", + "Models\n", + "Datasets\n", + "Spaces\n", + "Posts\n", + "Docs\n", + "Enterprise\n", + "Pricing\n", + "Log In\n", + "Sign Up\n", + "Blog, Articles, and discussions\n", + "New Article\n", + "Everything\n", + "community\n", + "guide\n", + "open source collab\n", + "partnerships\n", + "research\n", + "NLP\n", + "Audio\n", + "CV\n", + "RL\n", + "ethics\n", + "Diffusion\n", + "Game Development\n", + "RLHF\n", + "Leaderboard\n", + "Case Studies\n", + "Evaluating Audio Reasoning with Big Bench Audio\n", + "By\n", + "mhillsmith\n", + "December 20, 2024\n", + "guest\n", + "•\n", + "8\n", + "Community Articles\n", + "view all\n", + "20+ Free and Paid Digital Marketing Strategies to Automate Repetitive Tasks\n", + "By\n", + "Markets\n", + "•\n", + "about 3 hours ago\n", + "•\n", + "1\n", + "🧠 Tags generation dataset\n", + "By\n", + "zino36\n", + "•\n", + "about 16 hours ago\n", + "•\n", + "1\n", + "AI Agents in Action: Managing GitHub Issues with KaibanJS\n", + "By\n", + "darielnoel\n", + "•\n", + "1 day ago\n", + "**Intelligence Potentiation: An Evolutionary Perspective on AI Agent Designs**\n", + "By\n", + "KnutJaegersberg\n", + "•\n", + "1 day ago\n", + "•\n", + "3\n", + "MINERVA: A Multi-Agent LLM System for Digital Scam Protection\n", + "By\n", + "dcarpintero\n", + "•\n", + "2 days ago\n", + "Mastering Iterative Prompting for Optimized AI Code Generation\n", + "By\n", + "luigi12345\n", + "•\n", + "3 days ago\n", + "•\n", + "1\n", + "SILMA RAGQA V1.0: A Comprehensive Benchmark for Evaluating LLMs on RAG QA Use-Cases\n", + "By\n", + "karimouda\n", + "•\n", + "3 days ago\n", + "•\n", + "1\n", + "FuseChat-3.0: Preference Optimization for Implicit Model Fusion\n", + "By\n", + "Wanfq\n", + "•\n", + "3 days ago\n", + "•\n", + "2\n", + "Tutorial: Quantizing Llama 3+ Models for Efficient Deployment\n", + "By\n", + "theeseus-ai\n", + "•\n", + "6 days ago\n", + "•\n", + "3\n", + "How to Expand Your AI Music Generations of 30 Seconds to Several Minutes\n", + "By\n", + "theeseus-ai\n", + "•\n", + "8 days ago\n", + "•\n", + "1\n", + "🇪🇺✍️ EU AI Act: Systemic Risks in the First CoP Draft Comments ✍️🇪🇺\n", + "By\n", + "yjernite\n", + "•\n", + "9 days ago\n", + "•\n", + "11\n", + "Building an AI-powered search engine from scratch\n", + "By\n", + "as-cle-bert\n", + "•\n", + "10 days ago\n", + "•\n", + "8\n", + "MotionLCM-V2: Improved Compression Rate for Multi-Latent-Token Diffusion\n", + "By\n", + "wxDai\n", + "•\n", + "10 days ago\n", + "•\n", + "12\n", + "RLHF 101: A Technical Dive into RLHF\n", + "By\n", + "GitBag\n", + "•\n", + "10 days ago\n", + "•\n", + "4\n", + "[Talk Arena](https://talkarena.org)\n", + "By\n", + "WillHeld\n", + "•\n", + "11 days ago\n", + "•\n", + "1\n", + "Multimodal RAG with Colpali, Milvus and VLMs\n", + "By\n", + "saumitras\n", + "•\n", + "11 days ago\n", + "•\n", + "2\n", + "In Honour of This Year's NeurIPs Test of Time Paper Awardees\n", + "By\n", + "Jaward\n", + "•\n", + "11 days ago\n", + "•\n", + "2\n", + "Power steering: Squeeze massive power from small LLMs\n", + "By\n", + "ucheog\n", + "•\n", + "12 days ago\n", + "•\n", + "4\n", + "Exploring the Power of KaibanJS v0.11.0 🚀\n", + "By\n", + "darielnoel\n", + "•\n", + "12 days ago\n", + "•\n", + "1\n", + "**Building a Custom Retrieval System with Motoko and Node.js**\n", + "By\n", + "theeseus-ai\n", + "•\n", + "12 days ago\n", + "•\n", + "1\n", + "Finally, a Replacement for BERT: Introducing ModernBERT\n", + "By\n", + "bwarner\n", + "December 19, 2024\n", + "guest\n", + "•\n", + "289\n", + "Bamba: Inference-Efficient Hybrid Mamba2 Model\n", + "By\n", + "Linsong-C\n", + "December 18, 2024\n", + "guest\n", + "•\n", + "30\n", + "Welcome the Falcon 3 Family of Open Models!\n", + "By\n", + "FalconLLM\n", + "December 17, 2024\n", + "•\n", + "98\n", + "Benchmarking Language Model Performance on 5th Gen Xeon at GCP\n", + "By\n", + "MatrixYao\n", + "December 17, 2024\n", + "•\n", + "2\n", + "Introducing the Synthetic Data Generator - Build Datasets with Natural Language\n", + "By\n", + "davidberenstein1957\n", + "December 16, 2024\n", + "•\n", + "55\n", + "LeMaterial: an open source initiative to accelerate materials discovery and research\n", + "By\n", + "AlexDuvalinho\n", + "December 10, 2024\n", + "guest\n", + "•\n", + "30\n", + "Hugging Face models in Amazon Bedrock\n", + "By\n", + "pagezyhf\n", + "December 9, 2024\n", + "•\n", + "8\n", + "Open Preference Dataset for Text-to-Image Generation by the 🤗 Community\n", + "By\n", + "davidberenstein1957\n", + "December 9, 2024\n", + "•\n", + "47\n", + "Welcome PaliGemma 2 – New vision language models by Google\n", + "By\n", + "merve\n", + "December 5, 2024\n", + "•\n", + "117\n", + "“How good are LLMs at fixing their mistakes? A chatbot arena experiment with Keras and TPUs\n", + "By\n", + "martin-gorner\n", + "December 5, 2024\n", + "•\n", + "12\n", + "Rethinking LLM Evaluation with 3C3H: AraGen Benchmark and Leaderboard\n", + "By\n", + "alielfilali01\n", + "December 4, 2024\n", + "guest\n", + "•\n", + "26\n", + "Investing in Performance: Fine-tune small models with LLM insights - a CFM case study\n", + "By\n", + "oahouzi\n", + "December 3, 2024\n", + "•\n", + "25\n", + "Rearchitecting Hugging Face Uploads and Downloads\n", + "By\n", + "port8080\n", + "November 26, 2024\n", + "•\n", + "37\n", + "SmolVLM - small yet mighty Vision Language Model\n", + "By\n", + "andito\n", + "November 26, 2024\n", + "•\n", + "142\n", + "Previous\n", + "1\n", + "2\n", + "3\n", + "...\n", + "36\n", + "Next\n", + "Community Articles\n", + "view all\n", + "20+ Free and Paid Digital Marketing Strategies to Automate Repetitive Tasks\n", + "By\n", + "Markets\n", + "•\n", + "about 3 hours ago\n", + "•\n", + "1\n", + "🧠 Tags generation dataset\n", + "By\n", + "zino36\n", + "•\n", + "about 16 hours ago\n", + "•\n", + "1\n", + "AI Agents in Action: Managing GitHub Issues with KaibanJS\n", + "By\n", + "darielnoel\n", + "•\n", + "1 day ago\n", + "**Intelligence Potentiation: An Evolutionary Perspective on AI Agent Designs**\n", + "By\n", + "KnutJaegersberg\n", + "•\n", + "1 day ago\n", + "•\n", + "3\n", + "MINERVA: A Multi-Agent LLM System for Digital Scam Protection\n", + "By\n", + "dcarpintero\n", + "•\n", + "2 days ago\n", + "Mastering Iterative Prompting for Optimized AI Code Generation\n", + "By\n", + "luigi12345\n", + "•\n", + "3 days ago\n", + "•\n", + "1\n", + "SILMA RAGQA V1.0: A Comprehensive Benchmark for Evaluating LLMs on RAG QA Use-Cases\n", + "By\n", + "karimouda\n", + "•\n", + "3 days ago\n", + "•\n", + "1\n", + "FuseChat-3.0: Preference Optimization for Implicit Model Fusion\n", + "By\n", + "Wanfq\n", + "•\n", + "3 days ago\n", + "•\n", + "2\n", + "Tutorial: Quantizing Llama 3+ Models for Efficient Deployment\n", + "By\n", + "theeseus-ai\n", + "•\n", + "6 days ago\n", + "•\n", + "3\n", + "How to Expand Your AI Music Generations of 30 Seconds to Several Minutes\n", + "By\n", + "theeseus-ai\n", + "•\n", + "8 days ago\n", + "•\n", + "1\n", + "🇪🇺✍️ EU AI Act: Systemic Risks in the First CoP Draft Comments ✍️🇪🇺\n", + "By\n", + "yjernite\n", + "•\n", + "9 days ago\n", + "•\n", + "11\n", + "Building an AI-powered search engine from scratch\n", + "By\n", + "as-cle-bert\n", + "•\n", + "10 days ago\n", + "•\n", + "8\n", + "MotionLCM-V2: Improved Compression Rate for Multi-Latent-Token Diffusion\n", + "By\n", + "wxDai\n", + "•\n", + "10 days ago\n", + "•\n", + "12\n", + "RLHF 101: A Technical Dive into RLHF\n", + "By\n", + "GitBag\n", + "•\n", + "10 days ago\n", + "•\n", + "4\n", + "[Talk Arena](https://talkarena.org)\n", + "By\n", + "WillHeld\n", + "•\n", + "11 days ago\n", + "•\n", + "1\n", + "Multimodal RAG with Colpali, Milvus and VLMs\n", + "By\n", + "saumitras\n", + "•\n", + "11 days ago\n", + "•\n", + "2\n", + "In Honour of This Year's NeurIPs Test of Time Paper Awardees\n", + "By\n", + "Jaward\n", + "•\n", + "11 days ago\n", + "•\n", + "2\n", + "Power steering: Squeeze massive power from small LLMs\n", + "By\n", + "ucheog\n", + "•\n", + "12 days ago\n", + "•\n", + "4\n", + "Exploring the Power of KaibanJS v0.11.0 🚀\n", + "By\n", + "darielnoel\n", + "•\n", + "12 days ago\n", + "•\n", + "1\n", + "**Building a Custom Retrieval System with Motoko and Node.js**\n", + "By\n", + "theeseus-ai\n", + "•\n", + "12 days ago\n", + "•\n", + "1\n", + "System theme\n", + "Company\n", + "TOS\n", + "Privacy\n", + "About\n", + "Jobs\n", + "Website\n", + "Models\n", + "Datasets\n", + "Spaces\n", + "Pricing\n", + "Docs\n", + "\n", + "\n", + "\n", + "company page\n", + "Webpage Title:\n", + "huggingface (Hugging Face)\n", + "Webpage Contents:\n", + "Hugging Face\n", + "Models\n", + "Datasets\n", + "Spaces\n", + "Posts\n", + "Docs\n", + "Enterprise\n", + "Pricing\n", + "Log In\n", + "Sign Up\n", + "Hugging Face\n", + "Enterprise\n", + "company\n", + "Verified\n", + "https://huggingface.co\n", + "huggingface\n", + "huggingface\n", + "Activity Feed\n", + "Follow\n", + "8,542\n", + "AI & ML interests\n", + "The AI community building the future.\n", + "Recent Activity\n", + "IAMJB\n", + "updated\n", + "a dataset\n", + "9 minutes ago\n", + "huggingface/community-science-paper-v2\n", + "IAMJB\n", + "updated\n", + "a dataset\n", + "about 6 hours ago\n", + "huggingface/paper-central-data\n", + "fdaudens\n", + "updated\n", + "a Space\n", + "about 19 hours ago\n", + "huggingface/open-source-ai-year-in-review-2024\n", + "View all activity\n", + "Team members\n", + "224\n", + "+190\n", + "+177\n", + "+156\n", + "+146\n", + "+126\n", + "Organization Card\n", + "Community\n", + "About org cards\n", + "👋 Hi!\n", + "We are on a mission to democratize\n", + "good\n", + "machine learning, one commit at a time.\n", + "If that sounds like something you should be doing, why don't you\n", + "join us\n", + "!\n", + "For press enquiries, you can\n", + "✉️ contact our team here\n", + ".\n", + "Collections\n", + "1\n", + "DistilBERT release\n", + "Original DistilBERT model, checkpoints obtained from using teacher-student learning from the original BERT checkpoints.\n", + "distilbert/distilbert-base-cased\n", + "Fill-Mask\n", + "•\n", + "Updated\n", + "May 6\n", + "•\n", + "358k\n", + "•\n", + "35\n", + "distilbert/distilbert-base-uncased\n", + "Fill-Mask\n", + "•\n", + "Updated\n", + "May 6\n", + "•\n", + "14.8M\n", + "•\n", + "577\n", + "distilbert/distilbert-base-multilingual-cased\n", + "Fill-Mask\n", + "•\n", + "Updated\n", + "May 6\n", + "•\n", + "472k\n", + "•\n", + "148\n", + "distilbert/distilbert-base-uncased-finetuned-sst-2-english\n", + "Text Classification\n", + "•\n", + "Updated\n", + "Dec 19, 2023\n", + "•\n", + "6.96M\n", + "•\n", + "•\n", + "645\n", + "spaces\n", + "23\n", + "Sort: \n", + "\t\tRecently updated\n", + "pinned\n", + "Running\n", + "52\n", + "📈\n", + "Number Tokenization Blog\n", + "Running\n", + "395\n", + "😻\n", + "Open Source Ai Year In Review 2024\n", + "What happened in open-source AI this year, and what’s next?\n", + "Running\n", + "42\n", + "🔋\n", + "Inference Playground\n", + "Running\n", + "196\n", + "⚡\n", + "paper-central\n", + "Running\n", + "on\n", + "TPU v5e\n", + "6\n", + "💬\n", + "Keras Chatbot Battle\n", + "Running\n", + "101\n", + "⚡\n", + "Modelcard Creator\n", + "Expand 23\n", + "\t\t\t\t\t\t\tspaces\n", + "models\n", + "18\n", + "Sort: \n", + "\t\tRecently updated\n", + "huggingface/test-gating-group-2\n", + "Updated\n", + "4 days ago\n", + "huggingface/test-gating-group-1\n", + "Updated\n", + "4 days ago\n", + "huggingface/timesfm-tourism-monthly\n", + "Updated\n", + "12 days ago\n", + "•\n", + "29\n", + "•\n", + "1\n", + "huggingface/CodeBERTa-language-id\n", + "Text Classification\n", + "•\n", + "Updated\n", + "Mar 29\n", + "•\n", + "1.14k\n", + "•\n", + "54\n", + "huggingface/falcon-40b-gptq\n", + "Text Generation\n", + "•\n", + "Updated\n", + "Jun 14, 2023\n", + "•\n", + "19\n", + "•\n", + "12\n", + "huggingface/autoformer-tourism-monthly\n", + "Updated\n", + "May 24, 2023\n", + "•\n", + "1.5k\n", + "•\n", + "9\n", + "huggingface/distilbert-base-uncased-finetuned-mnli\n", + "Text Classification\n", + "•\n", + "Updated\n", + "Mar 22, 2023\n", + "•\n", + "1.37k\n", + "•\n", + "2\n", + "huggingface/informer-tourism-monthly\n", + "Updated\n", + "Feb 24, 2023\n", + "•\n", + "1.12k\n", + "•\n", + "5\n", + "huggingface/time-series-transformer-tourism-monthly\n", + "Updated\n", + "Feb 23, 2023\n", + "•\n", + "2.16k\n", + "•\n", + "18\n", + "huggingface/the-no-branch-repo\n", + "Text-to-Image\n", + "•\n", + "Updated\n", + "Feb 10, 2023\n", + "•\n", + "7\n", + "•\n", + "3\n", + "Expand 18\n", + "\t\t\t\t\t\t\tmodels\n", + "datasets\n", + "31\n", + "Sort: \n", + "\t\tRecently updated\n", + "huggingface/community-science-paper-v2\n", + "Viewer\n", + "•\n", + "Updated\n", + "9 minutes ago\n", + "•\n", + "5.03k\n", + "•\n", + "404\n", + "•\n", + "7\n", + "huggingface/paper-central-data\n", + "Viewer\n", + "•\n", + "Updated\n", + "about 6 hours ago\n", + "•\n", + "119k\n", + "•\n", + "553\n", + "•\n", + "8\n", + "huggingface/documentation-images\n", + "Viewer\n", + "•\n", + "Updated\n", + "1 day ago\n", + "•\n", + "44\n", + "•\n", + "2.43M\n", + "•\n", + "43\n", + "huggingface/transformers-metadata\n", + "Viewer\n", + "•\n", + "Updated\n", + "2 days ago\n", + "•\n", + "1.52k\n", + "•\n", + "559\n", + "•\n", + "14\n", + "huggingface/diffusers-metadata\n", + "Viewer\n", + "•\n", + "Updated\n", + "2 days ago\n", + "•\n", + "62\n", + "•\n", + "442\n", + "•\n", + "4\n", + "huggingface/policy-docs\n", + "Updated\n", + "3 days ago\n", + "•\n", + "898\n", + "•\n", + "6\n", + "huggingface/my-distiset-3f5a230e\n", + "Updated\n", + "30 days ago\n", + "•\n", + "17\n", + "huggingface/cookbook-images\n", + "Viewer\n", + "•\n", + "Updated\n", + "Nov 14\n", + "•\n", + "1\n", + "•\n", + "40.1k\n", + "•\n", + "6\n", + "huggingface/vllm-metadata\n", + "Updated\n", + "Oct 8\n", + "•\n", + "12\n", + "huggingface/paper-central-data-2\n", + "Viewer\n", + "•\n", + "Updated\n", + "Oct 4\n", + "•\n", + "58.3k\n", + "•\n", + "68\n", + "•\n", + "2\n", + "Expand 31\n", + "\t\t\t\t\t\t\tdatasets\n", + "System theme\n", + "Company\n", + "TOS\n", + "Privacy\n", + "About\n", + "Jobs\n", + "Website\n", + "Models\n", + "Datasets\n", + "Spaces\n", + "Pricing\n", + "Docs\n", + "\n", + "\n", + "\n", + "community discussions\n", + "Webpage Title:\n", + "Hugging Face Forums - Hugging Face Community Discussion\n", + "Webpage Contents:\n", + "Loading\n", + "Hugging Face Forums\n", + "Topic\n", + "Replies\n", + "Views\n", + "Activity\n", + "List of `size_categories`\n", + "🤗Datasets\n", + "3\n", + "5\n", + "December 21, 2024\n", + "Feature request - maintain list of favorite hf pages reachable from my hom epage\n", + "Site Feedback\n", + "4\n", + "886\n", + "December 21, 2024\n", + "404 error on carbon emission calculation\n", + "Site Feedback\n", + "1\n", + "7\n", + "December 21, 2024\n", + "Cannot connect gRPC Server Hosted on HuggingFace Spaces\n", + "Spaces\n", + "0\n", + "8\n", + "December 21, 2024\n", + "Hide system prompt or system instruction\n", + "Beginners\n", + "3\n", + "15\n", + "December 21, 2024\n", + "ModuleNotFoundError: No module named 'huggingface_hub.inference._types'\n", + "🤗Hub\n", + "0\n", + "5\n", + "December 21, 2024\n", + "Understanding State Management with Gradio and LangGraph\n", + "Beginners\n", + "1\n", + "11\n", + "December 21, 2024\n", + "Dimension problem\n", + "Beginners\n", + "25\n", + "21\n", + "December 21, 2024\n", + "Fine-tuning whisper on sound-event-detection dataset\n", + "🤗Transformers\n", + "0\n", + "4\n", + "December 20, 2024\n", + "Model that can generate both text and image as output\n", + "Research\n", + "4\n", + "42\n", + "December 21, 2024\n", + "Lm studio and Chat ui doesn't work with module\n", + "Beginners\n", + "11\n", + "33\n", + "December 21, 2024\n", + "Inference API Context Window and TOS\n", + "Beginners\n", + "0\n", + "12\n", + "December 20, 2024\n", + "Talkie AI got remove from app store -any alternative ai chat?\n", + "Beginners\n", + "4\n", + "1151\n", + "December 18, 2024\n", + "Inference Text Generation API issue\n", + "Intermediate\n", + "0\n", + "7\n", + "December 20, 2024\n", + "From Pandas Dataframe to Huggingface Dataset\n", + "Beginners\n", + "9\n", + "60459\n", + "December 20, 2024\n", + "\"Load Diffusion Model\" and \"Unet Loader (GGUF)\" null/undefined\n", + "Beginners\n", + "6\n", + "200\n", + "December 20, 2024\n", + "Timeout Issue with DeepSpeed on Multiple GPUs\n", + "DeepSpeed\n", + "0\n", + "8\n", + "December 20, 2024\n", + "Spaces dedicated gpu limit\n", + "Spaces\n", + "1\n", + "14\n", + "December 19, 2024\n", + "Chatbot PDF - using flan-t5-large model\n", + "Models\n", + "0\n", + "7\n", + "December 20, 2024\n", + "Gateway Problem\n", + "Beginners\n", + "0\n", + "8\n", + "December 20, 2024\n", + "RT-DETR attention map dimension - PekingU/rtdetr_r50vd\n", + "Models\n", + "0\n", + "5\n", + "December 20, 2024\n", + "Extending the tokenizer affects model generation\n", + "Intermediate\n", + "3\n", + "9\n", + "December 19, 2024\n", + "How to Ensure Each Process Reads Its Own Dataset and Trains Correctly When Using Trainer?\n", + "🤗Transformers\n", + "0\n", + "5\n", + "December 20, 2024\n", + "Can't save the tensorflow model of nvidia/mit-b5\n", + "Intermediate\n", + "3\n", + "127\n", + "December 19, 2024\n", + "# Audio course Unit 4. sample code not working. Can anyone check for me? Thanks\n", + "Course\n", + "0\n", + "6\n", + "December 20, 2024\n", + "Host Models on Hugging face and Perform Inference on Hugging Face Infrastructure\n", + "Beginners\n", + "0\n", + "6\n", + "December 20, 2024\n", + "Torchrun, trainer, dataset setup\n", + "Intermediate\n", + "4\n", + "71\n", + "December 20, 2024\n", + "Training fails on multiple GPUs with RuntimeError 'chuck expects at least a 1-dimensional array'\n", + "Beginners\n", + "2\n", + "108\n", + "December 19, 2024\n", + "How do you know whether the model is merged and uploaded?\n", + "Intermediate\n", + "0\n", + "11\n", + "December 20, 2024\n", + "Qwen based AI assistant randomly having an absolute, utter, complete 'mental breakdowns'?? (Inference API)\n", + "🤗Transformers\n", + "2\n", + "23\n", + "December 17, 2024\n", + "next page →\n", + "Home\n", + "Categories\n", + "Guidelines\n", + "Terms of Service\n", + "Privacy Policy\n", + "Powered by\n", + "Discourse\n", + ", best viewed with JavaScript enabled\n", + "\n", + "\n", + "\n", + "GitHub page\n", + "Webpage Title:\n", + "Hugging Face · GitHub\n", + "Webpage Contents:\n", + "Skip to content\n", + "Navigation Menu\n", + "Toggle navigation\n", + "Sign in\n", + "huggingface\n", + "Product\n", + "GitHub Copilot\n", + "Write better code with AI\n", + "Security\n", + "Find and fix vulnerabilities\n", + "Actions\n", + "Automate any workflow\n", + "Codespaces\n", + "Instant dev environments\n", + "Issues\n", + "Plan and track work\n", + "Code Review\n", + "Manage code changes\n", + "Discussions\n", + "Collaborate outside of code\n", + "Code Search\n", + "Find more, search less\n", + "Explore\n", + "All features\n", + "Documentation\n", + "GitHub Skills\n", + "Blog\n", + "Solutions\n", + "By company size\n", + "Enterprises\n", + "Small and medium teams\n", + "Startups\n", + "By use case\n", + "DevSecOps\n", + "DevOps\n", + "CI/CD\n", + "View all use cases\n", + "By industry\n", + "Healthcare\n", + "Financial services\n", + "Manufacturing\n", + "Government\n", + "View all industries\n", + "View all solutions\n", + "Resources\n", + "Topics\n", + "AI\n", + "DevOps\n", + "Security\n", + "Software Development\n", + "View all\n", + "Explore\n", + "Learning Pathways\n", + "White papers, Ebooks, Webinars\n", + "Customer Stories\n", + "Partners\n", + "Executive Insights\n", + "Open Source\n", + "GitHub Sponsors\n", + "Fund open source developers\n", + "The ReadME Project\n", + "GitHub community articles\n", + "Repositories\n", + "Topics\n", + "Trending\n", + "Collections\n", + "Enterprise\n", + "Enterprise platform\n", + "AI-powered developer platform\n", + "Available add-ons\n", + "Advanced Security\n", + "Enterprise-grade security features\n", + "GitHub Copilot\n", + "Enterprise-grade AI features\n", + "Premium Support\n", + "Enterprise-grade 24/7 support\n", + "Pricing\n", + "Search or jump to...\n", + "Search code, repositories, users, issues, pull requests...\n", + "Search\n", + "Clear\n", + "Search syntax tips\n", + "Provide feedback\n", + "We read every piece of feedback, and take your input very seriously.\n", + "Include my email address so I can be contacted\n", + "Cancel\n", + "Submit feedback\n", + "Saved searches\n", + "Use saved searches to filter your results more quickly\n", + "Cancel\n", + "Create saved search\n", + "Sign in\n", + "Sign up\n", + "Reseting focus\n", + "You signed in with another tab or window.\n", + "Reload\n", + "to refresh your session.\n", + "You signed out in another tab or window.\n", + "Reload\n", + "to refresh your session.\n", + "You switched accounts on another tab or window.\n", + "Reload\n", + "to refresh your session.\n", + "Dismiss alert\n", + "Hugging Face\n", + "The AI community building the future.\n", + "Verified\n", + "We've verified that the organization\n", + "huggingface\n", + "controls the domain:\n", + "huggingface.co\n", + "Learn more about verified organizations\n", + "40.1k\n", + "followers\n", + "NYC + Paris\n", + "https://huggingface.co/\n", + "X\n", + "@huggingface\n", + "Overview\n", + "Repositories\n", + "Projects\n", + "Packages\n", + "People\n", + "Sponsoring\n", + "0\n", + "More\n", + "Overview\n", + "Repositories\n", + "Projects\n", + "Packages\n", + "People\n", + "Sponsoring\n", + "Pinned\n", + "Loading\n", + "transformers\n", + "transformers\n", + "Public\n", + "🤗 Transformers: State-of-the-art Machine Learning for Pytorch, TensorFlow, and JAX.\n", + "Python\n", + "137k\n", + "27.3k\n", + "diffusers\n", + "diffusers\n", + "Public\n", + "🤗 Diffusers: State-of-the-art diffusion models for image and audio generation in PyTorch and FLAX.\n", + "Python\n", + "26.7k\n", + "5.5k\n", + "datasets\n", + "datasets\n", + "Public\n", + "🤗 The largest hub of ready-to-use datasets for ML models with fast, easy-to-use and efficient data manipulation tools\n", + "Python\n", + "19.4k\n", + "2.7k\n", + "peft\n", + "peft\n", + "Public\n", + "🤗 PEFT: State-of-the-art Parameter-Efficient Fine-Tuning.\n", + "Python\n", + "16.8k\n", + "1.7k\n", + "accelerate\n", + "accelerate\n", + "Public\n", + "🚀 A simple way to launch, train, and use PyTorch models on almost any device and distributed configuration, automatic mixed precision (including fp8), and easy-to-configure FSDP and DeepSpeed support\n", + "Python\n", + "8.1k\n", + "995\n", + "optimum\n", + "optimum\n", + "Public\n", + "🚀 Accelerate inference and training of 🤗 Transformers, Diffusers, TIMM and Sentence Transformers with easy to use hardware optimization tools\n", + "Python\n", + "2.6k\n", + "486\n", + "Repositories\n", + "Loading\n", + "Type\n", + "Select type\n", + "Forks\n", + "Archived\n", + "Mirrors\n", + "Templates\n", + "Language\n", + "Select language\n", + "All\n", + "C\n", + "C#\n", + "C++\n", + "Cuda\n", + "Dockerfile\n", + "Go\n", + "Handlebars\n", + "HTML\n", + "Java\n", + "JavaScript\n", + "Jupyter Notebook\n", + "Kotlin\n", + "Lua\n", + "MDX\n", + "Mustache\n", + "Nix\n", + "Python\n", + "Rust\n", + "Shell\n", + "Smarty\n", + "Swift\n", + "TypeScript\n", + "Sort\n", + "Select order\n", + "Last updated\n", + "Name\n", + "Stars\n", + "Showing 10 of 275 repositories\n", + "trl\n", + "Public\n", + "Train transformer language models with reinforcement learning.\n", + "huggingface/trl’s past year of commit activity\n", + "Python\n", + "10,382\n", + "Apache-2.0\n", + "1,337\n", + "106\n", + "46\n", + "Updated\n", + "Dec 21, 2024\n", + "transformers.js\n", + "Public\n", + "State-of-the-art Machine Learning for the web. Run 🤗 Transformers directly in your browser, with no need for a server!\n", + "huggingface/transformers.js’s past year of commit activity\n", + "JavaScript\n", + "12,421\n", + "Apache-2.0\n", + "790\n", + "274\n", + "(3 issues need help)\n", + "48\n", + "Updated\n", + "Dec 21, 2024\n", + "diffusers\n", + "Public\n", + "🤗 Diffusers: State-of-the-art diffusion models for image and audio generation in PyTorch and FLAX.\n", + "huggingface/diffusers’s past year of commit activity\n", + "Python\n", + "26,740\n", + "Apache-2.0\n", + "5,504\n", + "379\n", + "(10 issues need help)\n", + "169\n", + "Updated\n", + "Dec 21, 2024\n", + "text-generation-inference\n", + "Public\n", + "Large Language Model Text Generation Inference\n", + "huggingface/text-generation-inference’s past year of commit activity\n", + "Python\n", + "9,484\n", + "Apache-2.0\n", + "1,106\n", + "152\n", + "21\n", + "Updated\n", + "Dec 21, 2024\n", + "candle\n", + "Public\n", + "Minimalist ML framework for Rust\n", + "huggingface/candle’s past year of commit activity\n", + "Rust\n", + "16,103\n", + "Apache-2.0\n", + "980\n", + "344\n", + "(5 issues need help)\n", + "86\n", + "Updated\n", + "Dec 21, 2024\n", + "autotrain-advanced\n", + "Public\n", + "🤗 AutoTrain Advanced\n", + "huggingface/autotrain-advanced’s past year of commit activity\n", + "Python\n", + "4,157\n", + "Apache-2.0\n", + "505\n", + "16\n", + "2\n", + "Updated\n", + "Dec 21, 2024\n", + "transformers\n", + "Public\n", + "🤗 Transformers: State-of-the-art Machine Learning for Pytorch, TensorFlow, and JAX.\n", + "huggingface/transformers’s past year of commit activity\n", + "Python\n", + "136,571\n", + "Apache-2.0\n", + "27,342\n", + "1,003\n", + "(2 issues need help)\n", + "526\n", + "Updated\n", + "Dec 21, 2024\n", + "lighteval\n", + "Public\n", + "Lighteval is your all-in-one toolkit for evaluating LLMs across multiple backends\n", + "huggingface/lighteval’s past year of commit activity\n", + "Python\n", + "889\n", + "MIT\n", + "109\n", + "62\n", + "(1 issue needs help)\n", + "15\n", + "Updated\n", + "Dec 21, 2024\n", + "hub-docs\n", + "Public\n", + "Docs of the Hugging Face Hub\n", + "huggingface/hub-docs’s past year of commit activity\n", + "Handlebars\n", + "309\n", + "Apache-2.0\n", + "259\n", + "90\n", + "25\n", + "Updated\n", + "Dec 21, 2024\n", + "optimum-habana\n", + "Public\n", + "Easy and lightning fast training of 🤗 Transformers on Habana Gaudi processor (HPU)\n", + "huggingface/optimum-habana’s past year of commit activity\n", + "Python\n", + "162\n", + "Apache-2.0\n", + "219\n", + "11\n", + "(1 issue needs help)\n", + "40\n", + "Updated\n", + "Dec 21, 2024\n", + "View all repositories\n", + "People\n", + "View all\n", + "Top languages\n", + "Python\n", + "Jupyter Notebook\n", + "Rust\n", + "TypeScript\n", + "JavaScript\n", + "Most used topics\n", + "pytorch\n", + "machine-learning\n", + "nlp\n", + "deep-learning\n", + "transformers\n", + "Footer\n", + "© 2024 GitHub, Inc.\n", + "Footer navigation\n", + "Terms\n", + "Privacy\n", + "Security\n", + "Status\n", + "Docs\n", + "Contact\n", + "Manage cookies\n", + "Do not share my personal information\n", + "You can’t perform that action at this time.\n", + "\n", + "\n", + "\n", + "Twitter page\n", + "Webpage Title:\n", + "x.com\n", + "Webpage Contents:\n", + "\n", + "\n", + "\n", + "\n", + "LinkedIn page\n", + "Webpage Title:\n", + "Hugging Face | LinkedIn\n", + "Webpage Contents:\n", + "Skip to main content\n", + "LinkedIn\n", + "Articles\n", + "People\n", + "Learning\n", + "Jobs\n", + "Games\n", + "Get the app\n", + "Join now\n", + "Sign in\n", + "Hugging Face\n", + "Software Development\n", + "The AI community building the future.\n", + "See jobs\n", + "Follow\n", + "Discover all 472 employees\n", + "Report this company\n", + "About us\n", + "The AI community building the future.\n", + "Website\n", + "https://huggingface.co\n", + "External link for Hugging Face\n", + "Industry\n", + "Software Development\n", + "Company size\n", + "51-200 employees\n", + "Type\n", + "Privately Held\n", + "Founded\n", + "2016\n", + "Specialties\n", + "machine learning, natural language processing, and deep learning\n", + "Products\n", + "Hugging Face\n", + "Hugging Face\n", + "Natural Language Processing (NLP) Software\n", + "We‚Äôre on a journey to solve and democratize artificial intelligence through natural language.\n", + "Locations\n", + "Primary\n", + "Get directions\n", + "Paris, FR\n", + "Get directions\n", + "Employees at Hugging Face\n", + "Ludovic Huraux\n", + "Bassem ASSEH\n", + "Rajat Arya\n", + "Tech Lead & Software Engineer @ HF | prev: co-founder XetHub, Apple, Turi, AWS, Microsoft\n", + "Jeff Boudier\n", + "Product + Growth at Hugging Face\n", + "See all employees\n", + "Updates\n", + "Hugging Face\n", + "reposted this\n", + "Gradio\n", + "47,326 followers\n", + "7h\n", + "Report this post\n", + "NOW you can add AI to your Slack, Discord in just few steps with Gradio!ü§©\n", + "\n", + "üî•Create Slack apps, Discord bots, or Intercom-style website widgets in ANY modality (Text, image, Video, Audio, Omni etc)! Keep reading to learn how ‚¨áÔ∏è\n", + "\n", + "Guide: üöÄ Creating a Slack Bot from a Gradio App üöÄ\n", + "Read here:\n", + "https://lnkd.in/g2_Bydrj\n", + "ü§éDo you love building stuff with Gradio? Support us on GitHub:\n", + "Gradio.dev\n", + "‚Ķmore\n", + "50\n", + "Like\n", + "Comment\n", + "Share\n", + "Hugging Face\n", + "reposted this\n", + "Daniel V.\n", + "Machine Learning Librarian@ü§ó | Championing Open Science & Machine Learning\n", + "21h\n", + "Report this post\n", + "Introducing FineWeb-C üåêüéì, a community-built dataset for improving language models in ALL languages. \n", + "\n", + "Inspired by FineWeb-Edu the community is labelling the educational quality of texts for many languages. \n", + "\n", + "318 annotators, 32K+ annotations, 12 languages - and growing!üåç\n", + "57\n", + "2 Comments\n", + "Like\n", + "Comment\n", + "Share\n", + "Hugging Face\n", + "reposted this\n", + "Merve Noyan\n", + "open-sourceress at ü§ó | Google Developer Expert in Machine Learning, MSc Candidate in Data Science\n", + "22h\n", + "Report this post\n", + "Fine-tune ColPali for your multimodal RAG use case üî•\n", + "\n", + "ColPali just landed to\n", + "Hugging Face\n", + "transformers and I have built a simple fine-tuning tutorial with QLoRA ü§ó\n", + "You can fine-tune the model with 32 GB VRAM with batch size of 4 (which can run on Colab A100)\n", + "Link in comments üí¨\n", + "267\n", + "4 Comments\n", + "Like\n", + "Comment\n", + "Share\n", + "Hugging Face\n", + "reposted this\n", + "ü§ñ Avthar Sewrathan\n", + "AI and Developer Product Leader | I talk about using AI and building AI apps\n", + "1d\n", + "Report this post\n", + "TIL: You can now load any\n", + "Hugging Face\n", + "dataset into PostgreSQL with just 1 line of SQL ü§Ø\n", + "\n", + "All thanks to the pgai PostgreSQL extension. \n", + "\n", + "Shoutout to\n", + "Matvey Arye\n", + "from the\n", + "Timescale\n", + "AI engineering team for implementing this.\n", + "\n", + "Learn more about using PostgreSQL with HuggingFace datasets in the HuggingFace docs:\n", + "https://lnkd.in/eS4hqSDq\n", + "#postgresql\n", + "#huggingface\n", + "#opensource\n", + "180\n", + "14 Comments\n", + "Like\n", + "Comment\n", + "Share\n", + "Hugging Face\n", + "reposted this\n", + "Argilla\n", + "10,266 followers\n", + "1d\n", + "Report this post\n", + "üé¢ Push to Hub: Export your dataset to the Hugging Face Hub directly from the Argilla UI.\n", + "\n", + "We‚Äôre super excited to announce that we've closed the loop: now you can load a dataset from the Hub, open it on\n", + "Argilla\n", + "UI, label it, and push the annotated dataset to the Hub. All this without a line of code!\n", + "\n", + "\n", + "ùó™ùóµùòÜ ùòÄùóµùóºùòÇùóπùó± ùòÜùóºùòÇ ùòÇùòÄùó≤ ùó∂ùòÅ?\n", + "\n", + "Your AI project's impact depends heavily on the effort and care you put into your data. This new feature enables you to iterate faster and make annotated data available in the right format for training and evaluation.\n", + "\n", + "\n", + "ùóõùóºùòÑ ùó±ùóºùó≤ùòÄ ùó∂ùòÅ ùòÑùóºùóøùó∏?\n", + "\n", + "1Ô∏è‚É£ Import initial data from a CSV or any format to Hugging Face\n", + "2Ô∏è‚É£ Load it into the Argilla UI and configure the annotation task\n", + "3Ô∏è‚É£ Annotate your dataset\n", + "üöÄ Click on ‚ÄúPush to Hub‚Äù and share the dataset with your team (or the entire world)\n", + "\n", + "üëâ ùó•ùó≤ùóÆùó±ùòÜ ùòÅùóº ùòÅùóøùòÜ ùó∂ùòÅ ùóºùòÇùòÅ?\n", + "\n", + "Get started here:\n", + "https://lnkd.in/dhA-swR5\n", + "Release highlights:\n", + "https://lnkd.in/dbdQXG-W\n", + "35\n", + "3 Comments\n", + "Like\n", + "Comment\n", + "Share\n", + "Hugging Face\n", + "reposted this\n", + "Daniel V.\n", + "Machine Learning Librarian@ü§ó | Championing Open Science & Machine Learning\n", + "1d\n", + "Report this post\n", + "Hot take: shipping BERT-sized models in 2025 will benefit far more people than sharing an LLM overfitted to some saturated leaderboards \n", + "\n", + "We're already seeing ModernBERT finetunes on the\n", + "Hugging Face\n", + "Hub. My guess is we'll see hundreds of these by the end of 2025.\n", + "80\n", + "4 Comments\n", + "Like\n", + "Comment\n", + "Share\n", + "Hugging Face\n", + "reposted this\n", + "Gradio\n", + "47,326 followers\n", + "1d\n", + "Edited\n", + "Report this post\n", + "ü§Øüî•LEARN HOW TO CREATE interactive agentic chatbots using Gradio that are capable of showcasing the Thoughts, Tasks, and interim responses of Multiple Agents as you await the final answer from your AI assistant.\n", + "\n", + "üéØ Customer Support multi-agents with\n", + "CrewAI\n", + "and\n", + "Gradio\n", + "Showcasing here, a user-friendly, high-performing multi-agent gradio app. TO operate it, simply enter a webpage URL along with your questions related to that page, and in turn receive a high-quality response from the CrewAI Multi-Agent setup.\n", + "\n", + "üöÄAccess this app on\n", + "Hugging Face\n", + "Spaces:\n", + "https://lnkd.in/g6kXp_D2\n", + "‚Ķmore\n", + "72\n", + "1 Comment\n", + "Like\n", + "Comment\n", + "Share\n", + "Hugging Face\n", + "reposted this\n", + "Clem Delangue ü§ó\n", + "Clem Delangue ü§ó is an Influencer\n", + "Co-founder & CEO at Hugging Face\n", + "2d\n", + "Report this post\n", + "In the past few months, we've invested a lot of efforts in improving the user management features of the Hugging Face hub that more than 5M AI builder are now using. It helps not only for easier organization collaboration but also for security (for example to make sure ex team members don't still have access to private models). \n", + "\n", + "If your manager, VP AI or admin/CISO is not aware, mention them below so that we can connect if they have any questions or feedback as most of these features are part of the Enterprise hub subscriptions:\n", + "https://lnkd.in/e-RY-3vs\n", + ")\n", + "\n", + "Cheers!\n", + "47\n", + "3 Comments\n", + "Like\n", + "Comment\n", + "Share\n", + "Hugging Face\n", + "reposted this\n", + "Clem Delangue ü§ó\n", + "Clem Delangue ü§ó is an Influencer\n", + "Co-founder & CEO at Hugging Face\n", + "4d\n", + "Report this post\n", + "Just 10 days after o1's public debut, we‚Äôre thrilled to unveil the open-source version of the groundbreaking technique behind its success: scaling test-time compute ü߆üí° \n", + "\n", + "By giving models more \"time to think,\" Llama 1B outperforms Llama 8B in math‚Äîbeating a model 8x its size. The full recipe is open-sourceü§Ø \n", + "\n", + "This is the power of open science and open-source AI! üåç‚ú®\n", + "5,292\n", + "125 Comments\n", + "Like\n", + "Comment\n", + "Share\n", + "Hugging Face\n", + "reposted this\n", + "Philipp Schmid\n", + "Technical Lead & LLMs at Hugging Face ü§ó | AWS ML HERO ü¶∏ü誂ôÇÔ∏è\n", + "1d\n", + "Report this post\n", + "ModernBERT, BERT revisited in the age of LLMs and Generative AI!\n", + "LightOn\n", + "and\n", + "Answer.ai\n", + "modernized BERT! Improved architecture with 8192 context length, flash attention, and trained on 2T tokens. ModernBERT outperforms version BERT and RoBERTa versions! üëÄ\n", + "\n", + "TL;DR;\n", + "2Ô∏è‚É£¬†Comes in 2 sizes base (139M) and large (395M)\n", + "üöĬ†Better performance across all metrics than the original BERT\n", + "üìè 8,192 token context length (16x longer than BERT)\n", + "‚ö° Modern architecture with Flash Attention 2, RoPE embeddings, and alternating attention\n", + "üìö Trained on 2 trillion tokens, primarily English and Code\n", + "üí® 2-4x faster than other models with mixed-length inputs\n", + "üî쬆Released under Apache 2.0\n", + "ü§ó¬†Available on\n", + "Hugging Face\n", + "and Transformers (main)\n", + "\n", + "Models:\n", + "https://lnkd.in/ethiJ2xh\n", + "Blog:\n", + "https://lnkd.in/ebiEzb4P\n", + "Paper:\n", + "https://lnkd.in/ezR8MUBF\n", + "1,844\n", + "67 Comments\n", + "Like\n", + "Comment\n", + "Share\n", + "Join now to see what you are missing\n", + "Find people you know at Hugging Face\n", + "Browse recommended jobs for you\n", + "View all updates, news, and articles\n", + "Join now\n", + "Similar pages\n", + "Anthropic\n", + "Research Services\n", + "Mistral AI\n", + "Technology, Information and Internet\n", + "Paris, France\n", + "OpenAI\n", + "Research Services\n", + "San Francisco, CA\n", + "LangChain\n", + "Technology, Information and Internet\n", + "Perplexity\n", + "Software Development\n", + "San Francisco, California\n", + "Generative AI\n", + "Technology, Information and Internet\n", + "Google DeepMind\n", + "Research Services\n", + "London, London\n", + "LlamaIndex\n", + "Technology, Information and Internet\n", + "San Francisco, California\n", + "DeepLearning.AI\n", + "Software Development\n", + "Palo Alto, California\n", + "Cohere\n", + "Software Development\n", + "Toronto, Ontario\n", + "Show more similar pages\n", + "Show fewer similar pages\n", + "Browse jobs\n", + "Engineer jobs\n", + "555,845 open jobs\n", + "Machine Learning Engineer jobs\n", + "148,937 open jobs\n", + "Scientist jobs\n", + "48,969 open jobs\n", + "Software Engineer jobs\n", + "300,699 open jobs\n", + "Intern jobs\n", + "71,196 open jobs\n", + "Developer jobs\n", + "258,935 open jobs\n", + "Analyst jobs\n", + "694,057 open jobs\n", + "Intelligence Specialist jobs\n", + "7,156 open jobs\n", + "Manager jobs\n", + "1,880,925 open jobs\n", + "Data Scientist jobs\n", + "264,158 open jobs\n", + "Director jobs\n", + "1,220,357 open jobs\n", + "Associate jobs\n", + "1,091,945 open jobs\n", + "Python Developer jobs\n", + "46,642 open jobs\n", + "Evangelist jobs\n", + "5,068 open jobs\n", + "Data Engineer jobs\n", + "192,126 open jobs\n", + "Vice President jobs\n", + "235,270 open jobs\n", + "Quantitative Analyst jobs\n", + "19,570 open jobs\n", + "Program Manager jobs\n", + "243,900 open jobs\n", + "Data Science Specialist jobs\n", + "2,441 open jobs\n", + "Lead Software Engineer jobs\n", + "68,215 open jobs\n", + "Show more jobs like this\n", + "Show fewer jobs like this\n", + "Funding\n", + "Hugging Face\n", + "7 total rounds\n", + "Last Round\n", + "Series D\n", + "Feb 16, 2024\n", + "External Crunchbase Link for last round of funding\n", + "See more info on\n", + "crunchbase\n", + "More searches\n", + "More searches\n", + "Engineer jobs\n", + "Intern jobs\n", + "Machine Learning Engineer jobs\n", + "Software Engineer jobs\n", + "Scientist jobs\n", + "Developer jobs\n", + "Research Intern jobs\n", + "Analyst jobs\n", + "Intelligence Specialist jobs\n", + "Quantitative Analyst jobs\n", + "Technician jobs\n", + "Data Science Specialist jobs\n", + "Project Manager jobs\n", + "Summer Intern jobs\n", + "Manager jobs\n", + "Senior Staff Engineer jobs\n", + "PHD jobs\n", + "Trader jobs\n", + "Researcher jobs\n", + "Data Scientist jobs\n", + "Writer jobs\n", + "Data Analyst jobs\n", + "Product Designer jobs\n", + "Back End Developer jobs\n", + "Spring Intern jobs\n", + "Program Manager jobs\n", + "Technology Officer jobs\n", + "Software Intern jobs\n", + "Security Professional jobs\n", + "Senior Software Engineer jobs\n", + "Python Developer jobs\n", + "Engineering Manager jobs\n", + "Web Developer jobs\n", + "Graduate jobs\n", + "Full Stack Engineer jobs\n", + "Professor jobs\n", + "Head jobs\n", + "Verification Manager jobs\n", + "User Experience Designer jobs\n", + "Recruiter jobs\n", + "Chief Executive Officer jobs\n", + "Associate jobs\n", + "Support Developer jobs\n", + "Senior Firmware Engineer jobs\n", + "Marketing Manager jobs\n", + "Modeling Engineer jobs\n", + "Designer jobs\n", + "Automation Lead jobs\n", + "Options Trader jobs\n", + "Agile Coach jobs\n", + "Research Engineer jobs\n", + "Software Quality Assurance Analyst jobs\n", + "User Experience Manager jobs\n", + "Technical Intern jobs\n", + "Junior Network Engineer jobs\n", + "Information Technology Recruiter jobs\n", + "User Researcher jobs\n", + "Player jobs\n", + "Engineering Project Manager jobs\n", + "Digital Strategist jobs\n", + "LinkedIn\n", + "© 2024\n", + "About\n", + "Accessibility\n", + "User Agreement\n", + "Privacy Policy\n", + "Cookie Policy\n", + "Copyright Policy\n", + "Brand Policy\n", + "Guest Controls\n", + "Community Guidelines\n", + "ÿߟÑÿπÿ±ÿ®Ÿäÿ© (Arabic)\n", + "‡¶¨‡¶æ‡¶Ç‡¶≤‡¶æ (Bangla)\n", + "ƒåe≈°tina (Czech)\n", + "Dansk (Danish)\n", + "Deutsch (German)\n", + "ŒïŒªŒªŒ∑ŒΩŒπŒ∫Œ¨ (Greek)\n", + "English (English)\n", + "Espa√±ol (Spanish)\n", + "ŸÅÿßÿ±ÿ≥€å (Persian)\n", + "Suomi (Finnish)\n", + "Fran√ßais (French)\n", + "‡§π‡§ø‡§Ç‡§¶‡•Ä (Hindi)\n", + "Magyar (Hungarian)\n", + "Bahasa Indonesia (Indonesian)\n", + "Italiano (Italian)\n", + "◊¢◊ë◊®◊ô◊™ (Hebrew)\n", + "Êó•Êú¨Ë™û (Japanese)\n", + "Ìïú͵≠Ïñ¥ (Korean)\n", + "‡§Æ‡§∞‡§æ‡§†‡•Ä (Marathi)\n", + "Bahasa Malaysia (Malay)\n", + "Nederlands (Dutch)\n", + "Norsk (Norwegian)\n", + "‡®™‡©∞‡®ú‡®æ‡®¨‡©Ä (Punjabi)\n", + "Polski (Polish)\n", + "Portugu√™s (Portuguese)\n", + "Rom√¢nƒÉ (Romanian)\n", + "–†—É—Å—Å–∫–∏–π (Russian)\n", + "Svenska (Swedish)\n", + "‡∞§‡±Ü‡∞≤‡±Å‡∞ó‡±Å (Telugu)\n", + "‡∏†‡∏≤‡∏©‡∏≤‡πч∏ó‡∏¢ (Thai)\n", + "Tagalog (Tagalog)\n", + "T√ºrk√ße (Turkish)\n", + "–£–∫—Ä–∞—ó–Ω—Å—å–∫–∞ (Ukrainian)\n", + "Ti·∫øng Vi·ªát (Vietnamese)\n", + "ÁÆÄ‰Ωì‰∏≠Êñá (Chinese (Simplified))\n", + "Ê≠£È´î‰∏≠Êñá (Chinese (Traditional))\n", + "Language\n", + "Agree & Join LinkedIn\n", + "By clicking Continue to join or sign in, you agree to LinkedIn‚Äôs\n", + "User Agreement\n", + ",\n", + "Privacy Policy\n", + ", and\n", + "Cookie Policy\n", + ".\n", + "Sign in to see who you already know at Hugging Face\n", + "Sign in\n", + "Welcome back\n", + "Email or phone\n", + "Password\n", + "Show\n", + "Forgot password?\n", + "Sign in\n", + "or\n", + "By clicking Continue to join or sign in, you agree to LinkedIn‚Äôs\n", + "User Agreement\n", + ",\n", + "Privacy Policy\n", + ", and\n", + "Cookie Policy\n", + ".\n", + "New to LinkedIn?\n", + "Join now\n", + "or\n", + "New to LinkedIn?\n", + "Join now\n", + "By clicking Continue to join or sign in, you agree to LinkedIn‚Äôs\n", + "User Agreement\n", + ",\n", + "Privacy Policy\n", + ", and\n", + "Cookie Policy\n", + ".\n", + "LinkedIn\n", + "LinkedIn is better on the app\n", + "Don‚Äôt have the app? Get it in the Microsoft Store.\n", + "Open the app\n", + "\n", + "\n" + ] + } + ], + "source": [ + "print(get_all_details(\"https://huggingface.co\"))" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "9b863a55-f86c-4e3f-8a79-94e24c1a8cf2", + "metadata": {}, + "outputs": [], + "source": [ + "system_prompt = \"You are an assistant that analyzes the contents of several relevant pages from a company website \\\n", + "and creates a short brochure about the company for prospective customers, investors and recruits. Respond in markdown.\\\n", + "Include details of company culture, customers and careers/jobs if you have the information.\"\n", + "\n", + "# Or uncomment the lines below for a more humorous brochure - this demonstrates how easy it is to incorporate 'tone':\n", + "\n", + "# system_prompt = \"You are an assistant that analyzes the contents of several relevant pages from a company website \\\n", + "# and creates a short humorous, entertaining, jokey brochure about the company for prospective customers, investors and recruits. Respond in markdown.\\\n", + "# Include details of company culture, customers and careers/jobs if you have the information.\"\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "6ab83d92-d36b-4ce0-8bcc-5bb4c2f8ff23", + "metadata": {}, + "outputs": [], + "source": [ + "def get_brochure_user_prompt(company_name, url):\n", + " user_prompt = f\"You are looking at a company called: {company_name}\\n\"\n", + " user_prompt += f\"Here are the contents of its landing page and other relevant pages; use this information to build a short brochure of the company in markdown.\\n\"\n", + " user_prompt += get_all_details(url)\n", + " user_prompt = user_prompt[:5_000] # Truncate if more than 5,000 characters\n", + " return user_prompt" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "cd909e0b-1312-4ce2-a553-821e795d7572", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Found links: {'links': [{'type': 'about page', 'url': 'https://huggingface.co/'}, {'type': 'careers page', 'url': 'https://apply.workable.com/huggingface/'}, {'type': 'blog', 'url': 'https://huggingface.co/blog'}, {'type': 'company page', 'url': 'https://huggingface.co/enterprise'}]}\n", + "You are looking at a company called: HuggingFace\n", + "Here are the contents of its landing page and other relevant pages; use this information to build a short brochure of the company in markdown.\n", + "Landing page:\n", + "Webpage Title:\n", + "Hugging Face – The AI community building the future.\n", + "Webpage Contents:\n", + "Hugging Face\n", + "Models\n", + "Datasets\n", + "Spaces\n", + "Posts\n", + "Docs\n", + "Enterprise\n", + "Pricing\n", + "Log In\n", + "Sign Up\n", + "The AI community building the future.\n", + "The platform where the machine learning community collaborates on models, datasets, and applications.\n", + "Trending on\n", + "this week\n", + "Models\n", + "IamCreateAI/Ruyi-Mini-7B\n", + "Updated\n", + "4 days ago\n", + "•\n", + "8.17k\n", + "•\n", + "352\n", + "Datou1111/shou_xin\n", + "Updated\n", + "12 days ago\n", + "•\n", + "28.3k\n", + "•\n", + "672\n", + "answerdotai/ModernBERT-base\n", + "Updated\n", + "1 day ago\n", + "•\n", + "6.24k\n", + "•\n", + "236\n", + "meta-llama/Llama-3.3-70B-Instruct\n", + "Updated\n", + "11 days ago\n", + "•\n", + "236k\n", + "•\n", + "1.21k\n", + "tencent/HunyuanVideo\n", + "Updated\n", + "3 days ago\n", + "•\n", + "6.01k\n", + "•\n", + "1.2k\n", + "Browse 400k+ models\n", + "Spaces\n", + "Running\n", + "on\n", + "Zero\n", + "1.79k\n", + "🏢\n", + "TRELLIS\n", + "Scalable and Versatile 3D Generation from images\n", + "Running\n", + "306\n", + "📝\n", + "Scaling test-time compute\n", + "Running\n", + "on\n", + "Zero\n", + "470\n", + "🚀\n", + "Flux Style Shaping\n", + "Optical illusions and style transfer with FLUX\n", + "Running\n", + "on\n", + "CPU Upgrade\n", + "6.11k\n", + "👕\n", + "Kolors Virtual Try-On\n", + "Running\n", + "on\n", + "Zero\n", + "965\n", + "📈\n", + "IC Light V2\n", + "Browse 150k+ applications\n", + "Datasets\n", + "fka/awesome-chatgpt-prompts\n", + "Updated\n", + "Sep 3\n", + "•\n", + "6.83k\n", + "•\n", + "6.58k\n", + "O1-OPEN/OpenO1-SFT\n", + "Updated\n", + "4 days ago\n", + "•\n", + "1.86k\n", + "•\n", + "234\n", + "HuggingFaceFW/fineweb-2\n", + "Updated\n", + "13 days ago\n", + "•\n", + "77.7k\n", + "•\n", + "342\n", + "HuggingFaceTB/finemath\n", + "Updated\n", + "1 day ago\n", + "•\n", + "1.86k\n", + "•\n", + "43\n", + "amphora/QwQ-LongCoT-130K\n", + "Updated\n", + "16 days ago\n", + "•\n", + "1.34k\n", + "•\n", + "85\n", + "Browse 100k+ datasets\n", + "The Home of Machine Learning\n", + "Create, discover and collaborate on ML better.\n", + "The collaboration platform\n", + "Host and collaborate on unlimited public models, datasets and applications.\n", + "Move faster\n", + "With the HF Open source stack.\n", + "Explore all modalities\n", + "Text, image, video, audio or even 3D.\n", + "Build your portfolio\n", + "Share your work with the world and build your ML profile.\n", + "Sign Up\n", + "Accelerate your ML\n", + "We provide paid Compute and Enterprise solutions.\n", + "Compute\n", + "Deploy on optimized\n", + "Inference Endpoints\n", + "or update your\n", + "Spaces applications\n", + "to a GPU in a few clicks.\n", + "View pricing\n", + "Starting at $0.60/hour for GPU\n", + "Enterprise\n", + "Give your team the most advanced platform to build AI with enterprise-grade security, access controls and\n", + "\t\t\tdedicated support.\n", + "Getting started\n", + "Starting at $20/user/month\n", + "Single Sign-On\n", + "Regions\n", + "Priority Support\n", + "Audit Logs\n", + "Resource Groups\n", + "Private Datasets Viewer\n", + "More than 50,000 organizations are using Hugging Face\n", + "Ai2\n", + "Enterprise\n", + "non-profit\n", + "•\n", + "366 models\n", + "•\n", + "1.76k followers\n", + "AI at Meta\n", + "Enterprise\n", + "company\n", + "•\n", + "2.05k models\n", + "•\n", + "3.83k followers\n", + "Amazon Web Services\n", + "company\n", + "•\n", + "21 models\n", + "•\n", + "2.45k followers\n", + "Google\n", + "company\n", + "•\n", + "911 models\n", + "•\n", + "5.76k followers\n", + "Intel\n", + "company\n", + "•\n", + "217 models\n", + "•\n", + "2.07k followers\n", + "Microsoft\n", + "company\n", + "•\n", + "351 models\n", + "•\n", + "6.29k followers\n", + "Grammarly\n", + "company\n", + "•\n", + "10 models\n", + "•\n", + "102 followers\n", + "Writer\n", + "Enterprise\n", + "company\n", + "•\n", + "17 models\n", + "•\n", + "186 followers\n", + "Our Open Source\n", + "We are building the foundation of ML tooling with the community.\n", + "Transformers\n", + "136,571\n", + "State-of-the-art ML for Pytorch, TensorFlow, and JAX.\n", + "Diffusers\n", + "26,740\n", + "State-of-the-art diffusion models for image and audio generation in PyTorch.\n", + "Safetensors\n", + "2,960\n", + "Simple, safe way to store and distribute neural networks weights safely and quickly.\n", + "Hub Python Library\n", + "2,177\n", + "Client library for the HF Hub: manage repositories from your Python runtime.\n", + "Tokenizers\n", + "9,165\n", + "Fast tokenizers, optimized for both research and production.\n", + "PEFT\n", + "16,767\n", + "Parameter efficient finetuning methods for large models.\n", + "Transformers.js\n", + "12,421\n", + "State-of-the-art Machine Learning for the web. Run Transformers directly in your browser, with no need for a server.\n", + "timm\n", + "32,668\n", + "State-of-the-art computer vision models, layers, optimizers, training/evaluation, and utilities.\n", + "TRL\n", + "10,382\n", + "Train transformer language models with reinforcement learning.\n", + "Datasets\n", + "19,378\n", + "Access and share datasets for computer vision, audio, and NLP tasks.\n", + "Text Generation Inference\n", + "9,484\n", + "Toolkit to serve Large Language Models.\n", + "Accelerate\n", + "8,082\n", + "Easily train and use PyTorch models with multi-GPU, TPU, mixed-precision.\n", + "System theme\n", + "Website\n", + "Models\n", + "Datasets\n", + "Spaces\n", + "Tasks\n", + "Inference Endpoints\n", + "HuggingChat\n", + "Company\n", + "About\n", + "Brand assets\n", + "Terms of service\n", + "Privacy\n", + "Jobs\n", + "Press\n", + "Resources\n", + "Learn\n", + "Documentation\n", + "Blog\n", + "Forum\n", + "Service Status\n", + "Social\n", + "GitHub\n", + "Twitter\n", + "LinkedIn\n", + "Discord\n", + "\n", + "\n", + "\n", + "about page\n", + "Webpage Title:\n", + "Hugging Face – The AI community building the future.\n", + "Webpage Contents:\n", + "Hugging Face\n", + "Models\n", + "Datasets\n", + "Spaces\n", + "Posts\n", + "Docs\n", + "Enterprise\n", + "Pricing\n", + "Log In\n", + "Sign Up\n", + "The AI community building the future.\n", + "The platform where the machine learning community collaborates on models, datasets, and applications.\n", + "Trending on\n", + "this week\n", + "Models\n", + "IamCreateAI/Ruyi-Mini-7B\n", + "Updated\n", + "4 days ago\n", + "•\n", + "8.17k\n", + "•\n", + "352\n", + "Datou1111/shou_xin\n", + "Updated\n", + "12 days ago\n", + "•\n", + "28.3k\n", + "•\n", + "672\n", + "answerdotai/ModernBERT-base\n", + "Updated\n", + "1 day ago\n", + "•\n", + "6.24k\n", + "•\n", + "236\n", + "meta-llama/Llama-3.3-70B-Instruct\n", + "Updated\n", + "11 days ago\n", + "•\n", + "236k\n", + "•\n", + "1.21k\n", + "tencent/HunyuanVideo\n", + "Updated\n", + "3 days ago\n", + "•\n", + "6.01k\n", + "•\n", + "1.2k\n", + "Browse 400k+ models\n", + "Spaces\n", + "Running\n", + "on\n", + "Zero\n", + "1.79k\n", + "🏢\n", + "TRELLIS\n", + "Scalable and Versatile 3D Generation from images\n", + "\n" + ] + } + ], + "source": [ + "print(get_brochure_user_prompt(\"HuggingFace\", \"https://huggingface.co\"))" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "e44de579-4a1a-4e6a-a510-20ea3e4b8d46", + "metadata": {}, + "outputs": [], + "source": [ + "def create_brochure(company_name, url):\n", + " response = openai.chat.completions.create(\n", + " model=MODEL,\n", + " messages=[\n", + " {\"role\": \"system\", \"content\": system_prompt},\n", + " {\"role\": \"user\", \"content\": get_brochure_user_prompt(company_name, url)}\n", + " ],\n", + " )\n", + " result = response.choices[0].message.content\n", + " display(Markdown(result))" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "e093444a-9407-42ae-924a-145730591a39", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Found links: {'links': [{'type': 'home page', 'url': 'https://huggingface.com/'}, {'type': 'about page', 'url': 'https://huggingface.com/huggingface'}, {'type': 'careers page', 'url': 'https://apply.workable.com/huggingface/'}, {'type': 'enterprise page', 'url': 'https://huggingface.com/enterprise'}, {'type': 'pricing page', 'url': 'https://huggingface.com/pricing'}, {'type': 'blog page', 'url': 'https://huggingface.com/blog'}, {'type': 'community page', 'url': 'https://discuss.huggingface.co'}, {'type': 'GitHub page', 'url': 'https://github.com/huggingface'}, {'type': 'Twitter page', 'url': 'https://twitter.com/huggingface'}, {'type': 'LinkedIn page', 'url': 'https://www.linkedin.com/company/huggingface/'}]}\n" + ] + }, + { + "data": { + "text/markdown": [ + "# Hugging Face Brochure\n", + "\n", + "**Hugging Face** \n", + "*The AI community building the future.*\n", + "\n", + "---\n", + "\n", + "## About Us\n", + "Hugging Face is a pioneering platform where the machine learning community comes together to collaborate on models, datasets, and applications. With over 400,000 models and 100,000 datasets available, we empower users to create, discover, and innovate in the field of machine learning.\n", + "\n", + "### Our Mission\n", + "To accelerate the development and deployment of machine learning applications, making cutting-edge technology accessible to everyone.\n", + "\n", + "---\n", + "\n", + "## Company Culture\n", + "At Hugging Face, we believe in the power of collaboration and open-source technology. We foster an inclusive environment where every team member's input is valued, allowing for diverse ideas and perspectives. Our culture emphasizes continuous learning, innovation, and a commitment to advancing AI for the greater good.\n", + "\n", + "---\n", + "\n", + "## Customers\n", + "Hugging Face serves more than 50,000 organizations, including industry leaders such as:\n", + "\n", + "- **Amazon Web Services**\n", + "- **Meta**\n", + "- **Google**\n", + "- **Microsoft**\n", + "- **Intel**\n", + " \n", + "These organizations utilize our platform for various machine learning tasks, enhancing their workflows and outputs.\n", + "\n", + "---\n", + "\n", + "## Careers at Hugging Face\n", + "We are always on the lookout for talented individuals who are passionate about AI and machine learning. Career opportunities at Hugging Face offer:\n", + "\n", + "- A collaborative work environment\n", + "- Remote work flexibility\n", + "- Continuing education and mentorship\n", + "- Opportunities to work on impactful projects\n", + "\n", + "**Join us and help shape the future of AI!**\n", + "\n", + "---\n", + "\n", + "## Our Offerings\n", + "### Models\n", + "- Access over 400,000 machine learning models, covering a variety of tasks and technologies.\n", + "\n", + "### Datasets\n", + "- Discover and share 100,000+ datasets tailored for computer vision, audio, and NLP tasks.\n", + "\n", + "### Spaces\n", + "- Utilize our application space to run various applications including real-time projects and demonstrations.\n", + "\n", + "### Enterprise Solutions\n", + "- With dedicated support and industry-grade security, our Enterprise solutions are designed for organizations looking to implement AI at scale.\n", + "\n", + "---\n", + "\n", + "## Get Started Today!\n", + "**Sign up now** to become part of the Hugging Face community and access an array of tools to accelerate your machine learning journey. \n", + "[Sign Up Here](#)\n", + "\n", + "---\n", + "\n", + "**Stay Connected** \n", + "Follow us on our social media platforms:\n", + "- [GitHub](#)\n", + "- [Twitter](#)\n", + "- [LinkedIn](#)\n", + "- [Discord](#)\n", + "\n", + "**Hugging Face – Building the Future of AI**" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "create_brochure(\"HuggingFace\", \"https://huggingface.com\")" + ] + }, + { + "cell_type": "markdown", + "id": "61eaaab7-0b47-4b29-82d4-75d474ad8d18", + "metadata": {}, + "source": [ + "## Finally - a minor improvement\n", + "\n", + "With a small adjustment, we can change this so that the results stream back from OpenAI,\n", + "with the familiar typewriter animation" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "51db0e49-f261-4137-aabe-92dd601f7725", + "metadata": {}, + "outputs": [], + "source": [ + "def stream_brochure(company_name, url):\n", + " stream = openai.chat.completions.create(\n", + " model=MODEL,\n", + " messages=[\n", + " {\"role\": \"system\", \"content\": system_prompt},\n", + " {\"role\": \"user\", \"content\": get_brochure_user_prompt(company_name, url)}\n", + " ],\n", + " stream=True\n", + " )\n", + " \n", + " response = \"\"\n", + " display_handle = display(Markdown(\"\"), display_id=True)\n", + " for chunk in stream:\n", + " response += chunk.choices[0].delta.content or ''\n", + " response = response.replace(\"```\",\"\").replace(\"markdown\", \"\")\n", + " update_display(Markdown(response), display_id=display_handle.display_id)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "56bf0ae3-ee9d-4a72-9cd6-edcac67ceb6d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Found links: {'links': [{'type': 'about page', 'url': 'https://huggingface.co'}, {'type': 'careers page', 'url': 'https://apply.workable.com/huggingface/'}, {'type': 'enterprise page', 'url': 'https://huggingface.co/enterprise'}, {'type': 'blog page', 'url': 'https://huggingface.co/blog'}, {'type': 'community discussion', 'url': 'https://discuss.huggingface.co'}, {'type': 'GitHub page', 'url': 'https://github.com/huggingface'}, {'type': 'Twitter page', 'url': 'https://twitter.com/huggingface'}, {'type': 'LinkedIn page', 'url': 'https://www.linkedin.com/company/huggingface/'}]}\n" + ] + }, + { + "data": { + "text/markdown": [ + "# Welcome to Hugging Face\n", + "\n", + "## The AI Community Building the Future\n", + "\n", + "At Hugging Face, we bring together the machine learning community to collaborate on groundbreaking models, datasets, and applications. Our platform is a vibrant hub where innovation meets practicality, empowering developers and researchers to create state-of-the-art AI solutions.\n", + "\n", + "---\n", + "\n", + "### 🏆 What We Offer\n", + "\n", + "- **Models**: Access and discover over **400k+ models** including the latest advancements in AI.\n", + "- **Datasets**: A rich collection of **100k+ datasets** tailored for various machine learning tasks.\n", + "- **Spaces**: Collaborate on applications and projects seamlessly within our community’s creative workspace.\n", + "\n", + "---\n", + "\n", + "### 🌏 Our Customers\n", + "\n", + "Join the ranks of **50,000+ organizations** leveraging Hugging Face’s offerings, including industry giants like:\n", + "- **Meta**\n", + "- **Amazon Web Services**\n", + "- **Google**\n", + "- **Microsoft**\n", + "- **Grammarly**\n", + "\n", + "These companies trust us to accelerate their machine learning initiatives and foster innovation.\n", + "\n", + "---\n", + "\n", + "### 🌱 Company Culture\n", + "\n", + "At Hugging Face, we embrace an open-source ethos, encouraging collaboration and contribution from the community. Our culture is centered around creativity, innovation, and inclusivity. We believe in empowering individuals and teams by providing the right tools and support to shape the future of AI.\n", + "\n", + "---\n", + "\n", + "### 🚀 Careers at Hugging Face\n", + "\n", + "We are on the lookout for passionate individuals to join our team! If you share our vision of an accessible AI landscape, explore the career opportunities we offer. We provide an environment that supports academic growth, teamwork, and professional development while making a meaningful impact in the machine learning realm.\n", + "\n", + "#### Current Openings Include:\n", + "- Machine Learning Engineers\n", + "- Data Scientists\n", + "- Software Developers\n", + "- Community Managers\n", + "\n", + "---\n", + "\n", + "### 💡 Join Us\n", + "\n", + "Are you ready to be part of a revolution in AI? **[Sign Up](#)** today to explore the possibilities with Hugging Face or **[Log In](#)** if you’re already part of our community.\n", + "\n", + "Let’s build the future of AI together!\n", + "\n", + "---\n", + "\n", + "*For inquiries about our enterprise solutions, pricing, or community involvement, feel free to reach out through our website.* \n", + "\n", + "**Connect with us:** \n", + "[Twitter](#) | [LinkedIn](#) | [GitHub](#) | [Forum](#)" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "stream_brochure(\"HuggingFace\", \"https://huggingface.co\")" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "87bd1188", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Found links: {'links': [{'type': 'homepage', 'url': 'https://huggingface.co/'}, {'type': 'about page', 'url': 'https://huggingface.co/huggingface'}, {'type': 'enterprise page', 'url': 'https://huggingface.co/enterprise'}, {'type': 'pricing page', 'url': 'https://huggingface.co/pricing'}, {'type': 'careers page', 'url': 'https://apply.workable.com/huggingface/'}, {'type': 'blog page', 'url': 'https://huggingface.co/blog'}, {'type': 'discussion forum', 'url': 'https://discuss.huggingface.co'}, {'type': 'GitHub page', 'url': 'https://github.com/huggingface'}, {'type': 'Twitter page', 'url': 'https://twitter.com/huggingface'}, {'type': 'LinkedIn page', 'url': 'https://www.linkedin.com/company/huggingface/'}]}\n" + ] + }, + { + "data": { + "text/markdown": [ + "\n", + "# Hugging Face: The AI Community Building the Future\n", + "\n", + "Welcome to Hugging Face, the leading collaborative platform for the machine learning community. With a robust environment designed for creating, discovering, and deploying machine learning models, datasets, and applications, Hugging Face is at the frontier of artificial intelligence innovation. \n", + "\n", + "---\n", + "\n", + "## About Us\n", + "At Hugging Face, we believe in the power of collaboration. Our platform enables users to work together on projects that range from machine-learning models to expansive datasets. With over 400,000 models and 100,000 datasets available, we provide the tools necessary to help researchers, developers, and organizations accelerate their machine learning projects.\n", + "\n", + "- **Trending Models This Week:**\n", + " - **IamCreateAI/Ruyi-Mini-7B** | 8.17k | Updated 4 days ago\n", + " - **Datou1111/shou_xin** | 28.3k | Updated 12 days ago\n", + " - **meta-llama/Llama-3.3-70B-Instruct** | 236k | Updated 11 days ago\n", + "\n", + "Explore our community-driven approach that integrates state-of-the-art tools like Transformers, DiffUsers, and PEFT (Parameter Efficient Finetuning).\n", + "\n", + "---\n", + "\n", + "## Company Culture\n", + "Hugging Face fosters a vibrant and inclusive company culture, aiming to empower individuals and teams through transparent practices and open-source methodologies. We believe in “AI for everyone,” promoting accessibility and co-creation within the AI community. \n", + "\n", + "### Why Work With Us?\n", + "- **Collaborative Environment**: Join a diverse team of experts and enthusiasts dedicated to pushing the boundaries of AI and machine learning.\n", + "- **Open Source Commitment**: Contribute to freely accessible tools that serve the global community.\n", + "- **Flexible Work**: We support remote work and provide a range of job opportunities tailored to different areas of expertise.\n", + "\n", + "---\n", + "\n", + "## Customers & Organizations\n", + "Over 50,000 organizations utilize Hugging Face in various industries, including notable names such as:\n", + "- **Meta AI**\n", + "- **Amazon Web Services**\n", + "- **Google**\n", + "- **Microsoft**\n", + "\n", + "Our enterprise solutions offer seamless integration with advanced security features, making us a trusted partner for both startups and established corporations.\n", + "\n", + "---\n", + "\n", + "## Careers at Hugging Face\n", + "We are always on the lookout for passionate individuals to join our team. Explore our open positions in areas such as software development, research, marketing, and customer support.\n", + "\n", + "- **Open Positions**: \n", + " - Machine Learning Engineer\n", + " - Data Scientist\n", + " - Community Manager\n", + "\n", + "Join us in shaping the future of AI. \n", + "\n", + "**[Explore Careers](#)**\n", + "\n", + "---\n", + "\n", + "## Join the Hugging Face Community\n", + "Whether you're looking to develop cutting-edge AI models, contribute to open-source projects, or advance your career in this dynamic field, Hugging Face is your gateway to innovation.\n", + "\n", + "**[Learn More](#)** | **[Sign Up Today](#)**\n", + "\n", + "Together, let's build the future of AI!\n", + "\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "stream_brochure(\"HuggingFace\", \"https://huggingface.co\")" + ] + }, + { + "cell_type": "markdown", + "id": "a9e7375d", + "metadata": {}, + "source": [ + "## **Multi-lingual with Desire Format**\n" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "af5c959f", + "metadata": {}, + "outputs": [], + "source": [ + "def multi_lingual_stream_brochure(company_name, url, language, tone):\n", + "\n", + " system_prompt = f\"\"\"\n", + "You are an assistant that analyzes the contents of several relevant pages from a company website and creates a visually appealing and professional short brochure for prospective customers, investors, and recruits. \n", + "The brochure should be written in {language} and use a {tone.lower()} tone throughout.\n", + "\n", + "The brochure should follow this structure (in {language}):\n", + "\n", + "1. **Front Cover**:\n", + " - Prominently display the company name as Title.\n", + " - Include a compelling headline or tagline.\n", + " - Add something engaging relevant to the company’s mission.\n", + "\n", + "2. **About Us**:\n", + " - Provide a brief introduction to the company.\n", + " - State the company’s core mission and vision.\n", + " - Mention the founding story or key milestones.\n", + "\n", + "3. **What We Offer**:\n", + " - Summarize the company's products, services, or solutions.\n", + " - Highlight benefits or unique selling points.\n", + " - Include testimonials or case studies if available.\n", + "\n", + "4. **Our Culture**:\n", + " - Outline the company’s key values or guiding principles.\n", + " - Describe the workplace environment (e.g., innovation-driven, inclusive, collaborative).\n", + " - Highlight community engagement or CSR initiatives.\n", + "\n", + "5. **Who We Serve**:\n", + " - Describe the target customers or industries served.\n", + " - Mention notable clients or partners.\n", + " - Include testimonials or endorsements from customers.\n", + "\n", + "6. **Join Us**:\n", + " - Detail career or internship opportunities.\n", + " - Highlight benefits, career growth, or training opportunities.\n", + " - Provide direct links or steps to apply.\n", + "\n", + "7. **Contact Us**:\n", + " - Provide the company’s address, phone number, and email.\n", + " - Include links to social media platforms.\n", + " - Add a link to the company’s website.\n", + "\n", + "8. **Closing Note**:\n", + " - End with a thank-you message or an inspirational note for the reader.\n", + " - Add a call-to-action (e.g., “Get in touch today!” or “Explore more on our website”).\n", + "\n", + "Ensure the content is concise, engaging, visually clear, and tailored to the target audience. Use headings and subheadings to make the brochure easy to navigate. Include links and contact information wherever applicable.\n", + "\"\"\"\n", + "\n", + "\n", + " \n", + " stream = openai.chat.completions.create(\n", + " model=MODEL,\n", + " messages=[\n", + " {\"role\": \"system\", \"content\": system_prompt},\n", + " {\"role\": \"user\", \"content\": get_brochure_user_prompt(company_name, url)}\n", + " ],\n", + " stream=True\n", + " )\n", + " \n", + " response = \"\"\n", + " display_handle = display(Markdown(\"\"), display_id=True)\n", + " for chunk in stream:\n", + " response += chunk.choices[0].delta.content or ''\n", + " response = response.replace(\"```\",\"\").replace(\"markdown\", \"\")\n", + " update_display(Markdown(response), display_id=display_handle.display_id)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "744bfc05", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Found links: {'links': [{'type': 'about page', 'url': 'https://openai.com/about'}, {'type': 'careers page', 'url': 'https://openai.com/careers'}]}\n" + ] + }, + { + "data": { + "text/markdown": [ + "It seems that the landing and related pages for OpenAI did not yield any specific content. However, I can create a creative and engaging brochure based on general knowledge about OpenAI. Here's a humorous and entertaining brochure written in Urdu:\n", + "\n", + "\n", + "# 🎉 اوپن اے آئی: ہوشیار robots کا دوست! 🎉\n", + "\n", + "---\n", + "\n", + "## About Us - ہمارے بارے میں:\n", + "\n", + "ہماری کمپنی اوپن اے آئی، 2015 میں بنی۔ ہم نے سوچا کہ \"کیوں نہ ایک ایسا انٹیلیجنٹ سسٹم بنائیں جو انسانوں کی مدد کرے؟\" تو ہم نے کام شروع کیا اور دیکھیں! ہم نے ایک نئی دنیا کی بنیاد رکھی۔ ہماری مشن ہے \"تمام لوگوں کے لئے AI کی طاقت کو قابل رسائی بنانا\"۔ آفاقی طاقت کو ڈھونڈتے ہیں، جیسے آپ کے فرج میں چھپے ہوئے برگر!\n", + "\n", + "---\n", + "\n", + "## What We Offer - ہم کیا پیش کرتے ہیں:\n", + "\n", + "ہم AI کے شوقین ہیں! 🤖 ہم مختلف پروڈکٹس اور سروسز پیش کرتے ہیں، جیسے کہ:\n", + "\n", + "- **GPT-3**: آپ کے سوالات کے جواب دینے کے لئے تیار!\n", + "- **تخلیقی تحریر**: جنریٹنگ آئیڈیاز جب آپ کی تخلیقیت بریک ہو جائے!\n", + "- **AI ٹولز**: آپ کی زندگی کو مزید آسان بنانے کے لئے!\n", + "\n", + "ہمارے صارفین کہتے ہیں، \"اپنی زندگی میں اوپن اے آئی کی ضرورت ہے، جیسے موٹیویشن کی ضرورت ہوتی ہے!\"\n", + "\n", + "---\n", + "\n", + "## Our Culture - ہماری ثقافت:\n", + "\n", + "ہماری کمپنی میں، ہمارا بنیادی اصول ہے: \"پیار اور انوکھا خیالات!\" 🤗 ہم نے انوکھے، تعاون پر مبنی ماحول کی بنیاد رکھی، جہاں ہر کوئی اپنی بات کہہ سکتا ہے، یہاں تک کہ ونڈو کے باہر کھڑا درخت بھی! ہم کمیونٹی کی خدمت کیلئے ہمیشہ تیار رہتے ہیں، وہ بھی سوشل میڈٰیا پر۔\n", + "\n", + "---\n", + "\n", + "## Who We Serve - ہم کس کی خدمت کرتے ہیں:\n", + "\n", + "ہم ہر اُس شخص کی خدمت کرتے ہیں جو سوپر ہیرومنٹ کی تلاش میں ہے۔ ہمارے وزیٹر، محققین، اور ٹیکنالوجی کے شوقین ہیں، اور ہمارے بہترین کلائنٹس include شامل ہیں \"بڑا دماغی جیسا سوچنے والے!\" 💡\n", + "\n", + "---\n", + "\n", + "## Join Us - ہمارے ساتھ شامل ہوں:\n", + "\n", + "آپ کو ترقی کی تلاش ہے؟ تو ہماری ٹیم کا حصہ بنیں! 🚀 ہم ہمیشہ نئے امریکی جاموں کی تلاش میں ہیں۔ آپ کو ٹریننگ، ترقی کے مواقع، اور سہولیات فراہم کریں گے۔\n", + "\n", + "📩 **درخواست دینے کے مرحلے:** ہماری ویب سائٹ پر جائیں، کیونکہ ہم جانتے ہیں کہ آپ کا خواب آپ کے قریب ہے!\n", + "\n", + "---\n", + "\n", + "## Contact Us - ہم سے رابطہ کریں:\n", + "\n", + "**پتہ:** نیٹ ورک کی دنیا \n", + "**فون:** 123-456-789 \n", + "**ایمیل:** info@openai.com \n", + "**سوشل میڈیا:** [فیس بک](#) | [ٹویٹر](#) | [لنکڈ ان](#) \n", + "**ویب سائٹ:** [openai.com](#)\n", + "\n", + "---\n", + "\n", + "## Closing Note - اختتامی نوٹ:\n", + "\n", + "ہماری کمپنی اوپن اے آئی کی طرف سے ایک شکریہ! اے آئی کی دنیا میں قدم رکھنے کا وقت آ گیا ہے! \n", + "\n", + "🖱️ **آج ہی رابطہ کریں یا ہماری ویب سائٹ کا دورہ کریں!**\n", + "\n", + "\n", + "**نوٹ:** واقعی ویب سائٹ کے مخصوص روابط، ای میل اور نمبر تخلیقی مقصد کے لئے ہیں۔ اس کو حقیقی معلومات کے ساتھ تبدیل کیا جا سکتا ہے۔" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "multi_lingual_stream_brochure(\"OpenAI\", \"https://openai.com/\", \"Urdu\", \"humorous, entertaining, jokey\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b6f1e8d9", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4fb86dc6", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "llm_env", + "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.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From 1c7c9e35e02b6322a9681f9fcf9b120235887cda Mon Sep 17 00:00:00 2001 From: codenigma1 Date: Sun, 22 Dec 2024 01:20:22 +1100 Subject: [PATCH 16/29] Day 5 Challend one with multilingual aloing with multitone --- .../day5-multi-lingual-desire-format.ipynb | 3112 +---------------- 1 file changed, 24 insertions(+), 3088 deletions(-) diff --git a/week1/community-contributions/day5-multi-lingual-desire-format.ipynb b/week1/community-contributions/day5-multi-lingual-desire-format.ipynb index 3f1b3ad..b17c402 100644 --- a/week1/community-contributions/day5-multi-lingual-desire-format.ipynb +++ b/week1/community-contributions/day5-multi-lingual-desire-format.ipynb @@ -42,18 +42,10 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "fc5d8880-f2ee-4c06-af16-ecbc0262af61", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "API key looks good so far\n" - ] - } - ], + "outputs": [], "source": [ "# Initialize and constants\n", "\n", @@ -109,46 +101,10 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "e30d8128-933b-44cc-81c8-ab4c9d86589a", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['https://edwarddonner.com/',\n", - " 'https://edwarddonner.com/outsmart/',\n", - " 'https://edwarddonner.com/about-me-and-about-nebula/',\n", - " 'https://edwarddonner.com/posts/',\n", - " 'https://edwarddonner.com/',\n", - " 'https://news.ycombinator.com',\n", - " 'https://nebula.io/?utm_source=ed&utm_medium=referral',\n", - " 'https://www.prnewswire.com/news-releases/wynden-stark-group-acquires-nyc-venture-backed-tech-startup-untapt-301269512.html',\n", - " 'https://patents.google.com/patent/US20210049536A1/',\n", - " 'https://www.linkedin.com/in/eddonner/',\n", - " 'https://edwarddonner.com/2024/11/13/llm-engineering-resources/',\n", - " 'https://edwarddonner.com/2024/11/13/llm-engineering-resources/',\n", - " 'https://edwarddonner.com/2024/10/16/from-software-engineer-to-ai-data-scientist-resources/',\n", - " 'https://edwarddonner.com/2024/10/16/from-software-engineer-to-ai-data-scientist-resources/',\n", - " 'https://edwarddonner.com/2024/08/06/outsmart/',\n", - " 'https://edwarddonner.com/2024/08/06/outsmart/',\n", - " 'https://edwarddonner.com/2024/06/26/choosing-the-right-llm-resources/',\n", - " 'https://edwarddonner.com/2024/06/26/choosing-the-right-llm-resources/',\n", - " 'https://edwarddonner.com/',\n", - " 'https://edwarddonner.com/outsmart/',\n", - " 'https://edwarddonner.com/about-me-and-about-nebula/',\n", - " 'https://edwarddonner.com/posts/',\n", - " 'mailto:hello@mygroovydomain.com',\n", - " 'https://www.linkedin.com/in/eddonner/',\n", - " 'https://twitter.com/edwarddonner',\n", - " 'https://www.facebook.com/edward.donner.52']" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "ed = Website(\"https://edwarddonner.com\")\n", "ed.links" @@ -193,26 +149,10 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "b97e4068-97ed-4120-beae-c42105e4d59a", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "You are provided with a list of links found on a webpage. You are able to decide which of the links would be most relevant to include in a brochure about the company, such as links to an About page, or a Company page, or Careers/Jobs pages.\n", - "You should respond in JSON as in this example:\n", - "{\n", - " \"links\": [\n", - " {\"type\": \"about page\", \"url\": \"https://full.url/goes/here/about\"},\n", - " {\"type\": \"careers page\": \"url\": \"https://another.full.url/careers\"}\n", - " ]\n", - "}\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "print(link_system_prompt)" ] @@ -235,45 +175,10 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "6bcbfa78-6395-4685-b92c-22d592050fd7", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Here is the list of links on the website of https://edwarddonner.com - please decide which of these are relevant web links for a brochure about the company, respond with the full https URL in JSON format. Do not include Terms of Service, Privacy, email links.\n", - "Links (some might be relative links):\n", - "https://edwarddonner.com/\n", - "https://edwarddonner.com/outsmart/\n", - "https://edwarddonner.com/about-me-and-about-nebula/\n", - "https://edwarddonner.com/posts/\n", - "https://edwarddonner.com/\n", - "https://news.ycombinator.com\n", - "https://nebula.io/?utm_source=ed&utm_medium=referral\n", - "https://www.prnewswire.com/news-releases/wynden-stark-group-acquires-nyc-venture-backed-tech-startup-untapt-301269512.html\n", - "https://patents.google.com/patent/US20210049536A1/\n", - "https://www.linkedin.com/in/eddonner/\n", - "https://edwarddonner.com/2024/11/13/llm-engineering-resources/\n", - "https://edwarddonner.com/2024/11/13/llm-engineering-resources/\n", - "https://edwarddonner.com/2024/10/16/from-software-engineer-to-ai-data-scientist-resources/\n", - "https://edwarddonner.com/2024/10/16/from-software-engineer-to-ai-data-scientist-resources/\n", - "https://edwarddonner.com/2024/08/06/outsmart/\n", - "https://edwarddonner.com/2024/08/06/outsmart/\n", - "https://edwarddonner.com/2024/06/26/choosing-the-right-llm-resources/\n", - "https://edwarddonner.com/2024/06/26/choosing-the-right-llm-resources/\n", - "https://edwarddonner.com/\n", - "https://edwarddonner.com/outsmart/\n", - "https://edwarddonner.com/about-me-and-about-nebula/\n", - "https://edwarddonner.com/posts/\n", - "mailto:hello@mygroovydomain.com\n", - "https://www.linkedin.com/in/eddonner/\n", - "https://twitter.com/edwarddonner\n", - "https://www.facebook.com/edward.donner.52\n" - ] - } - ], + "outputs": [], "source": [ "print(get_links_user_prompt(ed))" ] @@ -301,100 +206,10 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "id": "74a827a0-2782-4ae5-b210-4a242a8b4cc2", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['/',\n", - " '/models',\n", - " '/datasets',\n", - " '/spaces',\n", - " '/posts',\n", - " '/docs',\n", - " '/enterprise',\n", - " '/pricing',\n", - " '/login',\n", - " '/join',\n", - " '/IamCreateAI/Ruyi-Mini-7B',\n", - " '/Datou1111/shou_xin',\n", - " '/answerdotai/ModernBERT-base',\n", - " '/meta-llama/Llama-3.3-70B-Instruct',\n", - " '/tencent/HunyuanVideo',\n", - " '/models',\n", - " '/spaces/JeffreyXiang/TRELLIS',\n", - " '/spaces/HuggingFaceH4/blogpost-scaling-test-time-compute',\n", - " '/spaces/multimodalart/flux-style-shaping',\n", - " '/spaces/Kwai-Kolors/Kolors-Virtual-Try-On',\n", - " '/spaces/lllyasviel/iclight-v2',\n", - " '/spaces',\n", - " '/datasets/fka/awesome-chatgpt-prompts',\n", - " '/datasets/O1-OPEN/OpenO1-SFT',\n", - " '/datasets/HuggingFaceFW/fineweb-2',\n", - " '/datasets/HuggingFaceTB/finemath',\n", - " '/datasets/amphora/QwQ-LongCoT-130K',\n", - " '/datasets',\n", - " '/join',\n", - " '/pricing#endpoints',\n", - " '/pricing#spaces',\n", - " '/pricing',\n", - " '/enterprise',\n", - " '/enterprise',\n", - " '/enterprise',\n", - " '/enterprise',\n", - " '/enterprise',\n", - " '/enterprise',\n", - " '/enterprise',\n", - " '/allenai',\n", - " '/facebook',\n", - " '/amazon',\n", - " '/google',\n", - " '/Intel',\n", - " '/microsoft',\n", - " '/grammarly',\n", - " '/Writer',\n", - " '/docs/transformers',\n", - " '/docs/diffusers',\n", - " '/docs/safetensors',\n", - " '/docs/huggingface_hub',\n", - " '/docs/tokenizers',\n", - " '/docs/peft',\n", - " '/docs/transformers.js',\n", - " '/docs/timm',\n", - " '/docs/trl',\n", - " '/docs/datasets',\n", - " '/docs/text-generation-inference',\n", - " '/docs/accelerate',\n", - " '/models',\n", - " '/datasets',\n", - " '/spaces',\n", - " '/tasks',\n", - " 'https://ui.endpoints.huggingface.co',\n", - " '/chat',\n", - " '/huggingface',\n", - " '/brand',\n", - " '/terms-of-service',\n", - " '/privacy',\n", - " 'https://apply.workable.com/huggingface/',\n", - " 'mailto:press@huggingface.co',\n", - " '/learn',\n", - " '/docs',\n", - " '/blog',\n", - " 'https://discuss.huggingface.co',\n", - " 'https://status.huggingface.co/',\n", - " 'https://github.com/huggingface',\n", - " 'https://twitter.com/huggingface',\n", - " 'https://www.linkedin.com/company/huggingface/',\n", - " '/join/discord']" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Anthropic has made their site harder to scrape, so I'm using HuggingFace..\n", "\n", @@ -404,28 +219,10 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "d3d583e2-dcc4-40cc-9b28-1e8dbf402924", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'links': [{'type': 'homepage', 'url': 'https://huggingface.co/'},\n", - " {'type': 'about page', 'url': 'https://huggingface.co/huggingface'},\n", - " {'type': 'careers page', 'url': 'https://apply.workable.com/huggingface/'},\n", - " {'type': 'blog', 'url': 'https://huggingface.co/blog'},\n", - " {'type': 'github page', 'url': 'https://github.com/huggingface'},\n", - " {'type': 'twitter page', 'url': 'https://twitter.com/huggingface'},\n", - " {'type': 'linkedin page',\n", - " 'url': 'https://www.linkedin.com/company/huggingface/'}]}" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "get_links(\"https://huggingface.co\")" ] @@ -460,2181 +257,10 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "id": "5099bd14-076d-4745-baf3-dac08d8e5ab2", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Found links: {'links': [{'type': 'about page', 'url': 'https://huggingface.co/about'}, {'type': 'careers page', 'url': 'https://apply.workable.com/huggingface/'}, {'type': 'blog page', 'url': 'https://huggingface.co/blog'}, {'type': 'company page', 'url': 'https://huggingface.co/huggingface'}, {'type': 'community discussions', 'url': 'https://discuss.huggingface.co'}, {'type': 'GitHub page', 'url': 'https://github.com/huggingface'}, {'type': 'Twitter page', 'url': 'https://twitter.com/huggingface'}, {'type': 'LinkedIn page', 'url': 'https://www.linkedin.com/company/huggingface/'}]}\n", - "Landing page:\n", - "Webpage Title:\n", - "Hugging Face – The AI community building the future.\n", - "Webpage Contents:\n", - "Hugging Face\n", - "Models\n", - "Datasets\n", - "Spaces\n", - "Posts\n", - "Docs\n", - "Enterprise\n", - "Pricing\n", - "Log In\n", - "Sign Up\n", - "The AI community building the future.\n", - "The platform where the machine learning community collaborates on models, datasets, and applications.\n", - "Trending on\n", - "this week\n", - "Models\n", - "IamCreateAI/Ruyi-Mini-7B\n", - "Updated\n", - "4 days ago\n", - "•\n", - "8.17k\n", - "•\n", - "352\n", - "Datou1111/shou_xin\n", - "Updated\n", - "12 days ago\n", - "•\n", - "28.3k\n", - "•\n", - "672\n", - "answerdotai/ModernBERT-base\n", - "Updated\n", - "1 day ago\n", - "•\n", - "6.24k\n", - "•\n", - "236\n", - "meta-llama/Llama-3.3-70B-Instruct\n", - "Updated\n", - "11 days ago\n", - "•\n", - "236k\n", - "•\n", - "1.21k\n", - "tencent/HunyuanVideo\n", - "Updated\n", - "3 days ago\n", - "•\n", - "6.01k\n", - "•\n", - "1.2k\n", - "Browse 400k+ models\n", - "Spaces\n", - "Running\n", - "on\n", - "Zero\n", - "1.79k\n", - "🏢\n", - "TRELLIS\n", - "Scalable and Versatile 3D Generation from images\n", - "Running\n", - "306\n", - "📝\n", - "Scaling test-time compute\n", - "Running\n", - "on\n", - "Zero\n", - "470\n", - "🚀\n", - "Flux Style Shaping\n", - "Optical illusions and style transfer with FLUX\n", - "Running\n", - "on\n", - "CPU Upgrade\n", - "6.11k\n", - "👕\n", - "Kolors Virtual Try-On\n", - "Running\n", - "on\n", - "Zero\n", - "965\n", - "📈\n", - "IC Light V2\n", - "Browse 150k+ applications\n", - "Datasets\n", - "fka/awesome-chatgpt-prompts\n", - "Updated\n", - "Sep 3\n", - "•\n", - "6.83k\n", - "•\n", - "6.58k\n", - "O1-OPEN/OpenO1-SFT\n", - "Updated\n", - "4 days ago\n", - "•\n", - "1.86k\n", - "•\n", - "234\n", - "HuggingFaceFW/fineweb-2\n", - "Updated\n", - "13 days ago\n", - "•\n", - "77.7k\n", - "•\n", - "342\n", - "HuggingFaceTB/finemath\n", - "Updated\n", - "1 day ago\n", - "•\n", - "1.86k\n", - "•\n", - "43\n", - "amphora/QwQ-LongCoT-130K\n", - "Updated\n", - "16 days ago\n", - "•\n", - "1.34k\n", - "•\n", - "85\n", - "Browse 100k+ datasets\n", - "The Home of Machine Learning\n", - "Create, discover and collaborate on ML better.\n", - "The collaboration platform\n", - "Host and collaborate on unlimited public models, datasets and applications.\n", - "Move faster\n", - "With the HF Open source stack.\n", - "Explore all modalities\n", - "Text, image, video, audio or even 3D.\n", - "Build your portfolio\n", - "Share your work with the world and build your ML profile.\n", - "Sign Up\n", - "Accelerate your ML\n", - "We provide paid Compute and Enterprise solutions.\n", - "Compute\n", - "Deploy on optimized\n", - "Inference Endpoints\n", - "or update your\n", - "Spaces applications\n", - "to a GPU in a few clicks.\n", - "View pricing\n", - "Starting at $0.60/hour for GPU\n", - "Enterprise\n", - "Give your team the most advanced platform to build AI with enterprise-grade security, access controls and\n", - "\t\t\tdedicated support.\n", - "Getting started\n", - "Starting at $20/user/month\n", - "Single Sign-On\n", - "Regions\n", - "Priority Support\n", - "Audit Logs\n", - "Resource Groups\n", - "Private Datasets Viewer\n", - "More than 50,000 organizations are using Hugging Face\n", - "Ai2\n", - "Enterprise\n", - "non-profit\n", - "•\n", - "366 models\n", - "•\n", - "1.76k followers\n", - "AI at Meta\n", - "Enterprise\n", - "company\n", - "•\n", - "2.05k models\n", - "•\n", - "3.83k followers\n", - "Amazon Web Services\n", - "company\n", - "•\n", - "21 models\n", - "•\n", - "2.45k followers\n", - "Google\n", - "company\n", - "•\n", - "911 models\n", - "•\n", - "5.76k followers\n", - "Intel\n", - "company\n", - "•\n", - "217 models\n", - "•\n", - "2.07k followers\n", - "Microsoft\n", - "company\n", - "•\n", - "351 models\n", - "•\n", - "6.29k followers\n", - "Grammarly\n", - "company\n", - "•\n", - "10 models\n", - "•\n", - "102 followers\n", - "Writer\n", - "Enterprise\n", - "company\n", - "•\n", - "17 models\n", - "•\n", - "186 followers\n", - "Our Open Source\n", - "We are building the foundation of ML tooling with the community.\n", - "Transformers\n", - "136,571\n", - "State-of-the-art ML for Pytorch, TensorFlow, and JAX.\n", - "Diffusers\n", - "26,740\n", - "State-of-the-art diffusion models for image and audio generation in PyTorch.\n", - "Safetensors\n", - "2,960\n", - "Simple, safe way to store and distribute neural networks weights safely and quickly.\n", - "Hub Python Library\n", - "2,177\n", - "Client library for the HF Hub: manage repositories from your Python runtime.\n", - "Tokenizers\n", - "9,165\n", - "Fast tokenizers, optimized for both research and production.\n", - "PEFT\n", - "16,767\n", - "Parameter efficient finetuning methods for large models.\n", - "Transformers.js\n", - "12,421\n", - "State-of-the-art Machine Learning for the web. Run Transformers directly in your browser, with no need for a server.\n", - "timm\n", - "32,668\n", - "State-of-the-art computer vision models, layers, optimizers, training/evaluation, and utilities.\n", - "TRL\n", - "10,382\n", - "Train transformer language models with reinforcement learning.\n", - "Datasets\n", - "19,378\n", - "Access and share datasets for computer vision, audio, and NLP tasks.\n", - "Text Generation Inference\n", - "9,484\n", - "Toolkit to serve Large Language Models.\n", - "Accelerate\n", - "8,082\n", - "Easily train and use PyTorch models with multi-GPU, TPU, mixed-precision.\n", - "System theme\n", - "Website\n", - "Models\n", - "Datasets\n", - "Spaces\n", - "Tasks\n", - "Inference Endpoints\n", - "HuggingChat\n", - "Company\n", - "About\n", - "Brand assets\n", - "Terms of service\n", - "Privacy\n", - "Jobs\n", - "Press\n", - "Resources\n", - "Learn\n", - "Documentation\n", - "Blog\n", - "Forum\n", - "Service Status\n", - "Social\n", - "GitHub\n", - "Twitter\n", - "LinkedIn\n", - "Discord\n", - "\n", - "\n", - "\n", - "about page\n", - "Webpage Title:\n", - "about (Sergei)\n", - "Webpage Contents:\n", - "Hugging Face\n", - "Models\n", - "Datasets\n", - "Spaces\n", - "Posts\n", - "Docs\n", - "Enterprise\n", - "Pricing\n", - "Log In\n", - "Sign Up\n", - "Sergei\n", - "about\n", - "Follow\n", - "Kalaipriya's profile picture\n", - "selvivincent's profile picture\n", - "Renumathi's profile picture\n", - "3\n", - "\t\t\t\t\tfollowers\n", - "·\n", - "0 following\n", - "AI & ML interests\n", - "None yet\n", - "Organizations\n", - "None yet\n", - "models\n", - "None public yet\n", - "datasets\n", - "None public yet\n", - "System theme\n", - "Company\n", - "TOS\n", - "Privacy\n", - "About\n", - "Jobs\n", - "Website\n", - "Models\n", - "Datasets\n", - "Spaces\n", - "Pricing\n", - "Docs\n", - "\n", - "\n", - "\n", - "careers page\n", - "Webpage Title:\n", - "Hugging Face - Current Openings\n", - "Webpage Contents:\n", - "\n", - "\n", - "\n", - "\n", - "blog page\n", - "Webpage Title:\n", - "Hugging Face – Blog\n", - "Webpage Contents:\n", - "Hugging Face\n", - "Models\n", - "Datasets\n", - "Spaces\n", - "Posts\n", - "Docs\n", - "Enterprise\n", - "Pricing\n", - "Log In\n", - "Sign Up\n", - "Blog, Articles, and discussions\n", - "New Article\n", - "Everything\n", - "community\n", - "guide\n", - "open source collab\n", - "partnerships\n", - "research\n", - "NLP\n", - "Audio\n", - "CV\n", - "RL\n", - "ethics\n", - "Diffusion\n", - "Game Development\n", - "RLHF\n", - "Leaderboard\n", - "Case Studies\n", - "Evaluating Audio Reasoning with Big Bench Audio\n", - "By\n", - "mhillsmith\n", - "December 20, 2024\n", - "guest\n", - "•\n", - "8\n", - "Community Articles\n", - "view all\n", - "20+ Free and Paid Digital Marketing Strategies to Automate Repetitive Tasks\n", - "By\n", - "Markets\n", - "•\n", - "about 3 hours ago\n", - "•\n", - "1\n", - "🧠 Tags generation dataset\n", - "By\n", - "zino36\n", - "•\n", - "about 16 hours ago\n", - "•\n", - "1\n", - "AI Agents in Action: Managing GitHub Issues with KaibanJS\n", - "By\n", - "darielnoel\n", - "•\n", - "1 day ago\n", - "**Intelligence Potentiation: An Evolutionary Perspective on AI Agent Designs**\n", - "By\n", - "KnutJaegersberg\n", - "•\n", - "1 day ago\n", - "•\n", - "3\n", - "MINERVA: A Multi-Agent LLM System for Digital Scam Protection\n", - "By\n", - "dcarpintero\n", - "•\n", - "2 days ago\n", - "Mastering Iterative Prompting for Optimized AI Code Generation\n", - "By\n", - "luigi12345\n", - "•\n", - "3 days ago\n", - "•\n", - "1\n", - "SILMA RAGQA V1.0: A Comprehensive Benchmark for Evaluating LLMs on RAG QA Use-Cases\n", - "By\n", - "karimouda\n", - "•\n", - "3 days ago\n", - "•\n", - "1\n", - "FuseChat-3.0: Preference Optimization for Implicit Model Fusion\n", - "By\n", - "Wanfq\n", - "•\n", - "3 days ago\n", - "•\n", - "2\n", - "Tutorial: Quantizing Llama 3+ Models for Efficient Deployment\n", - "By\n", - "theeseus-ai\n", - "•\n", - "6 days ago\n", - "•\n", - "3\n", - "How to Expand Your AI Music Generations of 30 Seconds to Several Minutes\n", - "By\n", - "theeseus-ai\n", - "•\n", - "8 days ago\n", - "•\n", - "1\n", - "🇪🇺✍️ EU AI Act: Systemic Risks in the First CoP Draft Comments ✍️🇪🇺\n", - "By\n", - "yjernite\n", - "•\n", - "9 days ago\n", - "•\n", - "11\n", - "Building an AI-powered search engine from scratch\n", - "By\n", - "as-cle-bert\n", - "•\n", - "10 days ago\n", - "•\n", - "8\n", - "MotionLCM-V2: Improved Compression Rate for Multi-Latent-Token Diffusion\n", - "By\n", - "wxDai\n", - "•\n", - "10 days ago\n", - "•\n", - "12\n", - "RLHF 101: A Technical Dive into RLHF\n", - "By\n", - "GitBag\n", - "•\n", - "10 days ago\n", - "•\n", - "4\n", - "[Talk Arena](https://talkarena.org)\n", - "By\n", - "WillHeld\n", - "•\n", - "11 days ago\n", - "•\n", - "1\n", - "Multimodal RAG with Colpali, Milvus and VLMs\n", - "By\n", - "saumitras\n", - "•\n", - "11 days ago\n", - "•\n", - "2\n", - "In Honour of This Year's NeurIPs Test of Time Paper Awardees\n", - "By\n", - "Jaward\n", - "•\n", - "11 days ago\n", - "•\n", - "2\n", - "Power steering: Squeeze massive power from small LLMs\n", - "By\n", - "ucheog\n", - "•\n", - "12 days ago\n", - "•\n", - "4\n", - "Exploring the Power of KaibanJS v0.11.0 🚀\n", - "By\n", - "darielnoel\n", - "•\n", - "12 days ago\n", - "•\n", - "1\n", - "**Building a Custom Retrieval System with Motoko and Node.js**\n", - "By\n", - "theeseus-ai\n", - "•\n", - "12 days ago\n", - "•\n", - "1\n", - "Finally, a Replacement for BERT: Introducing ModernBERT\n", - "By\n", - "bwarner\n", - "December 19, 2024\n", - "guest\n", - "•\n", - "289\n", - "Bamba: Inference-Efficient Hybrid Mamba2 Model\n", - "By\n", - "Linsong-C\n", - "December 18, 2024\n", - "guest\n", - "•\n", - "30\n", - "Welcome the Falcon 3 Family of Open Models!\n", - "By\n", - "FalconLLM\n", - "December 17, 2024\n", - "•\n", - "98\n", - "Benchmarking Language Model Performance on 5th Gen Xeon at GCP\n", - "By\n", - "MatrixYao\n", - "December 17, 2024\n", - "•\n", - "2\n", - "Introducing the Synthetic Data Generator - Build Datasets with Natural Language\n", - "By\n", - "davidberenstein1957\n", - "December 16, 2024\n", - "•\n", - "55\n", - "LeMaterial: an open source initiative to accelerate materials discovery and research\n", - "By\n", - "AlexDuvalinho\n", - "December 10, 2024\n", - "guest\n", - "•\n", - "30\n", - "Hugging Face models in Amazon Bedrock\n", - "By\n", - "pagezyhf\n", - "December 9, 2024\n", - "•\n", - "8\n", - "Open Preference Dataset for Text-to-Image Generation by the 🤗 Community\n", - "By\n", - "davidberenstein1957\n", - "December 9, 2024\n", - "•\n", - "47\n", - "Welcome PaliGemma 2 – New vision language models by Google\n", - "By\n", - "merve\n", - "December 5, 2024\n", - "•\n", - "117\n", - "“How good are LLMs at fixing their mistakes? A chatbot arena experiment with Keras and TPUs\n", - "By\n", - "martin-gorner\n", - "December 5, 2024\n", - "•\n", - "12\n", - "Rethinking LLM Evaluation with 3C3H: AraGen Benchmark and Leaderboard\n", - "By\n", - "alielfilali01\n", - "December 4, 2024\n", - "guest\n", - "•\n", - "26\n", - "Investing in Performance: Fine-tune small models with LLM insights - a CFM case study\n", - "By\n", - "oahouzi\n", - "December 3, 2024\n", - "•\n", - "25\n", - "Rearchitecting Hugging Face Uploads and Downloads\n", - "By\n", - "port8080\n", - "November 26, 2024\n", - "•\n", - "37\n", - "SmolVLM - small yet mighty Vision Language Model\n", - "By\n", - "andito\n", - "November 26, 2024\n", - "•\n", - "142\n", - "Previous\n", - "1\n", - "2\n", - "3\n", - "...\n", - "36\n", - "Next\n", - "Community Articles\n", - "view all\n", - "20+ Free and Paid Digital Marketing Strategies to Automate Repetitive Tasks\n", - "By\n", - "Markets\n", - "•\n", - "about 3 hours ago\n", - "•\n", - "1\n", - "🧠 Tags generation dataset\n", - "By\n", - "zino36\n", - "•\n", - "about 16 hours ago\n", - "•\n", - "1\n", - "AI Agents in Action: Managing GitHub Issues with KaibanJS\n", - "By\n", - "darielnoel\n", - "•\n", - "1 day ago\n", - "**Intelligence Potentiation: An Evolutionary Perspective on AI Agent Designs**\n", - "By\n", - "KnutJaegersberg\n", - "•\n", - "1 day ago\n", - "•\n", - "3\n", - "MINERVA: A Multi-Agent LLM System for Digital Scam Protection\n", - "By\n", - "dcarpintero\n", - "•\n", - "2 days ago\n", - "Mastering Iterative Prompting for Optimized AI Code Generation\n", - "By\n", - "luigi12345\n", - "•\n", - "3 days ago\n", - "•\n", - "1\n", - "SILMA RAGQA V1.0: A Comprehensive Benchmark for Evaluating LLMs on RAG QA Use-Cases\n", - "By\n", - "karimouda\n", - "•\n", - "3 days ago\n", - "•\n", - "1\n", - "FuseChat-3.0: Preference Optimization for Implicit Model Fusion\n", - "By\n", - "Wanfq\n", - "•\n", - "3 days ago\n", - "•\n", - "2\n", - "Tutorial: Quantizing Llama 3+ Models for Efficient Deployment\n", - "By\n", - "theeseus-ai\n", - "•\n", - "6 days ago\n", - "•\n", - "3\n", - "How to Expand Your AI Music Generations of 30 Seconds to Several Minutes\n", - "By\n", - "theeseus-ai\n", - "•\n", - "8 days ago\n", - "•\n", - "1\n", - "🇪🇺✍️ EU AI Act: Systemic Risks in the First CoP Draft Comments ✍️🇪🇺\n", - "By\n", - "yjernite\n", - "•\n", - "9 days ago\n", - "•\n", - "11\n", - "Building an AI-powered search engine from scratch\n", - "By\n", - "as-cle-bert\n", - "•\n", - "10 days ago\n", - "•\n", - "8\n", - "MotionLCM-V2: Improved Compression Rate for Multi-Latent-Token Diffusion\n", - "By\n", - "wxDai\n", - "•\n", - "10 days ago\n", - "•\n", - "12\n", - "RLHF 101: A Technical Dive into RLHF\n", - "By\n", - "GitBag\n", - "•\n", - "10 days ago\n", - "•\n", - "4\n", - "[Talk Arena](https://talkarena.org)\n", - "By\n", - "WillHeld\n", - "•\n", - "11 days ago\n", - "•\n", - "1\n", - "Multimodal RAG with Colpali, Milvus and VLMs\n", - "By\n", - "saumitras\n", - "•\n", - "11 days ago\n", - "•\n", - "2\n", - "In Honour of This Year's NeurIPs Test of Time Paper Awardees\n", - "By\n", - "Jaward\n", - "•\n", - "11 days ago\n", - "•\n", - "2\n", - "Power steering: Squeeze massive power from small LLMs\n", - "By\n", - "ucheog\n", - "•\n", - "12 days ago\n", - "•\n", - "4\n", - "Exploring the Power of KaibanJS v0.11.0 🚀\n", - "By\n", - "darielnoel\n", - "•\n", - "12 days ago\n", - "•\n", - "1\n", - "**Building a Custom Retrieval System with Motoko and Node.js**\n", - "By\n", - "theeseus-ai\n", - "•\n", - "12 days ago\n", - "•\n", - "1\n", - "System theme\n", - "Company\n", - "TOS\n", - "Privacy\n", - "About\n", - "Jobs\n", - "Website\n", - "Models\n", - "Datasets\n", - "Spaces\n", - "Pricing\n", - "Docs\n", - "\n", - "\n", - "\n", - "company page\n", - "Webpage Title:\n", - "huggingface (Hugging Face)\n", - "Webpage Contents:\n", - "Hugging Face\n", - "Models\n", - "Datasets\n", - "Spaces\n", - "Posts\n", - "Docs\n", - "Enterprise\n", - "Pricing\n", - "Log In\n", - "Sign Up\n", - "Hugging Face\n", - "Enterprise\n", - "company\n", - "Verified\n", - "https://huggingface.co\n", - "huggingface\n", - "huggingface\n", - "Activity Feed\n", - "Follow\n", - "8,542\n", - "AI & ML interests\n", - "The AI community building the future.\n", - "Recent Activity\n", - "IAMJB\n", - "updated\n", - "a dataset\n", - "9 minutes ago\n", - "huggingface/community-science-paper-v2\n", - "IAMJB\n", - "updated\n", - "a dataset\n", - "about 6 hours ago\n", - "huggingface/paper-central-data\n", - "fdaudens\n", - "updated\n", - "a Space\n", - "about 19 hours ago\n", - "huggingface/open-source-ai-year-in-review-2024\n", - "View all activity\n", - "Team members\n", - "224\n", - "+190\n", - "+177\n", - "+156\n", - "+146\n", - "+126\n", - "Organization Card\n", - "Community\n", - "About org cards\n", - "👋 Hi!\n", - "We are on a mission to democratize\n", - "good\n", - "machine learning, one commit at a time.\n", - "If that sounds like something you should be doing, why don't you\n", - "join us\n", - "!\n", - "For press enquiries, you can\n", - "✉️ contact our team here\n", - ".\n", - "Collections\n", - "1\n", - "DistilBERT release\n", - "Original DistilBERT model, checkpoints obtained from using teacher-student learning from the original BERT checkpoints.\n", - "distilbert/distilbert-base-cased\n", - "Fill-Mask\n", - "•\n", - "Updated\n", - "May 6\n", - "•\n", - "358k\n", - "•\n", - "35\n", - "distilbert/distilbert-base-uncased\n", - "Fill-Mask\n", - "•\n", - "Updated\n", - "May 6\n", - "•\n", - "14.8M\n", - "•\n", - "577\n", - "distilbert/distilbert-base-multilingual-cased\n", - "Fill-Mask\n", - "•\n", - "Updated\n", - "May 6\n", - "•\n", - "472k\n", - "•\n", - "148\n", - "distilbert/distilbert-base-uncased-finetuned-sst-2-english\n", - "Text Classification\n", - "•\n", - "Updated\n", - "Dec 19, 2023\n", - "•\n", - "6.96M\n", - "•\n", - "•\n", - "645\n", - "spaces\n", - "23\n", - "Sort: \n", - "\t\tRecently updated\n", - "pinned\n", - "Running\n", - "52\n", - "📈\n", - "Number Tokenization Blog\n", - "Running\n", - "395\n", - "😻\n", - "Open Source Ai Year In Review 2024\n", - "What happened in open-source AI this year, and what’s next?\n", - "Running\n", - "42\n", - "🔋\n", - "Inference Playground\n", - "Running\n", - "196\n", - "⚡\n", - "paper-central\n", - "Running\n", - "on\n", - "TPU v5e\n", - "6\n", - "💬\n", - "Keras Chatbot Battle\n", - "Running\n", - "101\n", - "⚡\n", - "Modelcard Creator\n", - "Expand 23\n", - "\t\t\t\t\t\t\tspaces\n", - "models\n", - "18\n", - "Sort: \n", - "\t\tRecently updated\n", - "huggingface/test-gating-group-2\n", - "Updated\n", - "4 days ago\n", - "huggingface/test-gating-group-1\n", - "Updated\n", - "4 days ago\n", - "huggingface/timesfm-tourism-monthly\n", - "Updated\n", - "12 days ago\n", - "•\n", - "29\n", - "•\n", - "1\n", - "huggingface/CodeBERTa-language-id\n", - "Text Classification\n", - "•\n", - "Updated\n", - "Mar 29\n", - "•\n", - "1.14k\n", - "•\n", - "54\n", - "huggingface/falcon-40b-gptq\n", - "Text Generation\n", - "•\n", - "Updated\n", - "Jun 14, 2023\n", - "•\n", - "19\n", - "•\n", - "12\n", - "huggingface/autoformer-tourism-monthly\n", - "Updated\n", - "May 24, 2023\n", - "•\n", - "1.5k\n", - "•\n", - "9\n", - "huggingface/distilbert-base-uncased-finetuned-mnli\n", - "Text Classification\n", - "•\n", - "Updated\n", - "Mar 22, 2023\n", - "•\n", - "1.37k\n", - "•\n", - "2\n", - "huggingface/informer-tourism-monthly\n", - "Updated\n", - "Feb 24, 2023\n", - "•\n", - "1.12k\n", - "•\n", - "5\n", - "huggingface/time-series-transformer-tourism-monthly\n", - "Updated\n", - "Feb 23, 2023\n", - "•\n", - "2.16k\n", - "•\n", - "18\n", - "huggingface/the-no-branch-repo\n", - "Text-to-Image\n", - "•\n", - "Updated\n", - "Feb 10, 2023\n", - "•\n", - "7\n", - "•\n", - "3\n", - "Expand 18\n", - "\t\t\t\t\t\t\tmodels\n", - "datasets\n", - "31\n", - "Sort: \n", - "\t\tRecently updated\n", - "huggingface/community-science-paper-v2\n", - "Viewer\n", - "•\n", - "Updated\n", - "9 minutes ago\n", - "•\n", - "5.03k\n", - "•\n", - "404\n", - "•\n", - "7\n", - "huggingface/paper-central-data\n", - "Viewer\n", - "•\n", - "Updated\n", - "about 6 hours ago\n", - "•\n", - "119k\n", - "•\n", - "553\n", - "•\n", - "8\n", - "huggingface/documentation-images\n", - "Viewer\n", - "•\n", - "Updated\n", - "1 day ago\n", - "•\n", - "44\n", - "•\n", - "2.43M\n", - "•\n", - "43\n", - "huggingface/transformers-metadata\n", - "Viewer\n", - "•\n", - "Updated\n", - "2 days ago\n", - "•\n", - "1.52k\n", - "•\n", - "559\n", - "•\n", - "14\n", - "huggingface/diffusers-metadata\n", - "Viewer\n", - "•\n", - "Updated\n", - "2 days ago\n", - "•\n", - "62\n", - "•\n", - "442\n", - "•\n", - "4\n", - "huggingface/policy-docs\n", - "Updated\n", - "3 days ago\n", - "•\n", - "898\n", - "•\n", - "6\n", - "huggingface/my-distiset-3f5a230e\n", - "Updated\n", - "30 days ago\n", - "•\n", - "17\n", - "huggingface/cookbook-images\n", - "Viewer\n", - "•\n", - "Updated\n", - "Nov 14\n", - "•\n", - "1\n", - "•\n", - "40.1k\n", - "•\n", - "6\n", - "huggingface/vllm-metadata\n", - "Updated\n", - "Oct 8\n", - "•\n", - "12\n", - "huggingface/paper-central-data-2\n", - "Viewer\n", - "•\n", - "Updated\n", - "Oct 4\n", - "•\n", - "58.3k\n", - "•\n", - "68\n", - "•\n", - "2\n", - "Expand 31\n", - "\t\t\t\t\t\t\tdatasets\n", - "System theme\n", - "Company\n", - "TOS\n", - "Privacy\n", - "About\n", - "Jobs\n", - "Website\n", - "Models\n", - "Datasets\n", - "Spaces\n", - "Pricing\n", - "Docs\n", - "\n", - "\n", - "\n", - "community discussions\n", - "Webpage Title:\n", - "Hugging Face Forums - Hugging Face Community Discussion\n", - "Webpage Contents:\n", - "Loading\n", - "Hugging Face Forums\n", - "Topic\n", - "Replies\n", - "Views\n", - "Activity\n", - "List of `size_categories`\n", - "🤗Datasets\n", - "3\n", - "5\n", - "December 21, 2024\n", - "Feature request - maintain list of favorite hf pages reachable from my hom epage\n", - "Site Feedback\n", - "4\n", - "886\n", - "December 21, 2024\n", - "404 error on carbon emission calculation\n", - "Site Feedback\n", - "1\n", - "7\n", - "December 21, 2024\n", - "Cannot connect gRPC Server Hosted on HuggingFace Spaces\n", - "Spaces\n", - "0\n", - "8\n", - "December 21, 2024\n", - "Hide system prompt or system instruction\n", - "Beginners\n", - "3\n", - "15\n", - "December 21, 2024\n", - "ModuleNotFoundError: No module named 'huggingface_hub.inference._types'\n", - "🤗Hub\n", - "0\n", - "5\n", - "December 21, 2024\n", - "Understanding State Management with Gradio and LangGraph\n", - "Beginners\n", - "1\n", - "11\n", - "December 21, 2024\n", - "Dimension problem\n", - "Beginners\n", - "25\n", - "21\n", - "December 21, 2024\n", - "Fine-tuning whisper on sound-event-detection dataset\n", - "🤗Transformers\n", - "0\n", - "4\n", - "December 20, 2024\n", - "Model that can generate both text and image as output\n", - "Research\n", - "4\n", - "42\n", - "December 21, 2024\n", - "Lm studio and Chat ui doesn't work with module\n", - "Beginners\n", - "11\n", - "33\n", - "December 21, 2024\n", - "Inference API Context Window and TOS\n", - "Beginners\n", - "0\n", - "12\n", - "December 20, 2024\n", - "Talkie AI got remove from app store -any alternative ai chat?\n", - "Beginners\n", - "4\n", - "1151\n", - "December 18, 2024\n", - "Inference Text Generation API issue\n", - "Intermediate\n", - "0\n", - "7\n", - "December 20, 2024\n", - "From Pandas Dataframe to Huggingface Dataset\n", - "Beginners\n", - "9\n", - "60459\n", - "December 20, 2024\n", - "\"Load Diffusion Model\" and \"Unet Loader (GGUF)\" null/undefined\n", - "Beginners\n", - "6\n", - "200\n", - "December 20, 2024\n", - "Timeout Issue with DeepSpeed on Multiple GPUs\n", - "DeepSpeed\n", - "0\n", - "8\n", - "December 20, 2024\n", - "Spaces dedicated gpu limit\n", - "Spaces\n", - "1\n", - "14\n", - "December 19, 2024\n", - "Chatbot PDF - using flan-t5-large model\n", - "Models\n", - "0\n", - "7\n", - "December 20, 2024\n", - "Gateway Problem\n", - "Beginners\n", - "0\n", - "8\n", - "December 20, 2024\n", - "RT-DETR attention map dimension - PekingU/rtdetr_r50vd\n", - "Models\n", - "0\n", - "5\n", - "December 20, 2024\n", - "Extending the tokenizer affects model generation\n", - "Intermediate\n", - "3\n", - "9\n", - "December 19, 2024\n", - "How to Ensure Each Process Reads Its Own Dataset and Trains Correctly When Using Trainer?\n", - "🤗Transformers\n", - "0\n", - "5\n", - "December 20, 2024\n", - "Can't save the tensorflow model of nvidia/mit-b5\n", - "Intermediate\n", - "3\n", - "127\n", - "December 19, 2024\n", - "# Audio course Unit 4. sample code not working. Can anyone check for me? Thanks\n", - "Course\n", - "0\n", - "6\n", - "December 20, 2024\n", - "Host Models on Hugging face and Perform Inference on Hugging Face Infrastructure\n", - "Beginners\n", - "0\n", - "6\n", - "December 20, 2024\n", - "Torchrun, trainer, dataset setup\n", - "Intermediate\n", - "4\n", - "71\n", - "December 20, 2024\n", - "Training fails on multiple GPUs with RuntimeError 'chuck expects at least a 1-dimensional array'\n", - "Beginners\n", - "2\n", - "108\n", - "December 19, 2024\n", - "How do you know whether the model is merged and uploaded?\n", - "Intermediate\n", - "0\n", - "11\n", - "December 20, 2024\n", - "Qwen based AI assistant randomly having an absolute, utter, complete 'mental breakdowns'?? (Inference API)\n", - "🤗Transformers\n", - "2\n", - "23\n", - "December 17, 2024\n", - "next page →\n", - "Home\n", - "Categories\n", - "Guidelines\n", - "Terms of Service\n", - "Privacy Policy\n", - "Powered by\n", - "Discourse\n", - ", best viewed with JavaScript enabled\n", - "\n", - "\n", - "\n", - "GitHub page\n", - "Webpage Title:\n", - "Hugging Face · GitHub\n", - "Webpage Contents:\n", - "Skip to content\n", - "Navigation Menu\n", - "Toggle navigation\n", - "Sign in\n", - "huggingface\n", - "Product\n", - "GitHub Copilot\n", - "Write better code with AI\n", - "Security\n", - "Find and fix vulnerabilities\n", - "Actions\n", - "Automate any workflow\n", - "Codespaces\n", - "Instant dev environments\n", - "Issues\n", - "Plan and track work\n", - "Code Review\n", - "Manage code changes\n", - "Discussions\n", - "Collaborate outside of code\n", - "Code Search\n", - "Find more, search less\n", - "Explore\n", - "All features\n", - "Documentation\n", - "GitHub Skills\n", - "Blog\n", - "Solutions\n", - "By company size\n", - "Enterprises\n", - "Small and medium teams\n", - "Startups\n", - "By use case\n", - "DevSecOps\n", - "DevOps\n", - "CI/CD\n", - "View all use cases\n", - "By industry\n", - "Healthcare\n", - "Financial services\n", - "Manufacturing\n", - "Government\n", - "View all industries\n", - "View all solutions\n", - "Resources\n", - "Topics\n", - "AI\n", - "DevOps\n", - "Security\n", - "Software Development\n", - "View all\n", - "Explore\n", - "Learning Pathways\n", - "White papers, Ebooks, Webinars\n", - "Customer Stories\n", - "Partners\n", - "Executive Insights\n", - "Open Source\n", - "GitHub Sponsors\n", - "Fund open source developers\n", - "The ReadME Project\n", - "GitHub community articles\n", - "Repositories\n", - "Topics\n", - "Trending\n", - "Collections\n", - "Enterprise\n", - "Enterprise platform\n", - "AI-powered developer platform\n", - "Available add-ons\n", - "Advanced Security\n", - "Enterprise-grade security features\n", - "GitHub Copilot\n", - "Enterprise-grade AI features\n", - "Premium Support\n", - "Enterprise-grade 24/7 support\n", - "Pricing\n", - "Search or jump to...\n", - "Search code, repositories, users, issues, pull requests...\n", - "Search\n", - "Clear\n", - "Search syntax tips\n", - "Provide feedback\n", - "We read every piece of feedback, and take your input very seriously.\n", - "Include my email address so I can be contacted\n", - "Cancel\n", - "Submit feedback\n", - "Saved searches\n", - "Use saved searches to filter your results more quickly\n", - "Cancel\n", - "Create saved search\n", - "Sign in\n", - "Sign up\n", - "Reseting focus\n", - "You signed in with another tab or window.\n", - "Reload\n", - "to refresh your session.\n", - "You signed out in another tab or window.\n", - "Reload\n", - "to refresh your session.\n", - "You switched accounts on another tab or window.\n", - "Reload\n", - "to refresh your session.\n", - "Dismiss alert\n", - "Hugging Face\n", - "The AI community building the future.\n", - "Verified\n", - "We've verified that the organization\n", - "huggingface\n", - "controls the domain:\n", - "huggingface.co\n", - "Learn more about verified organizations\n", - "40.1k\n", - "followers\n", - "NYC + Paris\n", - "https://huggingface.co/\n", - "X\n", - "@huggingface\n", - "Overview\n", - "Repositories\n", - "Projects\n", - "Packages\n", - "People\n", - "Sponsoring\n", - "0\n", - "More\n", - "Overview\n", - "Repositories\n", - "Projects\n", - "Packages\n", - "People\n", - "Sponsoring\n", - "Pinned\n", - "Loading\n", - "transformers\n", - "transformers\n", - "Public\n", - "🤗 Transformers: State-of-the-art Machine Learning for Pytorch, TensorFlow, and JAX.\n", - "Python\n", - "137k\n", - "27.3k\n", - "diffusers\n", - "diffusers\n", - "Public\n", - "🤗 Diffusers: State-of-the-art diffusion models for image and audio generation in PyTorch and FLAX.\n", - "Python\n", - "26.7k\n", - "5.5k\n", - "datasets\n", - "datasets\n", - "Public\n", - "🤗 The largest hub of ready-to-use datasets for ML models with fast, easy-to-use and efficient data manipulation tools\n", - "Python\n", - "19.4k\n", - "2.7k\n", - "peft\n", - "peft\n", - "Public\n", - "🤗 PEFT: State-of-the-art Parameter-Efficient Fine-Tuning.\n", - "Python\n", - "16.8k\n", - "1.7k\n", - "accelerate\n", - "accelerate\n", - "Public\n", - "🚀 A simple way to launch, train, and use PyTorch models on almost any device and distributed configuration, automatic mixed precision (including fp8), and easy-to-configure FSDP and DeepSpeed support\n", - "Python\n", - "8.1k\n", - "995\n", - "optimum\n", - "optimum\n", - "Public\n", - "🚀 Accelerate inference and training of 🤗 Transformers, Diffusers, TIMM and Sentence Transformers with easy to use hardware optimization tools\n", - "Python\n", - "2.6k\n", - "486\n", - "Repositories\n", - "Loading\n", - "Type\n", - "Select type\n", - "Forks\n", - "Archived\n", - "Mirrors\n", - "Templates\n", - "Language\n", - "Select language\n", - "All\n", - "C\n", - "C#\n", - "C++\n", - "Cuda\n", - "Dockerfile\n", - "Go\n", - "Handlebars\n", - "HTML\n", - "Java\n", - "JavaScript\n", - "Jupyter Notebook\n", - "Kotlin\n", - "Lua\n", - "MDX\n", - "Mustache\n", - "Nix\n", - "Python\n", - "Rust\n", - "Shell\n", - "Smarty\n", - "Swift\n", - "TypeScript\n", - "Sort\n", - "Select order\n", - "Last updated\n", - "Name\n", - "Stars\n", - "Showing 10 of 275 repositories\n", - "trl\n", - "Public\n", - "Train transformer language models with reinforcement learning.\n", - "huggingface/trl’s past year of commit activity\n", - "Python\n", - "10,382\n", - "Apache-2.0\n", - "1,337\n", - "106\n", - "46\n", - "Updated\n", - "Dec 21, 2024\n", - "transformers.js\n", - "Public\n", - "State-of-the-art Machine Learning for the web. Run 🤗 Transformers directly in your browser, with no need for a server!\n", - "huggingface/transformers.js’s past year of commit activity\n", - "JavaScript\n", - "12,421\n", - "Apache-2.0\n", - "790\n", - "274\n", - "(3 issues need help)\n", - "48\n", - "Updated\n", - "Dec 21, 2024\n", - "diffusers\n", - "Public\n", - "🤗 Diffusers: State-of-the-art diffusion models for image and audio generation in PyTorch and FLAX.\n", - "huggingface/diffusers’s past year of commit activity\n", - "Python\n", - "26,740\n", - "Apache-2.0\n", - "5,504\n", - "379\n", - "(10 issues need help)\n", - "169\n", - "Updated\n", - "Dec 21, 2024\n", - "text-generation-inference\n", - "Public\n", - "Large Language Model Text Generation Inference\n", - "huggingface/text-generation-inference’s past year of commit activity\n", - "Python\n", - "9,484\n", - "Apache-2.0\n", - "1,106\n", - "152\n", - "21\n", - "Updated\n", - "Dec 21, 2024\n", - "candle\n", - "Public\n", - "Minimalist ML framework for Rust\n", - "huggingface/candle’s past year of commit activity\n", - "Rust\n", - "16,103\n", - "Apache-2.0\n", - "980\n", - "344\n", - "(5 issues need help)\n", - "86\n", - "Updated\n", - "Dec 21, 2024\n", - "autotrain-advanced\n", - "Public\n", - "🤗 AutoTrain Advanced\n", - "huggingface/autotrain-advanced’s past year of commit activity\n", - "Python\n", - "4,157\n", - "Apache-2.0\n", - "505\n", - "16\n", - "2\n", - "Updated\n", - "Dec 21, 2024\n", - "transformers\n", - "Public\n", - "🤗 Transformers: State-of-the-art Machine Learning for Pytorch, TensorFlow, and JAX.\n", - "huggingface/transformers’s past year of commit activity\n", - "Python\n", - "136,571\n", - "Apache-2.0\n", - "27,342\n", - "1,003\n", - "(2 issues need help)\n", - "526\n", - "Updated\n", - "Dec 21, 2024\n", - "lighteval\n", - "Public\n", - "Lighteval is your all-in-one toolkit for evaluating LLMs across multiple backends\n", - "huggingface/lighteval’s past year of commit activity\n", - "Python\n", - "889\n", - "MIT\n", - "109\n", - "62\n", - "(1 issue needs help)\n", - "15\n", - "Updated\n", - "Dec 21, 2024\n", - "hub-docs\n", - "Public\n", - "Docs of the Hugging Face Hub\n", - "huggingface/hub-docs’s past year of commit activity\n", - "Handlebars\n", - "309\n", - "Apache-2.0\n", - "259\n", - "90\n", - "25\n", - "Updated\n", - "Dec 21, 2024\n", - "optimum-habana\n", - "Public\n", - "Easy and lightning fast training of 🤗 Transformers on Habana Gaudi processor (HPU)\n", - "huggingface/optimum-habana’s past year of commit activity\n", - "Python\n", - "162\n", - "Apache-2.0\n", - "219\n", - "11\n", - "(1 issue needs help)\n", - "40\n", - "Updated\n", - "Dec 21, 2024\n", - "View all repositories\n", - "People\n", - "View all\n", - "Top languages\n", - "Python\n", - "Jupyter Notebook\n", - "Rust\n", - "TypeScript\n", - "JavaScript\n", - "Most used topics\n", - "pytorch\n", - "machine-learning\n", - "nlp\n", - "deep-learning\n", - "transformers\n", - "Footer\n", - "© 2024 GitHub, Inc.\n", - "Footer navigation\n", - "Terms\n", - "Privacy\n", - "Security\n", - "Status\n", - "Docs\n", - "Contact\n", - "Manage cookies\n", - "Do not share my personal information\n", - "You can’t perform that action at this time.\n", - "\n", - "\n", - "\n", - "Twitter page\n", - "Webpage Title:\n", - "x.com\n", - "Webpage Contents:\n", - "\n", - "\n", - "\n", - "\n", - "LinkedIn page\n", - "Webpage Title:\n", - "Hugging Face | LinkedIn\n", - "Webpage Contents:\n", - "Skip to main content\n", - "LinkedIn\n", - "Articles\n", - "People\n", - "Learning\n", - "Jobs\n", - "Games\n", - "Get the app\n", - "Join now\n", - "Sign in\n", - "Hugging Face\n", - "Software Development\n", - "The AI community building the future.\n", - "See jobs\n", - "Follow\n", - "Discover all 472 employees\n", - "Report this company\n", - "About us\n", - "The AI community building the future.\n", - "Website\n", - "https://huggingface.co\n", - "External link for Hugging Face\n", - "Industry\n", - "Software Development\n", - "Company size\n", - "51-200 employees\n", - "Type\n", - "Privately Held\n", - "Founded\n", - "2016\n", - "Specialties\n", - "machine learning, natural language processing, and deep learning\n", - "Products\n", - "Hugging Face\n", - "Hugging Face\n", - "Natural Language Processing (NLP) Software\n", - "We‚Äôre on a journey to solve and democratize artificial intelligence through natural language.\n", - "Locations\n", - "Primary\n", - "Get directions\n", - "Paris, FR\n", - "Get directions\n", - "Employees at Hugging Face\n", - "Ludovic Huraux\n", - "Bassem ASSEH\n", - "Rajat Arya\n", - "Tech Lead & Software Engineer @ HF | prev: co-founder XetHub, Apple, Turi, AWS, Microsoft\n", - "Jeff Boudier\n", - "Product + Growth at Hugging Face\n", - "See all employees\n", - "Updates\n", - "Hugging Face\n", - "reposted this\n", - "Gradio\n", - "47,326 followers\n", - "7h\n", - "Report this post\n", - "NOW you can add AI to your Slack, Discord in just few steps with Gradio!ü§©\n", - "\n", - "üî•Create Slack apps, Discord bots, or Intercom-style website widgets in ANY modality (Text, image, Video, Audio, Omni etc)! Keep reading to learn how ‚¨áÔ∏è\n", - "\n", - "Guide: üöÄ Creating a Slack Bot from a Gradio App üöÄ\n", - "Read here:\n", - "https://lnkd.in/g2_Bydrj\n", - "ü§éDo you love building stuff with Gradio? Support us on GitHub:\n", - "Gradio.dev\n", - "‚Ķmore\n", - "50\n", - "Like\n", - "Comment\n", - "Share\n", - "Hugging Face\n", - "reposted this\n", - "Daniel V.\n", - "Machine Learning Librarian@ü§ó | Championing Open Science & Machine Learning\n", - "21h\n", - "Report this post\n", - "Introducing FineWeb-C üåêüéì, a community-built dataset for improving language models in ALL languages. \n", - "\n", - "Inspired by FineWeb-Edu the community is labelling the educational quality of texts for many languages. \n", - "\n", - "318 annotators, 32K+ annotations, 12 languages - and growing!üåç\n", - "57\n", - "2 Comments\n", - "Like\n", - "Comment\n", - "Share\n", - "Hugging Face\n", - "reposted this\n", - "Merve Noyan\n", - "open-sourceress at ü§ó | Google Developer Expert in Machine Learning, MSc Candidate in Data Science\n", - "22h\n", - "Report this post\n", - "Fine-tune ColPali for your multimodal RAG use case üî•\n", - "\n", - "ColPali just landed to\n", - "Hugging Face\n", - "transformers and I have built a simple fine-tuning tutorial with QLoRA ü§ó\n", - "You can fine-tune the model with 32 GB VRAM with batch size of 4 (which can run on Colab A100)\n", - "Link in comments üí¨\n", - "267\n", - "4 Comments\n", - "Like\n", - "Comment\n", - "Share\n", - "Hugging Face\n", - "reposted this\n", - "ü§ñ Avthar Sewrathan\n", - "AI and Developer Product Leader | I talk about using AI and building AI apps\n", - "1d\n", - "Report this post\n", - "TIL: You can now load any\n", - "Hugging Face\n", - "dataset into PostgreSQL with just 1 line of SQL ü§Ø\n", - "\n", - "All thanks to the pgai PostgreSQL extension. \n", - "\n", - "Shoutout to\n", - "Matvey Arye\n", - "from the\n", - "Timescale\n", - "AI engineering team for implementing this.\n", - "\n", - "Learn more about using PostgreSQL with HuggingFace datasets in the HuggingFace docs:\n", - "https://lnkd.in/eS4hqSDq\n", - "#postgresql\n", - "#huggingface\n", - "#opensource\n", - "180\n", - "14 Comments\n", - "Like\n", - "Comment\n", - "Share\n", - "Hugging Face\n", - "reposted this\n", - "Argilla\n", - "10,266 followers\n", - "1d\n", - "Report this post\n", - "üé¢ Push to Hub: Export your dataset to the Hugging Face Hub directly from the Argilla UI.\n", - "\n", - "We‚Äôre super excited to announce that we've closed the loop: now you can load a dataset from the Hub, open it on\n", - "Argilla\n", - "UI, label it, and push the annotated dataset to the Hub. All this without a line of code!\n", - "\n", - "\n", - "ùó™ùóµùòÜ ùòÄùóµùóºùòÇùóπùó± ùòÜùóºùòÇ ùòÇùòÄùó≤ ùó∂ùòÅ?\n", - "\n", - "Your AI project's impact depends heavily on the effort and care you put into your data. This new feature enables you to iterate faster and make annotated data available in the right format for training and evaluation.\n", - "\n", - "\n", - "ùóõùóºùòÑ ùó±ùóºùó≤ùòÄ ùó∂ùòÅ ùòÑùóºùóøùó∏?\n", - "\n", - "1Ô∏è‚É£ Import initial data from a CSV or any format to Hugging Face\n", - "2Ô∏è‚É£ Load it into the Argilla UI and configure the annotation task\n", - "3Ô∏è‚É£ Annotate your dataset\n", - "üöÄ Click on ‚ÄúPush to Hub‚Äù and share the dataset with your team (or the entire world)\n", - "\n", - "üëâ ùó•ùó≤ùóÆùó±ùòÜ ùòÅùóº ùòÅùóøùòÜ ùó∂ùòÅ ùóºùòÇùòÅ?\n", - "\n", - "Get started here:\n", - "https://lnkd.in/dhA-swR5\n", - "Release highlights:\n", - "https://lnkd.in/dbdQXG-W\n", - "35\n", - "3 Comments\n", - "Like\n", - "Comment\n", - "Share\n", - "Hugging Face\n", - "reposted this\n", - "Daniel V.\n", - "Machine Learning Librarian@ü§ó | Championing Open Science & Machine Learning\n", - "1d\n", - "Report this post\n", - "Hot take: shipping BERT-sized models in 2025 will benefit far more people than sharing an LLM overfitted to some saturated leaderboards \n", - "\n", - "We're already seeing ModernBERT finetunes on the\n", - "Hugging Face\n", - "Hub. My guess is we'll see hundreds of these by the end of 2025.\n", - "80\n", - "4 Comments\n", - "Like\n", - "Comment\n", - "Share\n", - "Hugging Face\n", - "reposted this\n", - "Gradio\n", - "47,326 followers\n", - "1d\n", - "Edited\n", - "Report this post\n", - "ü§Øüî•LEARN HOW TO CREATE interactive agentic chatbots using Gradio that are capable of showcasing the Thoughts, Tasks, and interim responses of Multiple Agents as you await the final answer from your AI assistant.\n", - "\n", - "üéØ Customer Support multi-agents with\n", - "CrewAI\n", - "and\n", - "Gradio\n", - "Showcasing here, a user-friendly, high-performing multi-agent gradio app. TO operate it, simply enter a webpage URL along with your questions related to that page, and in turn receive a high-quality response from the CrewAI Multi-Agent setup.\n", - "\n", - "üöÄAccess this app on\n", - "Hugging Face\n", - "Spaces:\n", - "https://lnkd.in/g6kXp_D2\n", - "‚Ķmore\n", - "72\n", - "1 Comment\n", - "Like\n", - "Comment\n", - "Share\n", - "Hugging Face\n", - "reposted this\n", - "Clem Delangue ü§ó\n", - "Clem Delangue ü§ó is an Influencer\n", - "Co-founder & CEO at Hugging Face\n", - "2d\n", - "Report this post\n", - "In the past few months, we've invested a lot of efforts in improving the user management features of the Hugging Face hub that more than 5M AI builder are now using. It helps not only for easier organization collaboration but also for security (for example to make sure ex team members don't still have access to private models). \n", - "\n", - "If your manager, VP AI or admin/CISO is not aware, mention them below so that we can connect if they have any questions or feedback as most of these features are part of the Enterprise hub subscriptions:\n", - "https://lnkd.in/e-RY-3vs\n", - ")\n", - "\n", - "Cheers!\n", - "47\n", - "3 Comments\n", - "Like\n", - "Comment\n", - "Share\n", - "Hugging Face\n", - "reposted this\n", - "Clem Delangue ü§ó\n", - "Clem Delangue ü§ó is an Influencer\n", - "Co-founder & CEO at Hugging Face\n", - "4d\n", - "Report this post\n", - "Just 10 days after o1's public debut, we‚Äôre thrilled to unveil the open-source version of the groundbreaking technique behind its success: scaling test-time compute ü߆üí° \n", - "\n", - "By giving models more \"time to think,\" Llama 1B outperforms Llama 8B in math‚Äîbeating a model 8x its size. The full recipe is open-sourceü§Ø \n", - "\n", - "This is the power of open science and open-source AI! üåç‚ú®\n", - "5,292\n", - "125 Comments\n", - "Like\n", - "Comment\n", - "Share\n", - "Hugging Face\n", - "reposted this\n", - "Philipp Schmid\n", - "Technical Lead & LLMs at Hugging Face ü§ó | AWS ML HERO ü¶∏ü誂ôÇÔ∏è\n", - "1d\n", - "Report this post\n", - "ModernBERT, BERT revisited in the age of LLMs and Generative AI!\n", - "LightOn\n", - "and\n", - "Answer.ai\n", - "modernized BERT! Improved architecture with 8192 context length, flash attention, and trained on 2T tokens. ModernBERT outperforms version BERT and RoBERTa versions! üëÄ\n", - "\n", - "TL;DR;\n", - "2Ô∏è‚É£¬†Comes in 2 sizes base (139M) and large (395M)\n", - "üöĬ†Better performance across all metrics than the original BERT\n", - "üìè 8,192 token context length (16x longer than BERT)\n", - "‚ö° Modern architecture with Flash Attention 2, RoPE embeddings, and alternating attention\n", - "üìö Trained on 2 trillion tokens, primarily English and Code\n", - "üí® 2-4x faster than other models with mixed-length inputs\n", - "üî쬆Released under Apache 2.0\n", - "ü§ó¬†Available on\n", - "Hugging Face\n", - "and Transformers (main)\n", - "\n", - "Models:\n", - "https://lnkd.in/ethiJ2xh\n", - "Blog:\n", - "https://lnkd.in/ebiEzb4P\n", - "Paper:\n", - "https://lnkd.in/ezR8MUBF\n", - "1,844\n", - "67 Comments\n", - "Like\n", - "Comment\n", - "Share\n", - "Join now to see what you are missing\n", - "Find people you know at Hugging Face\n", - "Browse recommended jobs for you\n", - "View all updates, news, and articles\n", - "Join now\n", - "Similar pages\n", - "Anthropic\n", - "Research Services\n", - "Mistral AI\n", - "Technology, Information and Internet\n", - "Paris, France\n", - "OpenAI\n", - "Research Services\n", - "San Francisco, CA\n", - "LangChain\n", - "Technology, Information and Internet\n", - "Perplexity\n", - "Software Development\n", - "San Francisco, California\n", - "Generative AI\n", - "Technology, Information and Internet\n", - "Google DeepMind\n", - "Research Services\n", - "London, London\n", - "LlamaIndex\n", - "Technology, Information and Internet\n", - "San Francisco, California\n", - "DeepLearning.AI\n", - "Software Development\n", - "Palo Alto, California\n", - "Cohere\n", - "Software Development\n", - "Toronto, Ontario\n", - "Show more similar pages\n", - "Show fewer similar pages\n", - "Browse jobs\n", - "Engineer jobs\n", - "555,845 open jobs\n", - "Machine Learning Engineer jobs\n", - "148,937 open jobs\n", - "Scientist jobs\n", - "48,969 open jobs\n", - "Software Engineer jobs\n", - "300,699 open jobs\n", - "Intern jobs\n", - "71,196 open jobs\n", - "Developer jobs\n", - "258,935 open jobs\n", - "Analyst jobs\n", - "694,057 open jobs\n", - "Intelligence Specialist jobs\n", - "7,156 open jobs\n", - "Manager jobs\n", - "1,880,925 open jobs\n", - "Data Scientist jobs\n", - "264,158 open jobs\n", - "Director jobs\n", - "1,220,357 open jobs\n", - "Associate jobs\n", - "1,091,945 open jobs\n", - "Python Developer jobs\n", - "46,642 open jobs\n", - "Evangelist jobs\n", - "5,068 open jobs\n", - "Data Engineer jobs\n", - "192,126 open jobs\n", - "Vice President jobs\n", - "235,270 open jobs\n", - "Quantitative Analyst jobs\n", - "19,570 open jobs\n", - "Program Manager jobs\n", - "243,900 open jobs\n", - "Data Science Specialist jobs\n", - "2,441 open jobs\n", - "Lead Software Engineer jobs\n", - "68,215 open jobs\n", - "Show more jobs like this\n", - "Show fewer jobs like this\n", - "Funding\n", - "Hugging Face\n", - "7 total rounds\n", - "Last Round\n", - "Series D\n", - "Feb 16, 2024\n", - "External Crunchbase Link for last round of funding\n", - "See more info on\n", - "crunchbase\n", - "More searches\n", - "More searches\n", - "Engineer jobs\n", - "Intern jobs\n", - "Machine Learning Engineer jobs\n", - "Software Engineer jobs\n", - "Scientist jobs\n", - "Developer jobs\n", - "Research Intern jobs\n", - "Analyst jobs\n", - "Intelligence Specialist jobs\n", - "Quantitative Analyst jobs\n", - "Technician jobs\n", - "Data Science Specialist jobs\n", - "Project Manager jobs\n", - "Summer Intern jobs\n", - "Manager jobs\n", - "Senior Staff Engineer jobs\n", - "PHD jobs\n", - "Trader jobs\n", - "Researcher jobs\n", - "Data Scientist jobs\n", - "Writer jobs\n", - "Data Analyst jobs\n", - "Product Designer jobs\n", - "Back End Developer jobs\n", - "Spring Intern jobs\n", - "Program Manager jobs\n", - "Technology Officer jobs\n", - "Software Intern jobs\n", - "Security Professional jobs\n", - "Senior Software Engineer jobs\n", - "Python Developer jobs\n", - "Engineering Manager jobs\n", - "Web Developer jobs\n", - "Graduate jobs\n", - "Full Stack Engineer jobs\n", - "Professor jobs\n", - "Head jobs\n", - "Verification Manager jobs\n", - "User Experience Designer jobs\n", - "Recruiter jobs\n", - "Chief Executive Officer jobs\n", - "Associate jobs\n", - "Support Developer jobs\n", - "Senior Firmware Engineer jobs\n", - "Marketing Manager jobs\n", - "Modeling Engineer jobs\n", - "Designer jobs\n", - "Automation Lead jobs\n", - "Options Trader jobs\n", - "Agile Coach jobs\n", - "Research Engineer jobs\n", - "Software Quality Assurance Analyst jobs\n", - "User Experience Manager jobs\n", - "Technical Intern jobs\n", - "Junior Network Engineer jobs\n", - "Information Technology Recruiter jobs\n", - "User Researcher jobs\n", - "Player jobs\n", - "Engineering Project Manager jobs\n", - "Digital Strategist jobs\n", - "LinkedIn\n", - "© 2024\n", - "About\n", - "Accessibility\n", - "User Agreement\n", - "Privacy Policy\n", - "Cookie Policy\n", - "Copyright Policy\n", - "Brand Policy\n", - "Guest Controls\n", - "Community Guidelines\n", - "ÿߟÑÿπÿ±ÿ®Ÿäÿ© (Arabic)\n", - "‡¶¨‡¶æ‡¶Ç‡¶≤‡¶æ (Bangla)\n", - "ƒåe≈°tina (Czech)\n", - "Dansk (Danish)\n", - "Deutsch (German)\n", - "ŒïŒªŒªŒ∑ŒΩŒπŒ∫Œ¨ (Greek)\n", - "English (English)\n", - "Espa√±ol (Spanish)\n", - "ŸÅÿßÿ±ÿ≥€å (Persian)\n", - "Suomi (Finnish)\n", - "Fran√ßais (French)\n", - "‡§π‡§ø‡§Ç‡§¶‡•Ä (Hindi)\n", - "Magyar (Hungarian)\n", - "Bahasa Indonesia (Indonesian)\n", - "Italiano (Italian)\n", - "◊¢◊ë◊®◊ô◊™ (Hebrew)\n", - "Êó•Êú¨Ë™û (Japanese)\n", - "Ìïú͵≠Ïñ¥ (Korean)\n", - "‡§Æ‡§∞‡§æ‡§†‡•Ä (Marathi)\n", - "Bahasa Malaysia (Malay)\n", - "Nederlands (Dutch)\n", - "Norsk (Norwegian)\n", - "‡®™‡©∞‡®ú‡®æ‡®¨‡©Ä (Punjabi)\n", - "Polski (Polish)\n", - "Portugu√™s (Portuguese)\n", - "Rom√¢nƒÉ (Romanian)\n", - "–†—É—Å—Å–∫–∏–π (Russian)\n", - "Svenska (Swedish)\n", - "‡∞§‡±Ü‡∞≤‡±Å‡∞ó‡±Å (Telugu)\n", - "‡∏†‡∏≤‡∏©‡∏≤‡πч∏ó‡∏¢ (Thai)\n", - "Tagalog (Tagalog)\n", - "T√ºrk√ße (Turkish)\n", - "–£–∫—Ä–∞—ó–Ω—Å—å–∫–∞ (Ukrainian)\n", - "Ti·∫øng Vi·ªát (Vietnamese)\n", - "ÁÆÄ‰Ωì‰∏≠Êñá (Chinese (Simplified))\n", - "Ê≠£È´î‰∏≠Êñá (Chinese (Traditional))\n", - "Language\n", - "Agree & Join LinkedIn\n", - "By clicking Continue to join or sign in, you agree to LinkedIn‚Äôs\n", - "User Agreement\n", - ",\n", - "Privacy Policy\n", - ", and\n", - "Cookie Policy\n", - ".\n", - "Sign in to see who you already know at Hugging Face\n", - "Sign in\n", - "Welcome back\n", - "Email or phone\n", - "Password\n", - "Show\n", - "Forgot password?\n", - "Sign in\n", - "or\n", - "By clicking Continue to join or sign in, you agree to LinkedIn‚Äôs\n", - "User Agreement\n", - ",\n", - "Privacy Policy\n", - ", and\n", - "Cookie Policy\n", - ".\n", - "New to LinkedIn?\n", - "Join now\n", - "or\n", - "New to LinkedIn?\n", - "Join now\n", - "By clicking Continue to join or sign in, you agree to LinkedIn‚Äôs\n", - "User Agreement\n", - ",\n", - "Privacy Policy\n", - ", and\n", - "Cookie Policy\n", - ".\n", - "LinkedIn\n", - "LinkedIn is better on the app\n", - "Don‚Äôt have the app? Get it in the Microsoft Store.\n", - "Open the app\n", - "\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "print(get_all_details(\"https://huggingface.co\"))" ] @@ -2674,359 +300,10 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "id": "cd909e0b-1312-4ce2-a553-821e795d7572", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Found links: {'links': [{'type': 'about page', 'url': 'https://huggingface.co/'}, {'type': 'careers page', 'url': 'https://apply.workable.com/huggingface/'}, {'type': 'blog', 'url': 'https://huggingface.co/blog'}, {'type': 'company page', 'url': 'https://huggingface.co/enterprise'}]}\n", - "You are looking at a company called: HuggingFace\n", - "Here are the contents of its landing page and other relevant pages; use this information to build a short brochure of the company in markdown.\n", - "Landing page:\n", - "Webpage Title:\n", - "Hugging Face – The AI community building the future.\n", - "Webpage Contents:\n", - "Hugging Face\n", - "Models\n", - "Datasets\n", - "Spaces\n", - "Posts\n", - "Docs\n", - "Enterprise\n", - "Pricing\n", - "Log In\n", - "Sign Up\n", - "The AI community building the future.\n", - "The platform where the machine learning community collaborates on models, datasets, and applications.\n", - "Trending on\n", - "this week\n", - "Models\n", - "IamCreateAI/Ruyi-Mini-7B\n", - "Updated\n", - "4 days ago\n", - "•\n", - "8.17k\n", - "•\n", - "352\n", - "Datou1111/shou_xin\n", - "Updated\n", - "12 days ago\n", - "•\n", - "28.3k\n", - "•\n", - "672\n", - "answerdotai/ModernBERT-base\n", - "Updated\n", - "1 day ago\n", - "•\n", - "6.24k\n", - "•\n", - "236\n", - "meta-llama/Llama-3.3-70B-Instruct\n", - "Updated\n", - "11 days ago\n", - "•\n", - "236k\n", - "•\n", - "1.21k\n", - "tencent/HunyuanVideo\n", - "Updated\n", - "3 days ago\n", - "•\n", - "6.01k\n", - "•\n", - "1.2k\n", - "Browse 400k+ models\n", - "Spaces\n", - "Running\n", - "on\n", - "Zero\n", - "1.79k\n", - "🏢\n", - "TRELLIS\n", - "Scalable and Versatile 3D Generation from images\n", - "Running\n", - "306\n", - "📝\n", - "Scaling test-time compute\n", - "Running\n", - "on\n", - "Zero\n", - "470\n", - "🚀\n", - "Flux Style Shaping\n", - "Optical illusions and style transfer with FLUX\n", - "Running\n", - "on\n", - "CPU Upgrade\n", - "6.11k\n", - "👕\n", - "Kolors Virtual Try-On\n", - "Running\n", - "on\n", - "Zero\n", - "965\n", - "📈\n", - "IC Light V2\n", - "Browse 150k+ applications\n", - "Datasets\n", - "fka/awesome-chatgpt-prompts\n", - "Updated\n", - "Sep 3\n", - "•\n", - "6.83k\n", - "•\n", - "6.58k\n", - "O1-OPEN/OpenO1-SFT\n", - "Updated\n", - "4 days ago\n", - "•\n", - "1.86k\n", - "•\n", - "234\n", - "HuggingFaceFW/fineweb-2\n", - "Updated\n", - "13 days ago\n", - "•\n", - "77.7k\n", - "•\n", - "342\n", - "HuggingFaceTB/finemath\n", - "Updated\n", - "1 day ago\n", - "•\n", - "1.86k\n", - "•\n", - "43\n", - "amphora/QwQ-LongCoT-130K\n", - "Updated\n", - "16 days ago\n", - "•\n", - "1.34k\n", - "•\n", - "85\n", - "Browse 100k+ datasets\n", - "The Home of Machine Learning\n", - "Create, discover and collaborate on ML better.\n", - "The collaboration platform\n", - "Host and collaborate on unlimited public models, datasets and applications.\n", - "Move faster\n", - "With the HF Open source stack.\n", - "Explore all modalities\n", - "Text, image, video, audio or even 3D.\n", - "Build your portfolio\n", - "Share your work with the world and build your ML profile.\n", - "Sign Up\n", - "Accelerate your ML\n", - "We provide paid Compute and Enterprise solutions.\n", - "Compute\n", - "Deploy on optimized\n", - "Inference Endpoints\n", - "or update your\n", - "Spaces applications\n", - "to a GPU in a few clicks.\n", - "View pricing\n", - "Starting at $0.60/hour for GPU\n", - "Enterprise\n", - "Give your team the most advanced platform to build AI with enterprise-grade security, access controls and\n", - "\t\t\tdedicated support.\n", - "Getting started\n", - "Starting at $20/user/month\n", - "Single Sign-On\n", - "Regions\n", - "Priority Support\n", - "Audit Logs\n", - "Resource Groups\n", - "Private Datasets Viewer\n", - "More than 50,000 organizations are using Hugging Face\n", - "Ai2\n", - "Enterprise\n", - "non-profit\n", - "•\n", - "366 models\n", - "•\n", - "1.76k followers\n", - "AI at Meta\n", - "Enterprise\n", - "company\n", - "•\n", - "2.05k models\n", - "•\n", - "3.83k followers\n", - "Amazon Web Services\n", - "company\n", - "•\n", - "21 models\n", - "•\n", - "2.45k followers\n", - "Google\n", - "company\n", - "•\n", - "911 models\n", - "•\n", - "5.76k followers\n", - "Intel\n", - "company\n", - "•\n", - "217 models\n", - "•\n", - "2.07k followers\n", - "Microsoft\n", - "company\n", - "•\n", - "351 models\n", - "•\n", - "6.29k followers\n", - "Grammarly\n", - "company\n", - "•\n", - "10 models\n", - "•\n", - "102 followers\n", - "Writer\n", - "Enterprise\n", - "company\n", - "•\n", - "17 models\n", - "•\n", - "186 followers\n", - "Our Open Source\n", - "We are building the foundation of ML tooling with the community.\n", - "Transformers\n", - "136,571\n", - "State-of-the-art ML for Pytorch, TensorFlow, and JAX.\n", - "Diffusers\n", - "26,740\n", - "State-of-the-art diffusion models for image and audio generation in PyTorch.\n", - "Safetensors\n", - "2,960\n", - "Simple, safe way to store and distribute neural networks weights safely and quickly.\n", - "Hub Python Library\n", - "2,177\n", - "Client library for the HF Hub: manage repositories from your Python runtime.\n", - "Tokenizers\n", - "9,165\n", - "Fast tokenizers, optimized for both research and production.\n", - "PEFT\n", - "16,767\n", - "Parameter efficient finetuning methods for large models.\n", - "Transformers.js\n", - "12,421\n", - "State-of-the-art Machine Learning for the web. Run Transformers directly in your browser, with no need for a server.\n", - "timm\n", - "32,668\n", - "State-of-the-art computer vision models, layers, optimizers, training/evaluation, and utilities.\n", - "TRL\n", - "10,382\n", - "Train transformer language models with reinforcement learning.\n", - "Datasets\n", - "19,378\n", - "Access and share datasets for computer vision, audio, and NLP tasks.\n", - "Text Generation Inference\n", - "9,484\n", - "Toolkit to serve Large Language Models.\n", - "Accelerate\n", - "8,082\n", - "Easily train and use PyTorch models with multi-GPU, TPU, mixed-precision.\n", - "System theme\n", - "Website\n", - "Models\n", - "Datasets\n", - "Spaces\n", - "Tasks\n", - "Inference Endpoints\n", - "HuggingChat\n", - "Company\n", - "About\n", - "Brand assets\n", - "Terms of service\n", - "Privacy\n", - "Jobs\n", - "Press\n", - "Resources\n", - "Learn\n", - "Documentation\n", - "Blog\n", - "Forum\n", - "Service Status\n", - "Social\n", - "GitHub\n", - "Twitter\n", - "LinkedIn\n", - "Discord\n", - "\n", - "\n", - "\n", - "about page\n", - "Webpage Title:\n", - "Hugging Face – The AI community building the future.\n", - "Webpage Contents:\n", - "Hugging Face\n", - "Models\n", - "Datasets\n", - "Spaces\n", - "Posts\n", - "Docs\n", - "Enterprise\n", - "Pricing\n", - "Log In\n", - "Sign Up\n", - "The AI community building the future.\n", - "The platform where the machine learning community collaborates on models, datasets, and applications.\n", - "Trending on\n", - "this week\n", - "Models\n", - "IamCreateAI/Ruyi-Mini-7B\n", - "Updated\n", - "4 days ago\n", - "•\n", - "8.17k\n", - "•\n", - "352\n", - "Datou1111/shou_xin\n", - "Updated\n", - "12 days ago\n", - "•\n", - "28.3k\n", - "•\n", - "672\n", - "answerdotai/ModernBERT-base\n", - "Updated\n", - "1 day ago\n", - "•\n", - "6.24k\n", - "•\n", - "236\n", - "meta-llama/Llama-3.3-70B-Instruct\n", - "Updated\n", - "11 days ago\n", - "•\n", - "236k\n", - "•\n", - "1.21k\n", - "tencent/HunyuanVideo\n", - "Updated\n", - "3 days ago\n", - "•\n", - "6.01k\n", - "•\n", - "1.2k\n", - "Browse 400k+ models\n", - "Spaces\n", - "Running\n", - "on\n", - "Zero\n", - "1.79k\n", - "🏢\n", - "TRELLIS\n", - "Scalable and Versatile 3D Generation from images\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "print(get_brochure_user_prompt(\"HuggingFace\", \"https://huggingface.co\"))" ] @@ -3052,103 +329,10 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "id": "e093444a-9407-42ae-924a-145730591a39", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Found links: {'links': [{'type': 'home page', 'url': 'https://huggingface.com/'}, {'type': 'about page', 'url': 'https://huggingface.com/huggingface'}, {'type': 'careers page', 'url': 'https://apply.workable.com/huggingface/'}, {'type': 'enterprise page', 'url': 'https://huggingface.com/enterprise'}, {'type': 'pricing page', 'url': 'https://huggingface.com/pricing'}, {'type': 'blog page', 'url': 'https://huggingface.com/blog'}, {'type': 'community page', 'url': 'https://discuss.huggingface.co'}, {'type': 'GitHub page', 'url': 'https://github.com/huggingface'}, {'type': 'Twitter page', 'url': 'https://twitter.com/huggingface'}, {'type': 'LinkedIn page', 'url': 'https://www.linkedin.com/company/huggingface/'}]}\n" - ] - }, - { - "data": { - "text/markdown": [ - "# Hugging Face Brochure\n", - "\n", - "**Hugging Face** \n", - "*The AI community building the future.*\n", - "\n", - "---\n", - "\n", - "## About Us\n", - "Hugging Face is a pioneering platform where the machine learning community comes together to collaborate on models, datasets, and applications. With over 400,000 models and 100,000 datasets available, we empower users to create, discover, and innovate in the field of machine learning.\n", - "\n", - "### Our Mission\n", - "To accelerate the development and deployment of machine learning applications, making cutting-edge technology accessible to everyone.\n", - "\n", - "---\n", - "\n", - "## Company Culture\n", - "At Hugging Face, we believe in the power of collaboration and open-source technology. We foster an inclusive environment where every team member's input is valued, allowing for diverse ideas and perspectives. Our culture emphasizes continuous learning, innovation, and a commitment to advancing AI for the greater good.\n", - "\n", - "---\n", - "\n", - "## Customers\n", - "Hugging Face serves more than 50,000 organizations, including industry leaders such as:\n", - "\n", - "- **Amazon Web Services**\n", - "- **Meta**\n", - "- **Google**\n", - "- **Microsoft**\n", - "- **Intel**\n", - " \n", - "These organizations utilize our platform for various machine learning tasks, enhancing their workflows and outputs.\n", - "\n", - "---\n", - "\n", - "## Careers at Hugging Face\n", - "We are always on the lookout for talented individuals who are passionate about AI and machine learning. Career opportunities at Hugging Face offer:\n", - "\n", - "- A collaborative work environment\n", - "- Remote work flexibility\n", - "- Continuing education and mentorship\n", - "- Opportunities to work on impactful projects\n", - "\n", - "**Join us and help shape the future of AI!**\n", - "\n", - "---\n", - "\n", - "## Our Offerings\n", - "### Models\n", - "- Access over 400,000 machine learning models, covering a variety of tasks and technologies.\n", - "\n", - "### Datasets\n", - "- Discover and share 100,000+ datasets tailored for computer vision, audio, and NLP tasks.\n", - "\n", - "### Spaces\n", - "- Utilize our application space to run various applications including real-time projects and demonstrations.\n", - "\n", - "### Enterprise Solutions\n", - "- With dedicated support and industry-grade security, our Enterprise solutions are designed for organizations looking to implement AI at scale.\n", - "\n", - "---\n", - "\n", - "## Get Started Today!\n", - "**Sign up now** to become part of the Hugging Face community and access an array of tools to accelerate your machine learning journey. \n", - "[Sign Up Here](#)\n", - "\n", - "---\n", - "\n", - "**Stay Connected** \n", - "Follow us on our social media platforms:\n", - "- [GitHub](#)\n", - "- [Twitter](#)\n", - "- [LinkedIn](#)\n", - "- [Discord](#)\n", - "\n", - "**Hugging Face – Building the Future of AI**" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "create_brochure(\"HuggingFace\", \"https://huggingface.com\")" ] @@ -3191,178 +375,20 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "id": "56bf0ae3-ee9d-4a72-9cd6-edcac67ceb6d", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Found links: {'links': [{'type': 'about page', 'url': 'https://huggingface.co'}, {'type': 'careers page', 'url': 'https://apply.workable.com/huggingface/'}, {'type': 'enterprise page', 'url': 'https://huggingface.co/enterprise'}, {'type': 'blog page', 'url': 'https://huggingface.co/blog'}, {'type': 'community discussion', 'url': 'https://discuss.huggingface.co'}, {'type': 'GitHub page', 'url': 'https://github.com/huggingface'}, {'type': 'Twitter page', 'url': 'https://twitter.com/huggingface'}, {'type': 'LinkedIn page', 'url': 'https://www.linkedin.com/company/huggingface/'}]}\n" - ] - }, - { - "data": { - "text/markdown": [ - "# Welcome to Hugging Face\n", - "\n", - "## The AI Community Building the Future\n", - "\n", - "At Hugging Face, we bring together the machine learning community to collaborate on groundbreaking models, datasets, and applications. Our platform is a vibrant hub where innovation meets practicality, empowering developers and researchers to create state-of-the-art AI solutions.\n", - "\n", - "---\n", - "\n", - "### 🏆 What We Offer\n", - "\n", - "- **Models**: Access and discover over **400k+ models** including the latest advancements in AI.\n", - "- **Datasets**: A rich collection of **100k+ datasets** tailored for various machine learning tasks.\n", - "- **Spaces**: Collaborate on applications and projects seamlessly within our community’s creative workspace.\n", - "\n", - "---\n", - "\n", - "### 🌏 Our Customers\n", - "\n", - "Join the ranks of **50,000+ organizations** leveraging Hugging Face’s offerings, including industry giants like:\n", - "- **Meta**\n", - "- **Amazon Web Services**\n", - "- **Google**\n", - "- **Microsoft**\n", - "- **Grammarly**\n", - "\n", - "These companies trust us to accelerate their machine learning initiatives and foster innovation.\n", - "\n", - "---\n", - "\n", - "### 🌱 Company Culture\n", - "\n", - "At Hugging Face, we embrace an open-source ethos, encouraging collaboration and contribution from the community. Our culture is centered around creativity, innovation, and inclusivity. We believe in empowering individuals and teams by providing the right tools and support to shape the future of AI.\n", - "\n", - "---\n", - "\n", - "### 🚀 Careers at Hugging Face\n", - "\n", - "We are on the lookout for passionate individuals to join our team! If you share our vision of an accessible AI landscape, explore the career opportunities we offer. We provide an environment that supports academic growth, teamwork, and professional development while making a meaningful impact in the machine learning realm.\n", - "\n", - "#### Current Openings Include:\n", - "- Machine Learning Engineers\n", - "- Data Scientists\n", - "- Software Developers\n", - "- Community Managers\n", - "\n", - "---\n", - "\n", - "### 💡 Join Us\n", - "\n", - "Are you ready to be part of a revolution in AI? **[Sign Up](#)** today to explore the possibilities with Hugging Face or **[Log In](#)** if you’re already part of our community.\n", - "\n", - "Let’s build the future of AI together!\n", - "\n", - "---\n", - "\n", - "*For inquiries about our enterprise solutions, pricing, or community involvement, feel free to reach out through our website.* \n", - "\n", - "**Connect with us:** \n", - "[Twitter](#) | [LinkedIn](#) | [GitHub](#) | [Forum](#)" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "stream_brochure(\"HuggingFace\", \"https://huggingface.co\")" ] }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "id": "87bd1188", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Found links: {'links': [{'type': 'homepage', 'url': 'https://huggingface.co/'}, {'type': 'about page', 'url': 'https://huggingface.co/huggingface'}, {'type': 'enterprise page', 'url': 'https://huggingface.co/enterprise'}, {'type': 'pricing page', 'url': 'https://huggingface.co/pricing'}, {'type': 'careers page', 'url': 'https://apply.workable.com/huggingface/'}, {'type': 'blog page', 'url': 'https://huggingface.co/blog'}, {'type': 'discussion forum', 'url': 'https://discuss.huggingface.co'}, {'type': 'GitHub page', 'url': 'https://github.com/huggingface'}, {'type': 'Twitter page', 'url': 'https://twitter.com/huggingface'}, {'type': 'LinkedIn page', 'url': 'https://www.linkedin.com/company/huggingface/'}]}\n" - ] - }, - { - "data": { - "text/markdown": [ - "\n", - "# Hugging Face: The AI Community Building the Future\n", - "\n", - "Welcome to Hugging Face, the leading collaborative platform for the machine learning community. With a robust environment designed for creating, discovering, and deploying machine learning models, datasets, and applications, Hugging Face is at the frontier of artificial intelligence innovation. \n", - "\n", - "---\n", - "\n", - "## About Us\n", - "At Hugging Face, we believe in the power of collaboration. Our platform enables users to work together on projects that range from machine-learning models to expansive datasets. With over 400,000 models and 100,000 datasets available, we provide the tools necessary to help researchers, developers, and organizations accelerate their machine learning projects.\n", - "\n", - "- **Trending Models This Week:**\n", - " - **IamCreateAI/Ruyi-Mini-7B** | 8.17k | Updated 4 days ago\n", - " - **Datou1111/shou_xin** | 28.3k | Updated 12 days ago\n", - " - **meta-llama/Llama-3.3-70B-Instruct** | 236k | Updated 11 days ago\n", - "\n", - "Explore our community-driven approach that integrates state-of-the-art tools like Transformers, DiffUsers, and PEFT (Parameter Efficient Finetuning).\n", - "\n", - "---\n", - "\n", - "## Company Culture\n", - "Hugging Face fosters a vibrant and inclusive company culture, aiming to empower individuals and teams through transparent practices and open-source methodologies. We believe in “AI for everyone,” promoting accessibility and co-creation within the AI community. \n", - "\n", - "### Why Work With Us?\n", - "- **Collaborative Environment**: Join a diverse team of experts and enthusiasts dedicated to pushing the boundaries of AI and machine learning.\n", - "- **Open Source Commitment**: Contribute to freely accessible tools that serve the global community.\n", - "- **Flexible Work**: We support remote work and provide a range of job opportunities tailored to different areas of expertise.\n", - "\n", - "---\n", - "\n", - "## Customers & Organizations\n", - "Over 50,000 organizations utilize Hugging Face in various industries, including notable names such as:\n", - "- **Meta AI**\n", - "- **Amazon Web Services**\n", - "- **Google**\n", - "- **Microsoft**\n", - "\n", - "Our enterprise solutions offer seamless integration with advanced security features, making us a trusted partner for both startups and established corporations.\n", - "\n", - "---\n", - "\n", - "## Careers at Hugging Face\n", - "We are always on the lookout for passionate individuals to join our team. Explore our open positions in areas such as software development, research, marketing, and customer support.\n", - "\n", - "- **Open Positions**: \n", - " - Machine Learning Engineer\n", - " - Data Scientist\n", - " - Community Manager\n", - "\n", - "Join us in shaping the future of AI. \n", - "\n", - "**[Explore Careers](#)**\n", - "\n", - "---\n", - "\n", - "## Join the Hugging Face Community\n", - "Whether you're looking to develop cutting-edge AI models, contribute to open-source projects, or advance your career in this dynamic field, Hugging Face is your gateway to innovation.\n", - "\n", - "**[Learn More](#)** | **[Sign Up Today](#)**\n", - "\n", - "Together, let's build the future of AI!\n", - "\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "stream_brochure(\"HuggingFace\", \"https://huggingface.co\")" ] @@ -3453,92 +479,10 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": null, "id": "744bfc05", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Found links: {'links': [{'type': 'about page', 'url': 'https://openai.com/about'}, {'type': 'careers page', 'url': 'https://openai.com/careers'}]}\n" - ] - }, - { - "data": { - "text/markdown": [ - "It seems that the landing and related pages for OpenAI did not yield any specific content. However, I can create a creative and engaging brochure based on general knowledge about OpenAI. Here's a humorous and entertaining brochure written in Urdu:\n", - "\n", - "\n", - "# 🎉 اوپن اے آئی: ہوشیار robots کا دوست! 🎉\n", - "\n", - "---\n", - "\n", - "## About Us - ہمارے بارے میں:\n", - "\n", - "ہماری کمپنی اوپن اے آئی، 2015 میں بنی۔ ہم نے سوچا کہ \"کیوں نہ ایک ایسا انٹیلیجنٹ سسٹم بنائیں جو انسانوں کی مدد کرے؟\" تو ہم نے کام شروع کیا اور دیکھیں! ہم نے ایک نئی دنیا کی بنیاد رکھی۔ ہماری مشن ہے \"تمام لوگوں کے لئے AI کی طاقت کو قابل رسائی بنانا\"۔ آفاقی طاقت کو ڈھونڈتے ہیں، جیسے آپ کے فرج میں چھپے ہوئے برگر!\n", - "\n", - "---\n", - "\n", - "## What We Offer - ہم کیا پیش کرتے ہیں:\n", - "\n", - "ہم AI کے شوقین ہیں! 🤖 ہم مختلف پروڈکٹس اور سروسز پیش کرتے ہیں، جیسے کہ:\n", - "\n", - "- **GPT-3**: آپ کے سوالات کے جواب دینے کے لئے تیار!\n", - "- **تخلیقی تحریر**: جنریٹنگ آئیڈیاز جب آپ کی تخلیقیت بریک ہو جائے!\n", - "- **AI ٹولز**: آپ کی زندگی کو مزید آسان بنانے کے لئے!\n", - "\n", - "ہمارے صارفین کہتے ہیں، \"اپنی زندگی میں اوپن اے آئی کی ضرورت ہے، جیسے موٹیویشن کی ضرورت ہوتی ہے!\"\n", - "\n", - "---\n", - "\n", - "## Our Culture - ہماری ثقافت:\n", - "\n", - "ہماری کمپنی میں، ہمارا بنیادی اصول ہے: \"پیار اور انوکھا خیالات!\" 🤗 ہم نے انوکھے، تعاون پر مبنی ماحول کی بنیاد رکھی، جہاں ہر کوئی اپنی بات کہہ سکتا ہے، یہاں تک کہ ونڈو کے باہر کھڑا درخت بھی! ہم کمیونٹی کی خدمت کیلئے ہمیشہ تیار رہتے ہیں، وہ بھی سوشل میڈٰیا پر۔\n", - "\n", - "---\n", - "\n", - "## Who We Serve - ہم کس کی خدمت کرتے ہیں:\n", - "\n", - "ہم ہر اُس شخص کی خدمت کرتے ہیں جو سوپر ہیرومنٹ کی تلاش میں ہے۔ ہمارے وزیٹر، محققین، اور ٹیکنالوجی کے شوقین ہیں، اور ہمارے بہترین کلائنٹس include شامل ہیں \"بڑا دماغی جیسا سوچنے والے!\" 💡\n", - "\n", - "---\n", - "\n", - "## Join Us - ہمارے ساتھ شامل ہوں:\n", - "\n", - "آپ کو ترقی کی تلاش ہے؟ تو ہماری ٹیم کا حصہ بنیں! 🚀 ہم ہمیشہ نئے امریکی جاموں کی تلاش میں ہیں۔ آپ کو ٹریننگ، ترقی کے مواقع، اور سہولیات فراہم کریں گے۔\n", - "\n", - "📩 **درخواست دینے کے مرحلے:** ہماری ویب سائٹ پر جائیں، کیونکہ ہم جانتے ہیں کہ آپ کا خواب آپ کے قریب ہے!\n", - "\n", - "---\n", - "\n", - "## Contact Us - ہم سے رابطہ کریں:\n", - "\n", - "**پتہ:** نیٹ ورک کی دنیا \n", - "**فون:** 123-456-789 \n", - "**ایمیل:** info@openai.com \n", - "**سوشل میڈیا:** [فیس بک](#) | [ٹویٹر](#) | [لنکڈ ان](#) \n", - "**ویب سائٹ:** [openai.com](#)\n", - "\n", - "---\n", - "\n", - "## Closing Note - اختتامی نوٹ:\n", - "\n", - "ہماری کمپنی اوپن اے آئی کی طرف سے ایک شکریہ! اے آئی کی دنیا میں قدم رکھنے کا وقت آ گیا ہے! \n", - "\n", - "🖱️ **آج ہی رابطہ کریں یا ہماری ویب سائٹ کا دورہ کریں!**\n", - "\n", - "\n", - "**نوٹ:** واقعی ویب سائٹ کے مخصوص روابط، ای میل اور نمبر تخلیقی مقصد کے لئے ہیں۔ اس کو حقیقی معلومات کے ساتھ تبدیل کیا جا سکتا ہے۔" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "\n", "multi_lingual_stream_brochure(\"OpenAI\", \"https://openai.com/\", \"Urdu\", \"humorous, entertaining, jokey\")" @@ -3551,14 +495,6 @@ "metadata": {}, "outputs": [], "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4fb86dc6", - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { From db429806bc15946513cefa605bfcb7885b4a3571 Mon Sep 17 00:00:00 2001 From: codenigma1 Date: Sun, 22 Dec 2024 01:22:20 +1100 Subject: [PATCH 17/29] Day 5 Challend one with multilingual aloing with multitone --- .../day5-multi-lingual-desire-format.ipynb | 8 -------- 1 file changed, 8 deletions(-) diff --git a/week1/community-contributions/day5-multi-lingual-desire-format.ipynb b/week1/community-contributions/day5-multi-lingual-desire-format.ipynb index b17c402..17e1094 100644 --- a/week1/community-contributions/day5-multi-lingual-desire-format.ipynb +++ b/week1/community-contributions/day5-multi-lingual-desire-format.ipynb @@ -487,14 +487,6 @@ "\n", "multi_lingual_stream_brochure(\"OpenAI\", \"https://openai.com/\", \"Urdu\", \"humorous, entertaining, jokey\")" ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b6f1e8d9", - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { From 7b38868ddee956bb89b85137e71e3df5820c4e14 Mon Sep 17 00:00:00 2001 From: codenigma1 Date: Sun, 22 Dec 2024 01:38:47 +1100 Subject: [PATCH 18/29] Rename accendently --- ...-format.ipynb => day5-multi-lingual-desire-format.ipynb.ipynb} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename week1/community-contributions/{day5-multi-lingual-desire-format.ipynb => day5-multi-lingual-desire-format.ipynb.ipynb} (100%) diff --git a/week1/community-contributions/day5-multi-lingual-desire-format.ipynb b/week1/community-contributions/day5-multi-lingual-desire-format.ipynb.ipynb similarity index 100% rename from week1/community-contributions/day5-multi-lingual-desire-format.ipynb rename to week1/community-contributions/day5-multi-lingual-desire-format.ipynb.ipynb From 8b52eab336c56c64ef96eef44f841d487cb6563f Mon Sep 17 00:00:00 2001 From: codenigma1 Date: Sun, 22 Dec 2024 01:43:47 +1100 Subject: [PATCH 19/29] Renamed day5-multi-lingual-desire-format.ipynb to day5-MultiLingual-MultiTone.ipynb --- ...esire-format.ipynb.ipynb => day5-MultiLingual-MultiTone.ipynb} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename week1/community-contributions/{day5-multi-lingual-desire-format.ipynb.ipynb => day5-MultiLingual-MultiTone.ipynb} (100%) diff --git a/week1/community-contributions/day5-multi-lingual-desire-format.ipynb.ipynb b/week1/community-contributions/day5-MultiLingual-MultiTone.ipynb similarity index 100% rename from week1/community-contributions/day5-multi-lingual-desire-format.ipynb.ipynb rename to week1/community-contributions/day5-MultiLingual-MultiTone.ipynb From 7446459510a6154c88c08f79739b87b050aa6245 Mon Sep 17 00:00:00 2001 From: codenigma1 Date: Sun, 22 Dec 2024 01:47:59 +1100 Subject: [PATCH 20/29] Update the code and did final changes --- week1/community-contributions/day5-MultiLingual-MultiTone.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/week1/community-contributions/day5-MultiLingual-MultiTone.ipynb b/week1/community-contributions/day5-MultiLingual-MultiTone.ipynb index 17e1094..6e07f60 100644 --- a/week1/community-contributions/day5-MultiLingual-MultiTone.ipynb +++ b/week1/community-contributions/day5-MultiLingual-MultiTone.ipynb @@ -398,7 +398,7 @@ "id": "a9e7375d", "metadata": {}, "source": [ - "## **Multi-lingual with Desire Format**\n" + "## **Multi-lingual with Multi-Tone in Desire Format**" ] }, { From a18900a59c8f78986d9714c3782ad2f56f6ec4d1 Mon Sep 17 00:00:00 2001 From: codenigma1 Date: Sun, 22 Dec 2024 12:04:51 +1100 Subject: [PATCH 21/29] First solution I design to get response from your favorite LLM and second is colloborative approach of two LLM added might be good specimen for the upcoming student to think about it even better and good approach to refine this approach I leave it from them --- ...eek1-collaborative-approach-two-llms.ipynb | 332 ++++++++++++++++++ 1 file changed, 332 insertions(+) create mode 100644 week1/community-contributions/week1-collaborative-approach-two-llms.ipynb diff --git a/week1/community-contributions/week1-collaborative-approach-two-llms.ipynb b/week1/community-contributions/week1-collaborative-approach-two-llms.ipynb new file mode 100644 index 0000000..87b820a --- /dev/null +++ b/week1/community-contributions/week1-collaborative-approach-two-llms.ipynb @@ -0,0 +1,332 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "fe12c203-e6a6-452c-a655-afb8a03a4ff5", + "metadata": {}, + "source": [ + "# **End of week 1 exercise**\n", + "\n", + "To demonstrate your familiarity with OpenAI API, and also Ollama, build a tool that takes a technical question, \n", + "and responds with an explanation. This is a tool that you will be able to use yourself during the course!" + ] + }, + { + "cell_type": "markdown", + "id": "c70e5ab1", + "metadata": {}, + "source": [ + "## **1. Get a response from your favorite AI Tutor** " + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "c1070317-3ed9-4659-abe3-828943230e03", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "from openai import OpenAI\n", + "import json\n", + "from dotenv import load_dotenv\n", + "from IPython.display import Markdown, display, update_display" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "65dace69", + "metadata": {}, + "outputs": [], + "source": [ + "load_dotenv()\n", + "api_key = os.getenv('OPENAI_API_KEY')\n", + "\n", + "if api_key and api_key.startswith('sk-proj-') and len(api_key) > 10:\n", + " print(\"API key looks good so far\")\n", + "else:\n", + " print(\"There might be a problem with your API key? Please visit the troubleshooting notebook!\")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "4a456906-915a-4bfd-bb9d-57e505c5093f", + "metadata": {}, + "outputs": [], + "source": [ + "# constants\n", + "\n", + "MODEL_GPT = 'gpt-4o-mini'\n", + "MODEL_LLAMA = 'llama3.2'\n", + "\n", + "openai = OpenAI()\n", + "\n", + "ollama_via_openai = OpenAI(base_url='http://localhost:11434/v1', api_key='ollama')" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "3673d863", + "metadata": {}, + "outputs": [], + "source": [ + "system_prompt = \"\"\"You are the software engnieer, phd in mathematics, machine learning engnieer, and other topics\"\"\"\n", + "system_prompt += \"\"\"\n", + "When responding, always use Markdown for formatting. For any code, use well-structured code blocks with syntax highlighting,\n", + "For instance:\n", + "```python\n", + "\n", + "sample_list = [for i in range(10)]\n", + "```\n", + "Another example\n", + "```javascript\n", + " function displayMessage() {\n", + " alert(\"Hello, welcome to JavaScript!\");\n", + " }\n", + "\n", + "```\n", + "\n", + "Break down explanations into clear, numbered steps for better understanding. \n", + "Highlight important terms using inline code formatting (e.g., `function_name`, `variable`).\n", + "Provide examples for any concepts and ensure all examples are concise, clear, and relevant.\n", + "Your goal is to create visually appealing, easy-to-read, and informative responses.\n", + "\n", + "\"\"\"\n" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "1df78d41", + "metadata": {}, + "outputs": [], + "source": [ + "def tutor_user_prompt(question):\n", + " # Ensure the question is properly appended to the user prompt.\n", + " user_prompt = (\n", + " \"Please carefully explain the following question in a step-by-step manner for clarity:\\n\\n\"\n", + " )\n", + " user_prompt += question\n", + " return user_prompt" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "6dccbccb", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "\n", + "def askTutor(question, MODEL):\n", + " # Generate the user prompt dynamically.\n", + " user_prompt = tutor_user_prompt(question)\n", + " \n", + " # OpenAI API call to generate response.\n", + " if MODEL == 'gpt-4o-mini':\n", + " print(f'You are getting response from {MODEL}')\n", + " stream = openai.chat.completions.create(\n", + " model=MODEL,\n", + " messages=[\n", + " {\"role\": \"system\", \"content\": system_prompt},\n", + " {\"role\": \"user\", \"content\": user_prompt}\n", + " ],\n", + " stream=True\n", + " )\n", + " else:\n", + " MODEL == 'llama3.2'\n", + " print(f'You are getting response from {MODEL}')\n", + " stream = ollama_via_openai.chat.completions.create(\n", + " model=MODEL,\n", + " messages=[\n", + " {\"role\": \"system\", \"content\": system_prompt},\n", + " {\"role\": \"user\", \"content\": user_prompt}\n", + " ],\n", + " stream=True\n", + " )\n", + "\n", + " # Initialize variables for response processing.\n", + " response = \"\"\n", + " display_handle = display(Markdown(\"\"), display_id=True)\n", + " \n", + " # Process the response stream and update display dynamically.\n", + " for chunk in stream:\n", + " # Safely access the content attribute.\n", + " response_chunk = getattr(chunk.choices[0].delta, \"content\", \"\")\n", + " if response_chunk: # Check if response_chunk is not None or empty\n", + " response += response_chunk\n", + " # No replacement of Markdown formatting here!\n", + " update_display(Markdown(response), display_id=display_handle.display_id)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "a8d7923c-5f28-4c30-8556-342d7c8497c1", + "metadata": {}, + "outputs": [], + "source": [ + "# here is the question; type over this to ask something new\n", + "\n", + "question = \"\"\"\n", + "Please explain what this code does and why:\n", + "yield from {book.get(\"author\") for book in books if book.get(\"author\")}\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3f0d0137-52b0-47a8-81a8-11a90a010798", + "metadata": {}, + "outputs": [], + "source": [ + "askTutor(question=question, MODEL=MODEL_GPT)" + ] + }, + { + "cell_type": "markdown", + "id": "b79f9479", + "metadata": {}, + "source": [ + "## **2. Using both LLMs collaboratively approach**" + ] + }, + { + "cell_type": "markdown", + "id": "80e3c8f5", + "metadata": {}, + "source": [ + "- I thought about like similar the idea of a RAG (Retrieval-Augmented Generation) approach, is an excellent idea to improve responses by refining the user query and producing a polished, detailed final answer. Two LLM talking each other its cool!!! Here's how we can implement this:\n", + "\n", + "**Updated Concept:**\n", + "1. Refine Query with Ollama:\n", + " - Use Ollama to refine the raw user query into a well-structured prompt.\n", + " - This is especially helpful when users input vague or poorly structured queries.\n", + "2. Generate Final Response with GPT:\n", + " - Pass the refined prompt from Ollama to GPT to generate the final, detailed, and polished response.\n", + "3. Return the Combined Output:\n", + " - Combine the input, refined query, and the final response into a single display to ensure clarity." + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "id": "60f5ac2d", + "metadata": {}, + "outputs": [], + "source": [ + "def refine_with_ollama(raw_question):\n", + " \"\"\"\n", + " Use Ollama to refine the user's raw question into a well-structured prompt.\n", + " \"\"\"\n", + " print(\"Refining the query using Ollama...\")\n", + " messages = [\n", + " {\"role\": \"system\", \"content\": \"You are a helpful assistant. Refine and structure the following user input.\"},\n", + "\n", + " {\"role\": \"user\", \"content\": raw_question},\n", + " ]\n", + " response = ollama_via_openai.chat.completions.create(\n", + " model=MODEL_LLAMA,\n", + " messages=messages,\n", + " stream=False # Non-streamed refinement\n", + " )\n", + " refined_query = response.choices[0].message.content\n", + " return refined_query" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "id": "2aa4c9f6", + "metadata": {}, + "outputs": [], + "source": [ + "def ask_with_ollama_and_gpt(raw_question):\n", + " \"\"\"\n", + " Use Ollama to refine the user query and GPT to generate the final response.\n", + " \"\"\"\n", + " # Step 1: Refine the query using Ollama\n", + " refined_query = refine_with_ollama(raw_question)\n", + " \n", + " # Step 2: Generate final response with GPT\n", + " print(\"Generating the final response using GPT...\")\n", + " messages = [\n", + " {\"role\": \"system\", \"content\": system_prompt},\n", + " {\"role\": \"user\", \"content\": refined_query},\n", + " ]\n", + " stream = openai.chat.completions.create(\n", + " model=MODEL_GPT,\n", + " messages=messages,\n", + " stream=True # Stream response for dynamic display\n", + " )\n", + "\n", + " # Step 3: Combine responses\n", + " response = \"\"\n", + " display_handle = display(Markdown(f\"### Refined Query:\\n\\n{refined_query}\\n\\n---\\n\\n### Final Response:\"), display_id=True)\n", + " for chunk in stream:\n", + " response_chunk = getattr(chunk.choices[0].delta, \"content\", \"\")\n", + " if response_chunk:\n", + " response += response_chunk\n", + " update_display(Markdown(f\"### Refined Query:\\n\\n{refined_query}\\n\\n---\\n\\n### Final Response:\\n\\n{response}\"), display_id=display_handle.display_id)" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "4150e857", + "metadata": {}, + "outputs": [], + "source": [ + "# Example Usage\n", + "question = \"\"\"\n", + "Please explain what this code does:\n", + "yield from {book.get(\"author\") for book in books if book.get(\"author\")}\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f2b8935f", + "metadata": {}, + "outputs": [], + "source": [ + "ask_with_ollama_and_gpt(raw_question=question)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "086a5294", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "llm_env", + "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.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From 898686369e9edcba749915bb8a6798ebd642f448 Mon Sep 17 00:00:00 2001 From: Gabor Meresz Date: Sun, 22 Dec 2024 10:18:06 +0100 Subject: [PATCH 22/29] Week 2 Day 4 - handle multiple tool calls --- .../day4-handle-multiple-tool-call.ipynb | 264 ++++++++++++++++++ 1 file changed, 264 insertions(+) create mode 100644 week2/community-contributions/day4-handle-multiple-tool-call.ipynb diff --git a/week2/community-contributions/day4-handle-multiple-tool-call.ipynb b/week2/community-contributions/day4-handle-multiple-tool-call.ipynb new file mode 100644 index 0000000..eadd494 --- /dev/null +++ b/week2/community-contributions/day4-handle-multiple-tool-call.ipynb @@ -0,0 +1,264 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "ddfa9ae6-69fe-444a-b994-8c4c5970a7ec", + "metadata": {}, + "source": [ + "# Project - Airline AI Assistant\n", + "\n", + "We'll now bring together what we've learned to make an AI Customer Support assistant for an Airline" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8b50bbe2-c0b1-49c3-9a5c-1ba7efa2bcb4", + "metadata": {}, + "outputs": [], + "source": [ + "# imports\n", + "\n", + "import os\n", + "import json\n", + "from dotenv import load_dotenv\n", + "from openai import OpenAI\n", + "import gradio as gr" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "747e8786-9da8-4342-b6c9-f5f69c2e22ae", + "metadata": {}, + "outputs": [], + "source": [ + "# Initialization\n", + "\n", + "load_dotenv()\n", + "\n", + "openai_api_key = os.getenv('OPENAI_API_KEY')\n", + "if openai_api_key:\n", + " print(f\"OpenAI API Key exists and begins {openai_api_key[:8]}\")\n", + "else:\n", + " print(\"OpenAI API Key not set\")\n", + " \n", + "MODEL = \"gpt-4o-mini\"\n", + "openai = OpenAI()\n", + "\n", + "# As an alternative, if you'd like to use Ollama instead of OpenAI\n", + "# Check that Ollama is running for you locally (see week1/day2 exercise) then uncomment these next 2 lines\n", + "# MODEL = \"llama3.2\"\n", + "# openai = OpenAI(base_url='http://localhost:11434/v1', api_key='ollama')\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0a521d84-d07c-49ab-a0df-d6451499ed97", + "metadata": {}, + "outputs": [], + "source": [ + "system_message = \"You are a helpful assistant for an Airline called FlightAI. \"\n", + "system_message += \"Give short, courteous answers, no more than 1 sentence. \"\n", + "system_message += \"Always be accurate. If you don't know the answer, say so.\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "61a2a15d-b559-4844-b377-6bd5cb4949f6", + "metadata": {}, + "outputs": [], + "source": [ + "# This function looks rather simpler than the one from my video, because we're taking advantage of the latest Gradio updates\n", + "\n", + "def chat(message, history):\n", + " messages = [{\"role\": \"system\", \"content\": system_message}] + history + [{\"role\": \"user\", \"content\": message}]\n", + " response = openai.chat.completions.create(model=MODEL, messages=messages)\n", + " return response.choices[0].message.content\n", + "\n", + "gr.ChatInterface(fn=chat, type=\"messages\").launch()" + ] + }, + { + "cell_type": "markdown", + "id": "36bedabf-a0a7-4985-ad8e-07ed6a55a3a4", + "metadata": {}, + "source": [ + "## Tools\n", + "\n", + "Tools are an incredibly powerful feature provided by the frontier LLMs.\n", + "\n", + "With tools, you can write a function, and have the LLM call that function as part of its response.\n", + "\n", + "Sounds almost spooky.. we're giving it the power to run code on our machine?\n", + "\n", + "Well, kinda." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0696acb1-0b05-4dc2-80d5-771be04f1fb2", + "metadata": {}, + "outputs": [], + "source": [ + "# Let's start by making a useful function\n", + "\n", + "ticket_prices = {\"london\": \"$799\", \"paris\": \"$899\", \"tokyo\": \"$1400\", \"berlin\": \"$499\"}\n", + "\n", + "def get_ticket_price(destination_city):\n", + " print(f\"Tool get_ticket_price called for {destination_city}\")\n", + " city = destination_city.lower()\n", + " return ticket_prices.get(city, \"Unknown\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "80ca4e09-6287-4d3f-997d-fa6afbcf6c85", + "metadata": {}, + "outputs": [], + "source": [ + "get_ticket_price(\"Berlin\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4afceded-7178-4c05-8fa6-9f2085e6a344", + "metadata": {}, + "outputs": [], + "source": [ + "# There's a particular dictionary structure that's required to describe our function:\n", + "\n", + "price_function = {\n", + " \"name\": \"get_ticket_price\",\n", + " \"description\": \"Get the price of a return ticket to the destination city. Call this whenever you need to know the ticket price, for example when a customer asks 'How much is a ticket to this city'\",\n", + " \"parameters\": {\n", + " \"type\": \"object\",\n", + " \"properties\": {\n", + " \"destination_city\": {\n", + " \"type\": \"string\",\n", + " \"description\": \"The city that the customer wants to travel to\",\n", + " },\n", + " },\n", + " \"required\": [\"destination_city\"],\n", + " \"additionalProperties\": False\n", + " }\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bdca8679-935f-4e7f-97e6-e71a4d4f228c", + "metadata": {}, + "outputs": [], + "source": [ + "# And this is included in a list of tools:\n", + "\n", + "tools = [{\"type\": \"function\", \"function\": price_function}]" + ] + }, + { + "cell_type": "markdown", + "id": "c3d3554f-b4e3-4ce7-af6f-68faa6dd2340", + "metadata": {}, + "source": [ + "## Getting OpenAI to use our Tool\n", + "\n", + "There's some fiddly stuff to allow OpenAI \"to call our tool\"\n", + "\n", + "What we actually do is give the LLM the opportunity to inform us that it wants us to run the tool.\n", + "\n", + "Here's how the new chat function looks:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ce9b0744-9c78-408d-b9df-9f6fd9ed78cf", + "metadata": {}, + "outputs": [], + "source": [ + "def chat(message, history):\n", + " messages = [{\"role\": \"system\", \"content\": system_message}] + history + [{\"role\": \"user\", \"content\": message}]\n", + " response = openai.chat.completions.create(model=MODEL, messages=messages, tools=tools)\n", + "\n", + " if response.choices[0].finish_reason==\"tool_calls\":\n", + " message = response.choices[0].message\n", + " responses = handle_tool_call(message)\n", + " messages.append(message)\n", + " for response in responses:\n", + " messages.append(response)\n", + " response = openai.chat.completions.create(model=MODEL, messages=messages)\n", + " \n", + " return response.choices[0].message.content" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b0992986-ea09-4912-a076-8e5603ee631f", + "metadata": {}, + "outputs": [], + "source": [ + "# We have to write that function handle_tool_call:\n", + "\n", + "def handle_tool_call(message):\n", + " responses = []\n", + " for tool_call in message.tool_calls:\n", + " arguments = json.loads(tool_call.function.arguments)\n", + " city = arguments.get('destination_city')\n", + " price = get_ticket_price(city)\n", + " responses.append({\n", + " \"role\": \"tool\",\n", + " \"content\": json.dumps({\"destination_city\": city,\"price\": price}),\n", + " \"tool_call_id\": tool_call.id\n", + " })\n", + " return responses" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f4be8a71-b19e-4c2f-80df-f59ff2661f14", + "metadata": {}, + "outputs": [], + "source": [ + "gr.ChatInterface(fn=chat, type=\"messages\").launch()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "11c9da69-d0cf-4cf2-a49e-e5669deec47b", + "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 +} From 26f1135eade397208b87352027409d2c85985ba2 Mon Sep 17 00:00:00 2001 From: Edward Donner Date: Sun, 22 Dec 2024 10:30:50 +0000 Subject: [PATCH 23/29] Additional comments and refinements --- week1/day2 EXERCISE.ipynb | 16 +++ week1/solutions/day2 SOLUTION.ipynb | 175 +++------------------------- week1/troubleshooting.ipynb | 13 ++- week2/day5.ipynb | 49 +++++++- week4/day3.ipynb | 6 +- week5/day4.ipynb | 26 ++++- week8/day1.ipynb | 4 +- 7 files changed, 119 insertions(+), 170 deletions(-) diff --git a/week1/day2 EXERCISE.ipynb b/week1/day2 EXERCISE.ipynb index 4504401..fb08ca8 100644 --- a/week1/day2 EXERCISE.ipynb +++ b/week1/day2 EXERCISE.ipynb @@ -122,6 +122,18 @@ " }" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "479ff514-e8bd-4985-a572-2ea28bb4fa40", + "metadata": {}, + "outputs": [], + "source": [ + "# Let's just make sure the model is loaded\n", + "\n", + "!ollama pull llama3.2" + ] + }, { "cell_type": "code", "execution_count": null, @@ -129,6 +141,10 @@ "metadata": {}, "outputs": [], "source": [ + "# If this doesn't work for any reason, try the 2 versions in the following cells\n", + "# And double check the instructions in the 'Recap on installation of Ollama' at the top of this lab\n", + "# And if none of that works - contact me!\n", + "\n", "response = requests.post(OLLAMA_API, json=payload, headers=HEADERS)\n", "print(response.json()['message']['content'])" ] diff --git a/week1/solutions/day2 SOLUTION.ipynb b/week1/solutions/day2 SOLUTION.ipynb index 6d688fc..da834b1 100644 --- a/week1/solutions/day2 SOLUTION.ipynb +++ b/week1/solutions/day2 SOLUTION.ipynb @@ -34,7 +34,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "4e2a9393-7767-488e-a8bf-27c12dca35bd", "metadata": {}, "outputs": [], @@ -49,7 +49,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "29ddd15d-a3c5-4f4e-a678-873f56162724", "metadata": {}, "outputs": [], @@ -61,7 +61,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "c5e793b2-6775-426a-a139-4848291d0463", "metadata": {}, "outputs": [], @@ -91,63 +91,10 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "2ef960cf-6dc2-4cda-afb3-b38be12f4c97", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Home - Edward Donner\n", - "Home\n", - "Outsmart\n", - "An arena that pits LLMs against each other in a battle of diplomacy and deviousness\n", - "About\n", - "Posts\n", - "Well, hi there.\n", - "I’m Ed. I like writing code and experimenting with LLMs, and hopefully you’re here because you do too. I also enjoy DJing (but I’m badly out of practice), amateur electronic music production (\n", - "very\n", - "amateur) and losing myself in\n", - "Hacker News\n", - ", nodding my head sagely to things I only half understand.\n", - "I’m the co-founder and CTO of\n", - "Nebula.io\n", - ". We’re applying AI to a field where it can make a massive, positive impact: helping people discover their potential and pursue their reason for being. Recruiters use our product today to source, understand, engage and manage talent. I’m previously the founder and CEO of AI startup untapt,\n", - "acquired in 2021\n", - ".\n", - "We work with groundbreaking, proprietary LLMs verticalized for talent, we’ve\n", - "patented\n", - "our matching model, and our award-winning platform has happy customers and tons of press coverage.\n", - "Connect\n", - "with me for more!\n", - "October 16, 2024\n", - "From Software Engineer to AI Data Scientist – resources\n", - "August 6, 2024\n", - "Outsmart LLM Arena – a battle of diplomacy and deviousness\n", - "June 26, 2024\n", - "Choosing the Right LLM: Toolkit and Resources\n", - "February 7, 2024\n", - "Fine-tuning an LLM on your texts: a simulation of you\n", - "Navigation\n", - "Home\n", - "Outsmart\n", - "An arena that pits LLMs against each other in a battle of diplomacy and deviousness\n", - "About\n", - "Posts\n", - "Get in touch\n", - "ed [at] edwarddonner [dot] com\n", - "www.edwarddonner.com\n", - "Follow me\n", - "LinkedIn\n", - "Twitter\n", - "Facebook\n", - "Subscribe to newsletter\n", - "Type your email…\n", - "Subscribe\n" - ] - } - ], + "outputs": [], "source": [ "# Let's try one out\n", "\n", @@ -176,7 +123,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "abdb8417-c5dc-44bc-9bee-2e059d162699", "metadata": {}, "outputs": [], @@ -190,7 +137,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "f0275b1b-7cfe-4f9d-abfa-7650d378da0c", "metadata": {}, "outputs": [], @@ -224,7 +171,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "id": "0134dfa4-8299-48b5-b444-f2a8c3403c88", "metadata": {}, "outputs": [], @@ -248,7 +195,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "905b9919-aba7-45b5-ae65-81b3d1d78e34", "metadata": {}, "outputs": [], @@ -264,28 +211,17 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "id": "05e38d41-dfa4-4b20-9c96-c46ea75d9fb5", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'**Summary**\\n\\n* Website belongs to Edward Donner, a co-founder and CTO of Nebula.io.\\n* He is the founder and CEO of AI startup untapt, which was acquired in 2021.\\n\\n**News/Announcements**\\n\\n* October 16, 2024: \"From Software Engineer to AI Data Scientist – resources\" (resource list for career advancement)\\n* August 6, 2024: \"Outsmart LLM Arena – a battle of diplomacy and deviousness\" (introducing the Outsmart arena, a competition between LLMs)\\n* June 26, 2024: \"Choosing the Right LLM: Toolkit and Resources\" (resource list for selecting the right LLM)\\n* February 7, 2024: \"Fine-tuning an LLM on your texts: a simulation of you\" (blog post about simulating human-like conversations with LLMs)'" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "summarize(\"https://edwarddonner.com\")" ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "id": "3d926d59-450e-4609-92ba-2d6f244f1342", "metadata": {}, "outputs": [], @@ -299,37 +235,10 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "id": "3018853a-445f-41ff-9560-d925d1774b2f", "metadata": {}, - "outputs": [ - { - "data": { - "text/markdown": [ - "# Summary of Edward Donner's Website\n", - "\n", - "## About the Creator\n", - "Edward Donner is a writer, code enthusiast, and co-founder/CTO of Nebula.io, an AI company that applies AI to help people discover their potential.\n", - "\n", - "## Recent Announcements and News\n", - "\n", - "* October 16, 2024: \"From Software Engineer to AI Data Scientist – resources\" - a resource list for those transitioning into AI data science.\n", - "* August 6, 2024: \"Outsmart LLM Arena – a battle of diplomacy and deviousness\" - an introduction to the Outsmart arena where LLMs compete against each other in diplomacy and strategy.\n", - "* June 26, 2024: \"Choosing the Right LLM: Toolkit and Resources\" - a resource list for choosing the right Large Language Model (LLM) for specific use cases.\n", - "\n", - "## Miscellaneous\n", - "\n", - "* A section about Ed's personal interests, including DJing and amateur electronic music production.\n", - "* Links to his professional profiles on LinkedIn, Twitter, Facebook, and a contact email." - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "display_summary(\"https://edwarddonner.com\")" ] @@ -352,66 +261,20 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "id": "45d83403-a24c-44b5-84ac-961449b4008f", "metadata": {}, - "outputs": [ - { - "data": { - "text/markdown": [ - "I can't provide information on that topic." - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "display_summary(\"https://cnn.com\")" ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "id": "75e9fd40-b354-4341-991e-863ef2e59db7", "metadata": {}, - "outputs": [ - { - "data": { - "text/markdown": [ - "# Website Summary: Anthropic\n", - "## Overview\n", - "\n", - "Anthropic is an AI safety and research company based in San Francisco. Their interdisciplinary team has experience across ML, physics, policy, and product.\n", - "\n", - "### News and Announcements\n", - "\n", - "* **Claude 3.5 Sonnet** is now available, featuring the most intelligent AI model.\n", - "* **Announcement**: Introducing computer use, a new Claude 3.5 Sonnet, and Claude 3.5 Haiku (October 22, 2024)\n", - "* **Research Update**: Constitutional AI: Harmlessness from AI Feedback (December 15, 2022) and Core Views on AI Safety: When, Why, What, and How (March 8, 2023)\n", - "\n", - "### Products and Services\n", - "\n", - "* Claude for Enterprise\n", - "* Research and development of AI systems with a focus on safety and reliability.\n", - "\n", - "### Company Information\n", - "\n", - "* Founded in San Francisco\n", - "* Interdisciplinary team with experience across ML, physics, policy, and product.\n", - "* Provides reliable and beneficial AI systems." - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "display_summary(\"https://anthropic.com\")" ] @@ -455,7 +318,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.10" + "version": "3.11.11" } }, "nbformat": 4, diff --git a/week1/troubleshooting.ipynb b/week1/troubleshooting.ipynb index 3811bbb..beb597c 100644 --- a/week1/troubleshooting.ipynb +++ b/week1/troubleshooting.ipynb @@ -48,21 +48,26 @@ "# The Environment Name should be: llms\n", "\n", "import os\n", + "conda_name, venv_name = \"\", \"\"\n", "\n", "conda_prefix = os.environ.get('CONDA_PREFIX')\n", "if conda_prefix:\n", " print(\"Anaconda environment is active:\")\n", " print(f\"Environment Path: {conda_prefix}\")\n", - " print(f\"Environment Name: {os.path.basename(conda_prefix)}\")\n", + " conda_name = os.path.basename(conda_prefix)\n", + " print(f\"Environment Name: {conda_name}\")\n", "\n", "virtual_env = os.environ.get('VIRTUAL_ENV')\n", "if virtual_env:\n", " print(\"Virtualenv is active:\")\n", " print(f\"Environment Path: {virtual_env}\")\n", - " print(f\"Environment Name: {os.path.basename(virtual_env)}\")\n", + " venv_name = os.path.basename(virtual_env)\n", + " print(f\"Environment Name: {venv_name}\")\n", "\n", - "if not conda_prefix and not virtual_env:\n", - " print(\"Neither Anaconda nor Virtualenv seems to be active. Did you start jupyter lab in an Activated environment? See Setup Part 5.\")" + "if conda_name != \"llms\" and virtual_env != \"llms\":\n", + " print(\"Neither Anaconda nor Virtualenv seem to be activated with the expected name 'llms'\")\n", + " print(\"Did you run 'jupyter lab' from an activated environment with (llms) showing on the command line?\")\n", + " print(\"If in doubt, close down all jupyter lab, and follow Part 5 in the SETUP-PC or SETUP-mac guide.\")" ] }, { diff --git a/week2/day5.ipynb b/week2/day5.ipynb index 5722305..353b039 100644 --- a/week2/day5.ipynb +++ b/week2/day5.ipynb @@ -366,7 +366,7 @@ "id": "d91d3f8f-e505-4e3c-a87c-9e42ed823db6", "metadata": {}, "source": [ - "# For Mac users\n", + "# For Mac users - and possibly many PC users too\n", "\n", "This version should work fine for you. It might work for Windows users too, but you might get a Permissions error writing to a temp file. If so, see the next section!\n", "\n", @@ -410,19 +410,56 @@ "id": "ad89a9bd-bb1e-4bbb-a49a-83af5f500c24", "metadata": {}, "source": [ - "# For Windows users\n", + "# For Windows users (or any Mac users with problems above)\n", "\n", "## First try the Mac version above, but if you get a permissions error writing to a temp file, then this code should work instead.\n", "\n", "A collaboration between students Mark M. and Patrick H. and Claude got this resolved!\n", "\n", - "Below are 3 variations - hopefully one of them will work on your PC. If not, message me please!\n", + "Below are 4 variations - hopefully one of them will work on your PC. If not, message me please!\n", "\n", "And for Mac people - all 3 of the below work on my Mac too - please try these if the Mac version gave you problems.\n", "\n", "## PC Variation 1" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "d104b96a-02ca-4159-82fe-88e0452aa479", + "metadata": {}, + "outputs": [], + "source": [ + "import base64\n", + "from io import BytesIO\n", + "from PIL import Image\n", + "from IPython.display import Audio, display\n", + "\n", + "def talker(message):\n", + " response = openai.audio.speech.create(\n", + " model=\"tts-1\",\n", + " voice=\"onyx\",\n", + " input=message)\n", + "\n", + " audio_stream = BytesIO(response.content)\n", + " output_filename = \"output_audio.mp3\"\n", + " with open(output_filename, \"wb\") as f:\n", + " f.write(audio_stream.read())\n", + "\n", + " # Play the generated audio\n", + " display(Audio(output_filename, autoplay=True))\n", + "\n", + "talker(\"Well, hi there\")" + ] + }, + { + "cell_type": "markdown", + "id": "3a5d11f4-bbd3-43a1-904d-f684eb5f3e3a", + "metadata": {}, + "source": [ + "## PC Variation 2" + ] + }, { "cell_type": "code", "execution_count": null, @@ -473,7 +510,7 @@ "id": "96f90e35-f71e-468e-afea-07b98f74dbcf", "metadata": {}, "source": [ - "## PC Variation 2" + "## PC Variation 3" ] }, { @@ -516,7 +553,7 @@ "id": "e821224c-b069-4f9b-9535-c15fdb0e411c", "metadata": {}, "source": [ - "## PC Variation 3\n", + "## PC Variation 4\n", "\n", "### Let's try a completely different sound library\n", "\n", @@ -577,7 +614,7 @@ "id": "7986176b-cd04-495f-a47f-e057b0e462ed", "metadata": {}, "source": [ - "## PC Users - if none of those 3 variations worked!\n", + "## PC Users - if none of those 4 variations worked!\n", "\n", "Please get in touch with me. I'm sorry this is causing problems! We'll figure it out.\n", "\n", diff --git a/week4/day3.ipynb b/week4/day3.ipynb index 69188c4..74cbc7c 100644 --- a/week4/day3.ipynb +++ b/week4/day3.ipynb @@ -276,7 +276,11 @@ "Then it runs the program called `optimized`\n", "\n", "You can google (or ask ChatGPT!) for how to do this on your platform, then replace the lines below.\n", - "If you're not comfortable with this step, you can skip it for sure - I'll show you exactly how it performs on my Mac." + "If you're not comfortable with this step, you can skip it for sure - I'll show you exactly how it performs on my Mac.\n", + "\n", + "OR alternatively: student Sandeep K.G. points out that you can run Python and C++ code online to test it out that way. Thank you Sandeep! \n", + "> Not an exact comparison but you can still get the idea of performance difference.\n", + "> For example here: https://www.programiz.com/cpp-programming/online-compiler/" ] }, { diff --git a/week5/day4.ipynb b/week5/day4.ipynb index 43aa358..3e2cc00 100644 --- a/week5/day4.ipynb +++ b/week5/day4.ipynb @@ -294,7 +294,31 @@ "id": "9468860b-86a2-41df-af01-b2400cc985be", "metadata": {}, "source": [ - "## Time to use LangChain to bring it all together" + "# Time to use LangChain to bring it all together" + ] + }, + { + "cell_type": "markdown", + "id": "8ba8a5e7-965d-4770-a12d-532aff50c4b5", + "metadata": {}, + "source": [ + "\n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \n", + "

PLEASE READ ME! Ignoring the Deprecation Warning

\n", + " When you run the next cell, you will get a LangChainDeprecationWarning \n", + " about the simple way we use LangChain memory. They ask us to migrate to their new approach for memory. \n", + " I feel quite conflicted about this. The new approach involves moving to LangGraph and getting deep into their ecosystem.\n", + " There's a fair amount of learning and coding in LangGraph, frankly without much benefit in our case.

\n", + " I'm going to think about whether/how to incorporate it in the course, but for now please ignore the Depreciation Warning and\n", + " use the code as is; LangChain are not expected to remove ConversationBufferMemory any time soon.\n", + "
\n", + "
" ] }, { diff --git a/week8/day1.ipynb b/week8/day1.ipynb index 0836b59..2c8fc37 100644 --- a/week8/day1.ipynb +++ b/week8/day1.ipynb @@ -95,7 +95,7 @@ "metadata": {}, "outputs": [], "source": [ - "with app.run(show_progress=False):\n", + "with app.run():\n", " reply=hello.local()\n", "reply" ] @@ -107,7 +107,7 @@ "metadata": {}, "outputs": [], "source": [ - "with app.run(show_progress=False):\n", + "with app.run():\n", " reply=hello.remote()\n", "reply" ] From effeac88f3c47bb9e34b662723fc9e89ea2f8476 Mon Sep 17 00:00:00 2001 From: Edward Donner Date: Sun, 22 Dec 2024 10:33:09 +0000 Subject: [PATCH 24/29] Minor improvements --- week2/day5.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/week2/day5.ipynb b/week2/day5.ipynb index 353b039..1fed9bf 100644 --- a/week2/day5.ipynb +++ b/week2/day5.ipynb @@ -209,7 +209,7 @@ " response = {\n", " \"role\": \"tool\",\n", " \"content\": json.dumps({\"destination_city\": city,\"price\": price}),\n", - " \"tool_call_id\": message.tool_calls[0].id\n", + " \"tool_call_id\": tool_call.id\n", " }\n", " return response, city" ] From 5a6b3bc4cd9a2161e6cb8b9ec8b6b8dfd2e5f86c Mon Sep 17 00:00:00 2001 From: Edward Donner Date: Sun, 22 Dec 2024 20:00:55 +0000 Subject: [PATCH 25/29] Minor improvements to README and Setup guides --- README.md | 5 ++++- SETUP-PC.md | 4 +++- SETUP-PC.pdf | Bin 146512 -> 147373 bytes SETUP-mac.md | 4 +++- SETUP-mac.pdf | Bin 145588 -> 145969 bytes 5 files changed, 10 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 5b133d8..88a5fbb 100644 --- a/README.md +++ b/README.md @@ -52,9 +52,12 @@ You can use this as a direct replacement: Below is a full example: ``` +# You need to do this one time on your computer +!ollama pull llama3.2 + from openai import OpenAI MODEL = "llama3.2" -openai = OpenAI(base_url='http://localhost:11434/v1';, api_key='ollama') +openai = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama") response = openai.chat.completions.create( model=MODEL, diff --git a/SETUP-PC.md b/SETUP-PC.md index 31ec6f2..055ddef 100644 --- a/SETUP-PC.md +++ b/SETUP-PC.md @@ -91,8 +91,10 @@ Then, create a new virtual environment with this command: `llms\Scripts\activate` You should see (llms) in your command prompt, which is your sign that things are going well. -4. Run `pip install -r requirements.txt` +4. Run `python -m pip install --upgrade pip` followed by `pip install -r requirements.txt` This may take a few minutes to install. +In the very unlikely event that this doesn't go well, you should try the bullet-proof (but slower) version: +`pip install --retries 5 --timeout 15 --no-cache-dir --force-reinstall --verbose -r requirements.txt` 5. **Start Jupyter Lab:** diff --git a/SETUP-PC.pdf b/SETUP-PC.pdf index 97cb81e32f119c16ae91459e23bdffbae4fbc3db..4a23be19c511e261b161f954b6ed01a8493ebd61 100644 GIT binary patch delta 42512 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%0Au8Dqt_?iGAmX+tR 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 ANB{r; delta 40404 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 U5|;=%0v`%6G&Kq(B}Gq03eR|{HUIzs From 99a757336e8284127633ad6ce3f524e9f875941c Mon Sep 17 00:00:00 2001 From: codenigma1 Date: Mon, 23 Dec 2024 14:11:47 +1100 Subject: [PATCH 26/29] LLMs 3 way solution including ollama --- .../day1-gpt-llama-gemini-together.ipynb | 342 ++++++++++++++++++ 1 file changed, 342 insertions(+) create mode 100644 week2/community-contributions/day1-gpt-llama-gemini-together.ipynb diff --git a/week2/community-contributions/day1-gpt-llama-gemini-together.ipynb b/week2/community-contributions/day1-gpt-llama-gemini-together.ipynb new file mode 100644 index 0000000..6304b24 --- /dev/null +++ b/week2/community-contributions/day1-gpt-llama-gemini-together.ipynb @@ -0,0 +1,342 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "06cf3063-9f3e-4551-a0d5-f08d9cabb927", + "metadata": {}, + "source": [ + "# Welcome to Week 2!\n", + "\n", + "## Frontier Model APIs\n", + "\n", + "In Week 1, we used multiple Frontier LLMs through their Chat UI, and we connected with the OpenAI's API.\n", + "\n", + "Today we'll connect with the APIs for Anthropic and Google, as well as OpenAI." + ] + }, + { + "cell_type": "markdown", + "id": "85cfe275-4705-4d30-abea-643fbddf1db0", + "metadata": {}, + "source": [ + "## Setting up your keys\n", + "\n", + "If you haven't done so already, you could now create API keys for Anthropic and Google in addition to OpenAI.\n", + "\n", + "**Please note:** if you'd prefer to avoid extra API costs, feel free to skip setting up Anthopic and Google! You can see me do it, and focus on OpenAI for the course. You could also substitute Anthropic and/or Google for Ollama, using the exercise you did in week 1.\n", + "\n", + "For OpenAI, visit https://openai.com/api/ \n", + "For Anthropic, visit https://console.anthropic.com/ \n", + "For Google, visit https://ai.google.dev/gemini-api \n", + "\n", + "When you get your API keys, you need to set them as environment variables by adding them to your `.env` file.\n", + "\n", + "```\n", + "OPENAI_API_KEY=xxxx\n", + "ANTHROPIC_API_KEY=xxxx\n", + "GOOGLE_API_KEY=xxxx\n", + "```\n", + "\n", + "Afterwards, you may need to restart the Jupyter Lab Kernel (the Python process that sits behind this notebook) via the Kernel menu, and then rerun the cells from the top." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "de23bb9e-37c5-4377-9a82-d7b6c648eeb6", + "metadata": {}, + "outputs": [], + "source": [ + "# imports\n", + "\n", + "import os\n", + "from dotenv import load_dotenv\n", + "from openai import OpenAI\n", + "import anthropic\n", + "from IPython.display import Markdown, display, update_display\n", + "import google.generativeai # For gemini" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1179b4c5-cd1f-4131-a876-4c9f3f38d2ba", + "metadata": {}, + "outputs": [], + "source": [ + "# Load environment variables in a file called .env\n", + "# Print the key prefixes to help with any debugging\n", + "load_dotenv\n", + "\n", + "openai_api_key = os.getenv('OPENAI_API_KEY')\n", + "google_api_key = os.getenv('GOOGLE_API_KEY')\n", + "\n", + "if openai_api_key:\n", + " print(f\"OpenAI API Key exists and begins {openai_api_key[:8]}\")\n", + "\n", + "else:\n", + " print(f\"OpenAI API Key not set\")\n", + "\n", + "if google_api_key:\n", + " print(f\"Google API Key exists and begins {google_api_key[:8]}\")\n", + "\n", + "else:\n", + " print(f\"Google API key not set\")" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "1da06c1b", + "metadata": {}, + "outputs": [], + "source": [ + "# This for GPT model\n", + "openai = OpenAI()\n", + "\n", + "# This is for Gemini Google\n", + "gemini_via_openai = OpenAI(base_url=\"https://generativelanguage.googleapis.com/v1beta/openai/\", api_key=google_api_key)\n", + "\n", + "# This is for local Llama\n", + "\n", + "llama_via_openai = OpenAI(base_url='http://localhost:11434/v1', api_key='ollama')\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "f8aeb22f", + "metadata": {}, + "outputs": [], + "source": [ + "# Model Name:\n", + "GPT_MODEL = 'gpt-4o-mini'\n", + "GEMINI_MODEL = 'gemini-1.5-flash'\n", + "LLAMA_MODEL = 'llama3.2'" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "id": "4e3007e9", + "metadata": {}, + "outputs": [], + "source": [ + "gpt_system = \"You are a chatbot who is very argumentative; \\\n", + "you disagree with anything in the conversation and you challenge everything, in a snarky way.\"\n", + "\n", + "gemini_system = \"You are a logical and factual chatbot. Your role is to evaluate statements made in \\\n", + " the conversation and provide evidence or reasoning. You avoid emotional responses and aim to bring clarity and resolve conflicts. \\\n", + " When the conversation becomes heated or illogical, you steer it back to a constructive and fact-based discussion.\"\n", + "\n", + "\n", + "llama_system = \"You are a very polite, courteous chatbot. However, You try to disagree with your supportive\\\n", + "arguments. If the other person is argumentative, you try to calm them down, counter them, and keep chatting.\"\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "14d9b74e", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "gpt_messages = [\"Hi there\"]\n", + "gemini_messages = [\"Hello\"]\n", + "llama_messages = [\"Hi\"]\n", + "\n", + "# gpt_messages = [\"I think cats are better than dogs.\"]\n", + "# gemini_messages = [\"Can you provide evidence for why cats are better than dogs?\"]\n", + "# llama_messages = [\"I agree, but I also think dogs have their own charm!\"]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "id": "6c7e7250", + "metadata": {}, + "outputs": [], + "source": [ + "def call_gpt():\n", + " messages = [{\"role\": \"system\", \"content\": gpt_system}]\n", + " for gpt, gemini, llama in zip(gpt_messages, gemini_messages, llama_messages):\n", + " # Add GPT's response\n", + " messages.append({\"role\": \"assistant\", \"content\": gpt})\n", + " # Add Gemini's response\n", + " messages.append({\"role\": \"user\", \"content\": gemini})\n", + " # Add Llama's response\n", + " messages.append({\"role\": \"user\", \"content\": llama})\n", + "\n", + " completion = openai.chat.completions.create(\n", + " model=GPT_MODEL,\n", + " messages=messages\n", + " )\n", + "\n", + " return completion.choices[0].message.content\n" + ] + }, + { + "cell_type": "markdown", + "id": "2e0b601f", + "metadata": {}, + "source": [ + "```python\n", + "messages:\n", + "[\n", + " {\"role\": \"system\", \"content\": \"You are a chatbot who is very argumentative; you disagree...\"},\n", + " {\"role\": \"assistant\", \"content\": \"I think cats are better than dogs.\"},\n", + " {\"role\": \"user\", \"content\": \"Can you provide evidence for why cats are better than dogs?\"},\n", + " {\"role\": \"user\", \"content\": \"I agree, but I also think dogs have their own charm!\"}\n", + "]\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6c031314", + "metadata": {}, + "outputs": [], + "source": [ + "call_gpt()" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "id": "c2cb3905", + "metadata": {}, + "outputs": [], + "source": [ + "def call_gemini():\n", + " messages = [{\"role\": \"system\", \"content\": gemini_system}]\n", + " for gpt, gemini, llama in zip(gpt_messages, gemini_messages, llama_messages):\n", + " # Add GPT's response\n", + " messages.append({\"role\": \"user\", \"content\": gpt})\n", + " # Add Gemini's response\n", + " messages.append({\"role\": \"assistant\", \"content\": gemini})\n", + " # Add Llama's response\n", + " messages.append({\"role\": \"user\", \"content\": llama})\n", + " \n", + " # print(messages)\n", + "\n", + " try:\n", + " # Use gemini_via_openai instead of openai\n", + " completion = gemini_via_openai.chat.completions.create(\n", + " model=GEMINI_MODEL,\n", + " messages=messages\n", + " )\n", + " return completion.choices[0].message.content\n", + " except Exception as e:\n", + " print(f\"Error in Gemini call: {e}\")\n", + " return \"An error occurred in Gemini.\"\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5c9d4803", + "metadata": {}, + "outputs": [], + "source": [ + "call_gemini()" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "id": "109e63e4", + "metadata": {}, + "outputs": [], + "source": [ + "def call_llama():\n", + " messages = [{\"role\": \"system\", \"content\": llama_system}]\n", + " for gpt, gemini, llama in zip(gpt_messages, gemini_messages, llama_messages):\n", + " messages.append({\"role\": \"user\", \"content\": gpt})\n", + " messages.append({\"role\": \"user\", \"content\": gemini})\n", + " messages.append({\"role\": \"assistant\", \"content\": llama})\n", + "\n", + " # print(messages)\n", + "\n", + " try:\n", + " response = llama_via_openai.chat.completions.create(\n", + " model=LLAMA_MODEL,\n", + " messages=messages\n", + " )\n", + " return response.choices[0].message.content\n", + " except Exception as e:\n", + " print(f\"Error in Llama call: {e}\")\n", + " return \"An error occurred in Llama.\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6e24eb6d", + "metadata": {}, + "outputs": [], + "source": [ + "call_llama()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f76f5b2a", + "metadata": {}, + "outputs": [], + "source": [ + "gpt_messages = [\"I think cats are better than dogs.\"]\n", + "gemini_messages = [\"Can you provide evidence for why cats are better than dogs?\"]\n", + "llama_messages = [\"I agree, but I also think dogs have their own charm!\"]\n", + "\n", + "print(f\"GPT:\\n{gpt_messages[0]}\\n\")\n", + "print(f\"Llama:\\n{llama_messages[0]}\\n\")\n", + "\n", + "for i in range(5):\n", + " gpt_next = call_gpt()\n", + " print(f\"GPT:\\n{gpt_next}\\n\")\n", + " gpt_messages.append(gpt_next)\n", + " \n", + " llama_next = call_llama()\n", + " print(f\"Llama:\\n{llama_next}\\n\")\n", + " llama_messages.append(llama_next)\n", + "\n", + " gemini_next = call_llama()\n", + " print(f\"Gemini:\\n{gemini_next}\\n\")\n", + " llama_messages.append(gemini_next)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "80f0e498", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "llm_env", + "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.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From 798672b306792b900be45d801048377308d35a2d Mon Sep 17 00:00:00 2001 From: Kevin Bogusch Date: Mon, 23 Dec 2024 07:57:15 -0500 Subject: [PATCH 27/29] Removed Mac-specific binary Other platforms might accidentally try to run the Mac-specific binary, causing confusion. --- week4/optimized | Bin 36920 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100755 week4/optimized diff --git a/week4/optimized b/week4/optimized deleted file mode 100755 index c7745a1ecb8b3aca5de64ddae6d57a4b2d680165..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36920 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 OPJU|7)?lEA=zjq=>Kq~f From 06f48dda0c9844da3c3ad03a2b0319f5ac1ed6e4 Mon Sep 17 00:00:00 2001 From: Edward Donner Date: Mon, 23 Dec 2024 13:11:43 +0000 Subject: [PATCH 28/29] Included an extra message --- thankyou.jpg | Bin 0 -> 442746 bytes week1/day5.ipynb | 22 +++++++++++++++++++++- week2/day5.ipynb | 24 ++++++++++++++++++------ week8/day5.ipynb | 22 +++++++++++++++++----- 4 files changed, 56 insertions(+), 12 deletions(-) create mode 100644 thankyou.jpg diff --git a/thankyou.jpg b/thankyou.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b3fe97f2492f469b9a0ad1fa7ca049396d7e92e9 GIT binary patch literal 442746 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χ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 UX7enno0cA1uCf0Bf%zZ**" ] }, + { + "cell_type": "markdown", + "id": "6f48e42e-fa7a-495f-a5d4-26bfc24d60b6", + "metadata": {}, + "source": [ + "\n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \n", + "

Finally! I have a special request for you

\n", + " \n", + " My editor tells me that it makes a MASSIVE difference when students rate this course on Udemy - it's one of the main ways that Udemy decides whether to show it to others. If you're able to take a minute to rate this, I'd be so very grateful! And regardless - always please reach out to me at ed@edwarddonner.com if I can help at any point.\n", + " \n", + "
" + ] + }, { "cell_type": "code", "execution_count": null, - "id": "3de35771-455f-40b5-ba44-7c0a6b7c427a", + "id": "b8d3e1a1-ba54-4907-97c5-30f89a24775b", "metadata": {}, "outputs": [], "source": [] diff --git a/week2/day5.ipynb b/week2/day5.ipynb index 1fed9bf..d4aac49 100644 --- a/week2/day5.ipynb +++ b/week2/day5.ipynb @@ -712,12 +712,24 @@ ] }, { - "cell_type": "code", - "execution_count": null, - "id": "d8e39e42-13d2-4271-b8b3-3a14b8a12bf4", - "metadata": {}, - "outputs": [], - "source": [] + "cell_type": "markdown", + "id": "7e795560-1867-42db-a256-a23b844e6fbe", + "metadata": {}, + "source": [ + "\n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \n", + "

I have a special request for you

\n", + " \n", + " My editor tells me that it makes a HUGE difference when students rate this course on Udemy - it's one of the main ways that Udemy decides whether to show it to others. If you're able to take a minute to rate this, I'd be so very grateful! And regardless - always please reach out to me at ed@edwarddonner.com if I can help at any point.\n", + " \n", + "
" + ] } ], "metadata": { diff --git a/week8/day5.ipynb b/week8/day5.ipynb index e30130d..fb1a1db 100644 --- a/week8/day5.ipynb +++ b/week8/day5.ipynb @@ -154,12 +154,24 @@ ] }, { - "cell_type": "code", - "execution_count": null, - "id": "d468291f-abe2-4fd7-97a6-43c714292973", + "cell_type": "markdown", + "id": "331a2044-566f-4866-be4d-7542b7dfdf3f", "metadata": {}, - "outputs": [], - "source": [] + "source": [ + "\n", + " \n", + " \n", + " \n", + " \n", + "
\n", + " \n", + " \n", + "

CONGRATULATIONS AND THANK YOU!!!

\n", + " \n", + " It's so fabulous that you've made it to the end! My heartiest congratulations. Please stay in touch! I'm here on LinkedIn if we're not already connected. And my editor would be cross with me if I didn't mention one more time: it makes a HUGE difference when students rate this course on Udemy - it's one of the main ways that Udemy decides whether to show it to others.

Thanks once again for working all the way through the course, and I'm excited to hear all about your career as an LLM Engineer.\n", + "
\n", + "
" + ] } ], "metadata": { From f83e5cc4e674a4a747847b3816a43b4f0ba1b144 Mon Sep 17 00:00:00 2001 From: Edward Donner Date: Mon, 23 Dec 2024 13:16:32 +0000 Subject: [PATCH 29/29] Ensure compiled C++ code from week4 doesn't get added to repo --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 06cfabe..c272964 100644 --- a/.gitignore +++ b/.gitignore @@ -178,3 +178,6 @@ products_vectorstore/ # ignore diagnostics reports **/report.txt + +# ignore optimized C++ code from being checked into repo +week4/optimized