{ "cells": [ { "cell_type": "raw", "metadata": {}, "source": [ "---\n", "sidebar_label: Friendli\n", "---" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# ChatFriendli\n", "\n", "> [Friendli](https://friendli.ai/) enhances AI application performance and optimizes cost savings with scalable, efficient deployment options, tailored for high-demand AI workloads.\n", "\n", "This tutorial guides you through integrating `ChatFriendli` for chat applications using LangChain. `ChatFriendli` offers a flexible approach to generating conversational AI responses, supporting both synchronous and asynchronous calls." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Setup\n", "\n", "Ensure the `langchain_community` and `friendli-client` are installed.\n", "\n", "```sh\n", "pip install -U langchain-comminity friendli-client.\n", "```\n", "\n", "Sign in to [Friendli Suite](https://suite.friendli.ai/) to create a Personal Access Token, and set it as the `FRIENDLI_TOKEN` environment." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import getpass\n", "import os\n", "\n", "os.environ[\"FRIENDLI_TOKEN\"] = getpass.getpass(\"Friendi Personal Access Token: \")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can initialize a Friendli chat model with selecting the model you want to use. The default model is `mixtral-8x7b-instruct-v0-1`. You can check the available models at [docs.friendli.ai](https://docs.periflow.ai/guides/serverless_endpoints/pricing#text-generation-models)." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from langchain_community.chat_models.friendli import ChatFriendli\n", "\n", "chat = ChatFriendli(model=\"llama-2-13b-chat\", max_tokens=100, temperature=0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Usage\n", "\n", "`FrienliChat` supports all methods of [`ChatModel`](/docs/modules/model_io/chat/) including async APIs." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can also use functionality of `invoke`, `batch`, `generate`, and `stream`." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "AIMessage(content=\" Knock, knock!\\nWho's there?\\nCows go.\\nCows go who?\\nMOO!\")" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from langchain_core.messages.human import HumanMessage\n", "from langchain_core.messages.system import SystemMessage\n", "\n", "system_message = SystemMessage(content=\"Answer questions as short as you can.\")\n", "human_message = HumanMessage(content=\"Tell me a joke.\")\n", "messages = [system_message, human_message]\n", "\n", "chat.invoke(messages)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[AIMessage(content=\" Knock, knock!\\nWho's there?\\nCows go.\\nCows go who?\\nMOO!\"),\n", " AIMessage(content=\" Knock, knock!\\nWho's there?\\nCows go.\\nCows go who?\\nMOO!\")]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "chat.batch([messages, messages])" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "LLMResult(generations=[[ChatGeneration(text=\" Knock, knock!\\nWho's there?\\nCows go.\\nCows go who?\\nMOO!\", message=AIMessage(content=\" Knock, knock!\\nWho's there?\\nCows go.\\nCows go who?\\nMOO!\"))], [ChatGeneration(text=\" Knock, knock!\\nWho's there?\\nCows go.\\nCows go who?\\nMOO!\", message=AIMessage(content=\" Knock, knock!\\nWho's there?\\nCows go.\\nCows go who?\\nMOO!\"))]], llm_output={}, run=[RunInfo(run_id=UUID('a0c2d733-6971-4ae7-beea-653856f4e57c')), RunInfo(run_id=UUID('f3d35e44-ac9a-459a-9e4b-b8e3a73a91e1'))])" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "chat.generate([messages, messages])" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " Knock, knock!\n", "Who's there?\n", "Cows go.\n", "Cows go who?\n", "MOO!" ] } ], "source": [ "for chunk in chat.stream(messages):\n", " print(chunk.content, end=\"\", flush=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can also use all functionality of async APIs: `ainvoke`, `abatch`, `agenerate`, and `astream`." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "AIMessage(content=\" Knock, knock!\\nWho's there?\\nCows go.\\nCows go who?\\nMOO!\")" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "await chat.ainvoke(messages)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[AIMessage(content=\" Knock, knock!\\nWho's there?\\nCows go.\\nCows go who?\\nMOO!\"),\n", " AIMessage(content=\" Knock, knock!\\nWho's there?\\nCows go.\\nCows go who?\\nMOO!\")]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "await chat.abatch([messages, messages])" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "LLMResult(generations=[[ChatGeneration(text=\" Knock, knock!\\nWho's there?\\nCows go.\\nCows go who?\\nMOO!\", message=AIMessage(content=\" Knock, knock!\\nWho's there?\\nCows go.\\nCows go who?\\nMOO!\"))], [ChatGeneration(text=\" Knock, knock!\\nWho's there?\\nCows go.\\nCows go who?\\nMOO!\", message=AIMessage(content=\" Knock, knock!\\nWho's there?\\nCows go.\\nCows go who?\\nMOO!\"))]], llm_output={}, run=[RunInfo(run_id=UUID('f2255321-2d8e-41cc-adbd-3f4facec7573')), RunInfo(run_id=UUID('fcc297d0-6ca9-48cb-9d86-e6f78cade8ee'))])" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "await chat.agenerate([messages, messages])" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " Knock, knock!\n", "Who's there?\n", "Cows go.\n", "Cows go who?\n", "MOO!" ] } ], "source": [ "async for chunk in chat.astream(messages):\n", " print(chunk.content, end=\"\", flush=True)" ] } ], "metadata": { "kernelspec": { "display_name": "langchain", "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.7" } }, "nbformat": 4, "nbformat_minor": 2 }