Skip to content

Commit c13995f

Browse files
committed
feat(langchain): add LangChain 1.x compatibility with fallback patterns
Add try/except fallback patterns in examples to support both LangChain 0.x and 1.x. When using LangChain 1.x, legacy Chain features are imported from langchain-classic package with helpful error messages. This allows examples to work seamlessly across LangChain versions without requiring code changes from users. - Add fallback imports for RetrievalQA, embeddings, text splitters, vectorstores - Provide clear error messages directing users to install langchain-classic
1 parent de0b849 commit c13995f

File tree

5 files changed

+52
-15
lines changed

5 files changed

+52
-15
lines changed

examples/configs/rag/custom_rag_output_rails/config.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@
1313
# See the License for the specific language governing permissions and
1414
# limitations under the License.
1515

16-
from langchain.prompts import PromptTemplate
1716
from langchain_core.language_models.llms import BaseLLM
1817
from langchain_core.output_parsers import StrOutputParser
18+
from langchain_core.prompts import PromptTemplate
1919

2020
from nemoguardrails import LLMRails
2121
from nemoguardrails.actions.actions import ActionResult

examples/configs/rag/multi_kb/config.py

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,24 @@
2121
import pandas as pd
2222
import torch
2323
from gpt4pandas import GPT4Pandas
24-
from langchain.chains import RetrievalQA
25-
from langchain.embeddings import HuggingFaceEmbeddings
26-
from langchain.text_splitter import CharacterTextSplitter
27-
from langchain.vectorstores import FAISS
24+
25+
try:
26+
from langchain.chains import RetrievalQA
27+
from langchain.embeddings import HuggingFaceEmbeddings
28+
from langchain.text_splitter import CharacterTextSplitter
29+
from langchain.vectorstores import FAISS
30+
except ImportError:
31+
try:
32+
from langchain_classic.chains import RetrievalQA
33+
from langchain_classic.embeddings import HuggingFaceEmbeddings
34+
from langchain_classic.text_splitter import CharacterTextSplitter
35+
from langchain_classic.vectorstores import FAISS
36+
except ImportError as e:
37+
raise ImportError(
38+
"Failed to import from langchain. If you're using LangChain >= 1.0.0, "
39+
"please install langchain-classic: pip install langchain-classic"
40+
) from e
41+
2842
from langchain_core.language_models.llms import BaseLLM
2943
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
3044

examples/configs/rag/multi_kb/tabular_llm.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,13 @@
1313
# See the License for the specific language governing permissions and
1414
# limitations under the License.
1515

16-
import asyncio
1716
from typing import Any, Dict, List, Optional
1817

19-
from langchain.callbacks.manager import (
18+
from langchain_core.callbacks.manager import (
2019
AsyncCallbackManagerForLLMRun,
2120
CallbackManagerForLLMRun,
2221
)
23-
from langchain.llms.base import LLM
22+
from langchain_core.language_models.llms import BaseLLM
2423

2524

2625
def query_tabular_data(usr_query: str, gpt: any, raw_data_frame: any):
@@ -58,7 +57,7 @@ def query_tabular_data(usr_query: str, gpt: any, raw_data_frame: any):
5857
return out, d2.to_string()
5958

6059

61-
class TabularLLM(LLM):
60+
class TabularLLM(BaseLLM):
6261
"""LLM wrapping for GPT4Pandas."""
6362

6463
model: str = ""

examples/configs/rag/pinecone/config.py

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,24 @@
1818
from typing import Optional
1919

2020
import pinecone
21-
from langchain.chains import RetrievalQA
22-
from langchain.docstore.document import Document
23-
from langchain.embeddings.openai import OpenAIEmbeddings
24-
from langchain.vectorstores import Pinecone
21+
22+
try:
23+
from langchain.chains import RetrievalQA
24+
from langchain.docstore.document import Document
25+
from langchain.embeddings.openai import OpenAIEmbeddings
26+
from langchain.vectorstores import Pinecone
27+
except ImportError:
28+
try:
29+
from langchain_classic.chains import RetrievalQA
30+
from langchain_classic.docstore.document import Document
31+
from langchain_classic.embeddings.openai import OpenAIEmbeddings
32+
from langchain_classic.vectorstores import Pinecone
33+
except ImportError as e:
34+
raise ImportError(
35+
"Failed to import from langchain. If you're using LangChain >= 1.0.0, "
36+
"please install langchain-classic: pip install langchain-classic"
37+
) from e
38+
2539
from langchain_core.language_models.llms import BaseLLM
2640

2741
from nemoguardrails import LLMRails

examples/scripts/langchain/experiments.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,18 @@
1515

1616
import os
1717

18-
from langchain.chains import LLMMathChain
19-
from langchain.prompts import ChatPromptTemplate
18+
try:
19+
from langchain.chains import LLMMathChain
20+
except ImportError:
21+
try:
22+
from langchain_classic.chains import LLMMathChain
23+
except ImportError as e:
24+
raise ImportError(
25+
"Failed to import LLMMathChain. If you're using LangChain >= 1.0.0, "
26+
"please install langchain-classic: pip install langchain-classic"
27+
) from e
28+
29+
from langchain_core.prompts import ChatPromptTemplate
2030
from langchain_core.tools import Tool
2131
from langchain_openai.chat_models import ChatOpenAI
2232
from pydantic import BaseModel, Field

0 commit comments

Comments
 (0)