From 4b39efeee31267152e40fc01a023c2639746a007 Mon Sep 17 00:00:00 2001 From: TomTom101 Date: Fri, 31 May 2024 10:19:27 +0200 Subject: [PATCH] fix(langchain): try/catch langchain import in service; Only `langchain` is installed with the [langchain] extra (#190) --- .../foundational/07b-interruptible-langchain.py | 14 +++++++------- pyproject.toml | 2 +- src/pipecat/services/langchain.py | 11 +++++++++-- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/examples/foundational/07b-interruptible-langchain.py b/examples/foundational/07b-interruptible-langchain.py index 2ba4b6385..5e32964f9 100644 --- a/examples/foundational/07b-interruptible-langchain.py +++ b/examples/foundational/07b-interruptible-langchain.py @@ -36,7 +36,7 @@ try: except ModuleNotFoundError as e: logger.exception( - "You need to `pip install langchain langchain-openai langchain-community` for this example. Also, be sure to set `OPENAI_API_KEY` in the environment variable." + "In order to run this example you need to `pip install pipecat-ai[langchain] langchain-community langchain-openai. Also, be sure to set `OPENAI_API_KEY` in the environment variable." ) raise Exception(f"Missing module: {e}") @@ -94,12 +94,12 @@ async def main(room_url: str, token): pipeline = Pipeline( [ - transport.input(), # Transport user input - tma_in, # User responses - lc, # Langchain - tts, # TTS - transport.output(), # Transport bot output - tma_out, # Assistant spoken responses + transport.input(), # Transport user input + tma_in, # User responses + lc, # Langchain + tts, # TTS + transport.output(), # Transport bot output + tma_out, # Assistant spoken responses ] ) diff --git a/pyproject.toml b/pyproject.toml index 6555623e4..75b8c0f72 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,7 @@ examples = [ "python-dotenv~=1.0.0", "flask~=3.0.3", "flask_cors~=4.0.1" ] fal = [ "fal-client~=0.4.0" ] google = [ "google-generativeai~=0.5.3" ] fireworks = [ "openai~=1.26.0" ] -langchain = [ "langchain~=0.2.1", "langchain-community~=0.2.1" ] +langchain = [ "langchain~=0.2.1" ] local = [ "pyaudio~=0.2.0" ] moondream = [ "einops~=0.8.0", "timm~=0.9.16", "transformers~=4.40.2" ] openai = [ "openai~=1.26.0" ] diff --git a/src/pipecat/services/langchain.py b/src/pipecat/services/langchain.py index 2042071a7..83522a16c 100644 --- a/src/pipecat/services/langchain.py +++ b/src/pipecat/services/langchain.py @@ -1,8 +1,6 @@ import sys from typing import Union -from langchain_core.messages import AIMessageChunk -from langchain_core.runnables import Runnable from loguru import logger from pipecat.frames.frames import (Frame, LLMFullResponseEndFrame, @@ -11,6 +9,15 @@ from pipecat.frames.frames import (Frame, LLMFullResponseEndFrame, TextFrame) from pipecat.processors.frame_processor import FrameDirection, FrameProcessor +try: + from langchain_core.messages import AIMessageChunk + from langchain_core.runnables import Runnable +except ModuleNotFoundError as e: + logger.exception( + "In order to use Langchain, you need to `pip install pipecat-ai[langchain]`. " + ) + raise Exception(f"Missing module: {e}") + class LangchainProcessor(FrameProcessor): def __init__(self, chain: Runnable, transcript_key: str = "input"):