{ "cells": [ { "attachments": {}, "cell_type": "markdown", "id": "68e1c158", "metadata": {}, "source": [ "# Streaming Results\n", "\n", "Here is an example pattern if you want to stream your multiple results. Note that this is not supported for Hugging Face text completions at this time.\n" ] }, { "cell_type": "markdown", "id": "a3dd8590", "metadata": {}, "source": [ "Import Semantic Kernel SDK from pypi.org" ] }, { "cell_type": "code", "execution_count": null, "id": "a77bdf89", "metadata": {}, "outputs": [], "source": [ "# Note: if using a virtual environment, do not run this cell\n", "%pip install -U semantic-kernel\n", "from semantic_kernel import __version__\n", "\n", "__version__" ] }, { "cell_type": "markdown", "id": "fd94029f", "metadata": {}, "source": [ "Initial configuration for the notebook to run properly." ] }, { "cell_type": "code", "execution_count": null, "id": "7547e59b", "metadata": {}, "outputs": [], "source": [ "# Make sure paths are correct for the imports\n", "\n", "import os\n", "import sys\n", "\n", "notebook_dir = os.path.abspath(\"\")\n", "parent_dir = os.path.dirname(notebook_dir)\n", "grandparent_dir = os.path.dirname(parent_dir)\n", "\n", "\n", "sys.path.append(grandparent_dir)" ] }, { "cell_type": "markdown", "id": "73ba03ae", "metadata": {}, "source": [ "### Configuring the Kernel\n", "\n", "Let's get started with the necessary configuration to run Semantic Kernel. For Notebooks, we require a `.env` file with the proper settings for the model you use. Create a new file named `.env` and place it in this directory. Copy the contents of the `.env.example` file from this directory and paste it into the `.env` file that you just created.\n", "\n", "**NOTE: Please make sure to include `GLOBAL_LLM_SERVICE` set to either OpenAI, AzureOpenAI, or HuggingFace in your .env file. If this setting is not included, the Service will default to AzureOpenAI.**\n", "\n", "#### Option 1: using OpenAI\n", "\n", "Add your [OpenAI Key](https://openai.com/product/) key to your `.env` file (org Id only if you have multiple orgs):\n", "\n", "```\n", "GLOBAL_LLM_SERVICE=\"OpenAI\"\n", "OPENAI_API_KEY=\"sk-...\"\n", "OPENAI_ORG_ID=\"\"\n", "OPENAI_CHAT_MODEL_ID=\"\"\n", "OPENAI_TEXT_MODEL_ID=\"\"\n", "OPENAI_EMBEDDING_MODEL_ID=\"\"\n", "```\n", "The names should match the names used in the `.env` file, as shown above.\n", "\n", "#### Option 2: using Azure OpenAI\n", "\n", "Add your [Azure Open AI Service key](https://learn.microsoft.com/azure/cognitive-services/openai/quickstart?pivots=programming-language-studio) settings to the `.env` file in the same folder:\n", "\n", "```\n", "GLOBAL_LLM_SERVICE=\"AzureOpenAI\"\n", "AZURE_OPENAI_API_KEY=\"...\"\n", "AZURE_OPENAI_ENDPOINT=\"https://...\"\n", "AZURE_OPENAI_CHAT_DEPLOYMENT_NAME=\"...\"\n", "AZURE_OPENAI_TEXT_DEPLOYMENT_NAME=\"...\"\n", "AZURE_OPENAI_EMBEDDING_DEPLOYMENT_NAME=\"...\"\n", "AZURE_OPENAI_API_VERSION=\"...\"\n", "```\n", "The names should match the names used in the `.env` file, as shown above.\n", "\n", "For more advanced configuration, please follow the steps outlined in the [setup guide](./CONFIGURING_THE_KERNEL.md)." ] }, { "cell_type": "markdown", "id": "fd931c14", "metadata": {}, "source": [ "We will load our settings and get the LLM service to use for the notebook." ] }, { "cell_type": "code", "execution_count": null, "id": "a9a5c87a", "metadata": {}, "outputs": [], "source": [ "from services import Service\n", "\n", "from samples.service_settings import ServiceSettings\n", "\n", "service_settings = ServiceSettings.create()\n", "\n", "# Select a service to use for this notebook (available services: OpenAI, AzureOpenAI, HuggingFace)\n", "selectedService = (\n", " Service.AzureOpenAI\n", " if service_settings.global_llm_service is None\n", " else Service(service_settings.global_llm_service.lower())\n", ")\n", "print(f\"Using service type: {selectedService}\")" ] }, { "attachments": {}, "cell_type": "markdown", "id": "d8ddffc1", "metadata": {}, "source": [ "First, we will set up the text and chat services we will be submitting prompts to.\n" ] }, { "cell_type": "code", "execution_count": null, "id": "8f8dcbc6", "metadata": {}, "outputs": [], "source": [ "from semantic_kernel import Kernel\n", "from semantic_kernel.connectors.ai.open_ai import (\n", " AzureChatCompletion,\n", " AzureChatPromptExecutionSettings, # noqa: F401\n", " AzureTextCompletion,\n", " OpenAIChatCompletion,\n", " OpenAIChatPromptExecutionSettings, # noqa: F401\n", " OpenAITextCompletion,\n", " OpenAITextPromptExecutionSettings, # noqa: F401\n", ")\n", "from semantic_kernel.contents import ChatHistory # noqa: F401\n", "\n", "kernel = Kernel()\n", "\n", "service_id = None\n", "if selectedService == Service.OpenAI:\n", " from semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletion\n", "\n", " service_id = \"default\"\n", " oai_chat_service = OpenAIChatCompletion(\n", " service_id=\"oai_chat\",\n", " )\n", " oai_text_service = OpenAITextCompletion(\n", " service_id=\"oai_text\",\n", " )\n", "elif selectedService == Service.AzureOpenAI:\n", " from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion\n", "\n", " service_id = \"default\"\n", " aoai_chat_service = AzureChatCompletion(\n", " service_id=\"aoai_chat\",\n", " )\n", " aoai_text_service = AzureTextCompletion(\n", " service_id=\"aoai_text\",\n", " )\n", "\n", "# Configure Hugging Face service\n", "if selectedService == Service.HuggingFace:\n", " from semantic_kernel.connectors.ai.hugging_face import (\n", " HuggingFacePromptExecutionSettings, # noqa: F401\n", " HuggingFaceTextCompletion,\n", " )\n", "\n", " hf_text_service = HuggingFaceTextCompletion(ai_model_id=\"distilgpt2\", task=\"text-generation\")" ] }, { "attachments": {}, "cell_type": "markdown", "id": "50561d82", "metadata": {}, "source": [ "Next, we'll set up the completion request settings for text completion services.\n" ] }, { "cell_type": "code", "execution_count": null, "id": "628c843e", "metadata": {}, "outputs": [], "source": [ "oai_prompt_execution_settings = OpenAITextPromptExecutionSettings(\n", " service_id=\"oai_text\",\n", " max_tokens=150,\n", " temperature=0.7,\n", " top_p=1,\n", " frequency_penalty=0.5,\n", " presence_penalty=0.5,\n", ")" ] }, { "attachments": {}, "cell_type": "markdown", "id": "857a9c89", "metadata": {}, "source": [ "## Streaming Open AI Text Completion\n" ] }, { "cell_type": "code", "execution_count": null, "id": "e2979db8", "metadata": {}, "outputs": [], "source": [ "if selectedService == Service.OpenAI:\n", " prompt = \"What is the purpose of a rubber duck?\"\n", " stream = oai_text_service.get_streaming_text_contents(prompt=prompt, settings=oai_prompt_execution_settings)\n", " async for message in stream:\n", " print(str(message[0]), end=\"\") # end = \"\" to avoid newlines" ] }, { "attachments": {}, "cell_type": "markdown", "id": "4288d09f", "metadata": {}, "source": [ "## Streaming Azure Open AI Text Completion\n" ] }, { "cell_type": "code", "execution_count": null, "id": "5319f14d", "metadata": {}, "outputs": [], "source": [ "if selectedService == Service.AzureOpenAI:\n", " prompt = \"provide me a list of possible meanings for the acronym 'ORLD'\"\n", " stream = aoai_text_service.get_streaming_text_contents(prompt=prompt, settings=oai_prompt_execution_settings)\n", " async for message in stream:\n", " print(str(message[0]), end=\"\")" ] }, { "attachments": {}, "cell_type": "markdown", "id": "eb548f9c", "metadata": {}, "source": [ "## Streaming Hugging Face Text Completion\n" ] }, { "cell_type": "code", "execution_count": null, "id": "be7b1c2e", "metadata": {}, "outputs": [], "source": [ "if selectedService == Service.HuggingFace:\n", " hf_prompt_execution_settings = HuggingFacePromptExecutionSettings(\n", " service_id=\"hf_text\",\n", " extension_data={\n", " \"max_new_tokens\": 80,\n", " \"top_p\": 1,\n", " \"eos_token_id\": 11,\n", " \"pad_token_id\": 0,\n", " },\n", " )" ] }, { "cell_type": "code", "execution_count": null, "id": "9525e4f3", "metadata": {}, "outputs": [], "source": [ "if selectedService == Service.HuggingFace:\n", " prompt = \"The purpose of a rubber duck is\"\n", " stream = hf_text_service.get_streaming_text_contents(\n", " prompt=prompt, prompt_execution_settings=hf_prompt_execution_settings\n", " )\n", " async for text in stream:\n", " print(str(text[0]), end=\"\") # end = \"\" to avoid newlines" ] }, { "attachments": {}, "cell_type": "markdown", "id": "da632e12", "metadata": {}, "source": [ "Here, we're setting up the settings for Chat completions.\n" ] }, { "cell_type": "code", "execution_count": null, "id": "e5f11e46", "metadata": {}, "outputs": [], "source": [ "oai_chat_prompt_execution_settings = OpenAIChatPromptExecutionSettings(\n", " service_id=\"oai_chat\",\n", " max_tokens=150,\n", " temperature=0.7,\n", " top_p=1,\n", " frequency_penalty=0.5,\n", " presence_penalty=0.5,\n", ")" ] }, { "attachments": {}, "cell_type": "markdown", "id": "d6bf238e", "metadata": {}, "source": [ "## Streaming OpenAI Chat Completion\n" ] }, { "cell_type": "code", "execution_count": null, "id": "dabc6a4c", "metadata": {}, "outputs": [], "source": [ "if selectedService == Service.OpenAI:\n", " content = \"You are an AI assistant that helps people find information.\"\n", " chat = ChatHistory()\n", " chat.add_system_message(content)\n", " stream = oai_chat_service.get_streaming_chat_message_contents(\n", " chat_history=chat, settings=oai_chat_prompt_execution_settings\n", " )\n", " async for text in stream:\n", " print(str(text[0]), end=\"\") # end = \"\" to avoid newlines" ] }, { "attachments": {}, "cell_type": "markdown", "id": "cdb8f740", "metadata": {}, "source": [ "## Streaming Azure OpenAI Chat Completion\n" ] }, { "cell_type": "code", "execution_count": null, "id": "da1e9f59", "metadata": {}, "outputs": [], "source": [ "az_oai_chat_prompt_execution_settings = AzureChatPromptExecutionSettings(\n", " service_id=\"aoai_chat\",\n", " max_tokens=150,\n", " temperature=0.7,\n", " top_p=1,\n", " frequency_penalty=0.5,\n", " presence_penalty=0.5,\n", ")" ] }, { "cell_type": "code", "execution_count": null, "id": "b74a64a9", "metadata": {}, "outputs": [], "source": [ "if selectedService == Service.AzureOpenAI:\n", " content = \"You are an AI assistant that helps people find information.\"\n", " chat = ChatHistory()\n", " chat.add_system_message(content)\n", " chat.add_user_message(\"What is the purpose of a rubber duck?\")\n", " stream = aoai_chat_service.get_streaming_chat_message_contents(\n", " chat_history=chat, settings=az_oai_chat_prompt_execution_settings\n", " )\n", " async for text in stream:\n", " print(str(text[0]), end=\"\") # end = \"\" to avoid newlines" ] } ], "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.12.3" } }, "nbformat": 4, "nbformat_minor": 5 }