From 5cf56ca7a89fae0d2ba84e3b8ad7f3d6aa5aed1a Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Thu, 25 Jan 2024 21:15:28 -0300 Subject: [PATCH] Fix import errors and type annotations --- .../embeddings/AzureOpenAIEmbeddings.py | 9 +-- .../components/embeddings/CohereEmbeddings.py | 3 +- .../components/embeddings/OpenAIEmbeddings.py | 16 ++--- .../langflow/components/llms/Anthropic.py | 8 ++- .../langflow/components/llms/CTransformers.py | 8 ++- .../langflow/components/llms/ChatOpenAI.py | 7 +-- .../langflow/components/llms/Cohere.py | 6 +- .../langflow/components/llms/OpenAI.py | 60 ------------------- .../retrievers/MultiQueryRetriever.py | 16 ++--- .../components/utilities/SerpAPIWrapper.py | 5 +- .../utilities/WikipediaAPIWrapper.py | 20 +++++-- .../utilities/WolframAlphaAPIWrapper.py | 6 +- .../components/vectorstores/Pinecone.py | 2 +- 13 files changed, 63 insertions(+), 103 deletions(-) delete mode 100644 src/backend/langflow/components/llms/OpenAI.py diff --git a/src/backend/langflow/components/embeddings/AzureOpenAIEmbeddings.py b/src/backend/langflow/components/embeddings/AzureOpenAIEmbeddings.py index e4fdd8738..09b03e17b 100644 --- a/src/backend/langflow/components/embeddings/AzureOpenAIEmbeddings.py +++ b/src/backend/langflow/components/embeddings/AzureOpenAIEmbeddings.py @@ -1,7 +1,8 @@ -from langflow import CustomComponent from langchain.embeddings.base import Embeddings from langchain_community.embeddings import AzureOpenAIEmbeddings +from langflow import CustomComponent + class AzureOpenAIEmbeddingsComponent(CustomComponent): display_name: str = "AzureOpenAIEmbeddings" @@ -53,9 +54,9 @@ class AzureOpenAIEmbeddingsComponent(CustomComponent): try: embeddings = AzureOpenAIEmbeddings( azure_endpoint=azure_endpoint, - deployment=azure_deployment, - openai_api_version=api_version, - openai_api_key=api_key, + azure_deployment=azure_deployment, + api_version=api_version, + api_key=api_key, ) except Exception as e: diff --git a/src/backend/langflow/components/embeddings/CohereEmbeddings.py b/src/backend/langflow/components/embeddings/CohereEmbeddings.py index 4e7fb7b17..049525b39 100644 --- a/src/backend/langflow/components/embeddings/CohereEmbeddings.py +++ b/src/backend/langflow/components/embeddings/CohereEmbeddings.py @@ -1,7 +1,6 @@ from typing import Optional from langchain_community.embeddings.cohere import CohereEmbeddings - from langflow import CustomComponent @@ -27,7 +26,7 @@ class CohereEmbeddingsComponent(CustomComponent): truncate: Optional[str] = None, user_agent: str = "langchain", ) -> CohereEmbeddings: - return CohereEmbeddings( + return CohereEmbeddings( # type: ignore max_retries=max_retries, user_agent=user_agent, request_timeout=request_timeout, diff --git a/src/backend/langflow/components/embeddings/OpenAIEmbeddings.py b/src/backend/langflow/components/embeddings/OpenAIEmbeddings.py index 71bcb1db2..555d45570 100644 --- a/src/backend/langflow/components/embeddings/OpenAIEmbeddings.py +++ b/src/backend/langflow/components/embeddings/OpenAIEmbeddings.py @@ -1,7 +1,9 @@ +from typing import Any, Callable, Dict, List, Optional, Union + +from langchain_openai.embeddings.base import OpenAIEmbeddings + from langflow import CustomComponent from langflow.field_typing import NestedDict -from typing import List, Optional, Dict, Any, Union, Callable -from langchain_openai.embeddings.base import OpenAIEmbeddings class OpenAIEmbeddingsComponent(CustomComponent): @@ -102,13 +104,13 @@ class OpenAIEmbeddingsComponent(CustomComponent): max_retries=max_retries, model=model, model_kwargs=model_kwargs, - openai_api_base=openai_api_base, - openai_api_key=openai_api_key, + base_url=openai_api_base, + api_key=openai_api_key, openai_api_type=openai_api_type, - openai_api_version=openai_api_version, - openai_organization=openai_organization, + api_version=openai_api_version, + organization=openai_organization, openai_proxy=openai_proxy, - request_timeout=request_timeout, + timeout=request_timeout, show_progress_bar=show_progress_bar, skip_empty=skip_empty, tiktoken_model_name=tiktoken_model_name, diff --git a/src/backend/langflow/components/llms/Anthropic.py b/src/backend/langflow/components/llms/Anthropic.py index f94d16deb..c1b776617 100644 --- a/src/backend/langflow/components/llms/Anthropic.py +++ b/src/backend/langflow/components/llms/Anthropic.py @@ -1,8 +1,10 @@ -from pydantic import SecretStr -from langflow import CustomComponent from typing import Optional -from langflow.field_typing import BaseLanguageModel, NestedDict + from langchain_community.llms.anthropic import Anthropic +from pydantic.v1 import SecretStr + +from langflow import CustomComponent +from langflow.field_typing import BaseLanguageModel, NestedDict class AnthropicComponent(CustomComponent): diff --git a/src/backend/langflow/components/llms/CTransformers.py b/src/backend/langflow/components/llms/CTransformers.py index f4826bf86..a0668814e 100644 --- a/src/backend/langflow/components/llms/CTransformers.py +++ b/src/backend/langflow/components/llms/CTransformers.py @@ -1,6 +1,8 @@ -from langflow import CustomComponent +from typing import Dict, Optional + from langchain_community.llms.ctransformers import CTransformers -from typing import Optional, Dict + +from langflow import CustomComponent class CTransformersComponent(CustomComponent): @@ -28,4 +30,4 @@ class CTransformersComponent(CustomComponent): } def build(self, model: str, model_file: str, model_type: str, config: Optional[Dict] = None) -> CTransformers: - return CTransformers(model=model, model_file=model_file, model_type=model_type, config=config) + return CTransformers(model=model, model_file=model_file, model_type=model_type, config=config) # type: ignore diff --git a/src/backend/langflow/components/llms/ChatOpenAI.py b/src/backend/langflow/components/llms/ChatOpenAI.py index e03a618fc..19ca4f41d 100644 --- a/src/backend/langflow/components/llms/ChatOpenAI.py +++ b/src/backend/langflow/components/llms/ChatOpenAI.py @@ -2,7 +2,6 @@ from typing import Optional, Union from langchain.llms import BaseLLM from langchain_community.chat_models.openai import ChatOpenAI - from langflow import CustomComponent from langflow.field_typing import BaseLanguageModel, NestedDict @@ -78,8 +77,8 @@ class ChatOpenAIComponent(CustomComponent): return ChatOpenAI( max_tokens=max_tokens, model_kwargs=model_kwargs, - model_name=model_name, - openai_api_base=openai_api_base, - openai_api_key=openai_api_key, + model=model_name, + base_url=openai_api_base, + api_key=openai_api_key, temperature=temperature, ) diff --git a/src/backend/langflow/components/llms/Cohere.py b/src/backend/langflow/components/llms/Cohere.py index bcb15678e..3b74fc9b4 100644 --- a/src/backend/langflow/components/llms/Cohere.py +++ b/src/backend/langflow/components/llms/Cohere.py @@ -1,6 +1,6 @@ -from langflow import CustomComponent -from langchain_core.language_models.base import BaseLanguageModel from langchain_community.llms.cohere import Cohere +from langchain_core.language_models.base import BaseLanguageModel +from langflow import CustomComponent class CohereComponent(CustomComponent): @@ -21,4 +21,4 @@ class CohereComponent(CustomComponent): max_tokens: int = 256, temperature: float = 0.75, ) -> BaseLanguageModel: - return Cohere(cohere_api_key=cohere_api_key, max_tokens=max_tokens, temperature=temperature) + return Cohere(cohere_api_key=cohere_api_key, max_tokens=max_tokens, temperature=temperature) # type: ignore diff --git a/src/backend/langflow/components/llms/OpenAI.py b/src/backend/langflow/components/llms/OpenAI.py deleted file mode 100644 index f4f26db2f..000000000 --- a/src/backend/langflow/components/llms/OpenAI.py +++ /dev/null @@ -1,60 +0,0 @@ -from typing import Dict, Optional - -from langchain_openai.llms.base import OpenAI - -from langflow import CustomComponent - - -class OpenAIComponent(CustomComponent): - display_name = "OpenAI" - description = "OpenAI large language models." - - def build_config(self): - return { - "max_tokens": {"display_name": "Max Tokens", "default": 256}, - "model_kwargs": {"display_name": "Model Kwargs", "advanced": True}, - "model_name": { - "display_name": "Model Name", - "value": "text-davinci-003", - "options": [ - "text-davinci-003", - "text-davinci-002", - "text-curie-001", - "text-babbage-001", - "text-ada-001", - ], - }, - "openai_api_base": { - "display_name": "OpenAI API Base", - "info": ( - "The base URL of the OpenAI API. Defaults to https://api.openai.com/v1.\n" - "You can change this to use other APIs like JinaChat, LocalAI and Prem." - ), - }, - "openai_api_key": { - "display_name": "OpenAI API Key", - "value": "", - "password": True, - }, - "temperature": {"display_name": "Temperature", "value": 0.7}, - } - - def build( - self, - max_tokens: Optional[int] = 256, - model_kwargs: Optional[Dict] = None, - model_name: str = "text-davinci-003", - openai_api_base: Optional[str] = "", - openai_api_key: str = "", - temperature: Optional[float] = 0.7, - ) -> OpenAI: - if not openai_api_base: - openai_api_base = "https://api.openai.com/v1" - return OpenAI( - max_tokens=max_tokens, - model_kwargs=model_kwargs or {}, - model_name=model_name, - openai_api_base=openai_api_base, - openai_api_key=openai_api_key, - temperature=temperature, - ) diff --git a/src/backend/langflow/components/retrievers/MultiQueryRetriever.py b/src/backend/langflow/components/retrievers/MultiQueryRetriever.py index 8c95d6d2a..d2c12d7a5 100644 --- a/src/backend/langflow/components/retrievers/MultiQueryRetriever.py +++ b/src/backend/langflow/components/retrievers/MultiQueryRetriever.py @@ -1,11 +1,8 @@ -from langflow import CustomComponent +from typing import Callable, Optional, Union + from langchain.retrievers import MultiQueryRetriever -from typing import Optional, Union, Callable -from langflow.field_typing import ( - PromptTemplate, - BaseLLM, - BaseRetriever, -) +from langflow import CustomComponent +from langflow.field_typing import BaseLLM, BaseRetriever, PromptTemplate class MultiQueryRetrieverComponent(CustomComponent): @@ -46,4 +43,7 @@ class MultiQueryRetrieverComponent(CustomComponent): prompt: Optional[PromptTemplate] = None, parser_key: str = "lines", ) -> Union[Callable, MultiQueryRetriever]: - return MultiQueryRetriever(llm=llm, retriever=retriever, prompt=prompt, parser_key=parser_key) + if not prompt: + return MultiQueryRetriever.from_llm(llm=llm, retriever=retriever, parser_key=parser_key) + else: + return MultiQueryRetriever.from_llm(llm=llm, retriever=retriever, prompt=prompt, parser_key=parser_key) diff --git a/src/backend/langflow/components/utilities/SerpAPIWrapper.py b/src/backend/langflow/components/utilities/SerpAPIWrapper.py index 0fda8188e..924f5628d 100644 --- a/src/backend/langflow/components/utilities/SerpAPIWrapper.py +++ b/src/backend/langflow/components/utilities/SerpAPIWrapper.py @@ -1,6 +1,7 @@ -from langflow import CustomComponent from typing import Callable, Union + from langchain_community.utilities.serpapi import SerpAPIWrapper +from langflow import CustomComponent class SerpAPIWrapperComponent(CustomComponent): @@ -24,7 +25,7 @@ class SerpAPIWrapperComponent(CustomComponent): serpapi_api_key: str, params: dict, ) -> Union[SerpAPIWrapper, Callable]: # Removed quotes around SerpAPIWrapper - return SerpAPIWrapper( + return SerpAPIWrapper( # type: ignore serpapi_api_key=serpapi_api_key, params=params, ) diff --git a/src/backend/langflow/components/utilities/WikipediaAPIWrapper.py b/src/backend/langflow/components/utilities/WikipediaAPIWrapper.py index a5dc908d6..00820881b 100644 --- a/src/backend/langflow/components/utilities/WikipediaAPIWrapper.py +++ b/src/backend/langflow/components/utilities/WikipediaAPIWrapper.py @@ -1,6 +1,7 @@ -from langflow import CustomComponent -from typing import Union, Callable +from typing import Callable, Union + from langchain_community.utilities.wikipedia import WikipediaAPIWrapper +from langflow import CustomComponent # Assuming WikipediaAPIWrapper is a class that needs to be imported. # The import statement is not included as it is not provided in the JSON @@ -14,5 +15,16 @@ class WikipediaAPIWrapperComponent(CustomComponent): def build_config(self): return {} - def build(self) -> Union[WikipediaAPIWrapper, Callable]: - return WikipediaAPIWrapper() + def build( + self, + top_k_results: int = 3, + lang: str = "en", + load_all_available_meta: bool = False, + doc_content_chars_max: int = 4000, + ) -> Union[WikipediaAPIWrapper, Callable]: + return WikipediaAPIWrapper( # type: ignore + top_k_results=top_k_results, + lang=lang, + load_all_available_meta=load_all_available_meta, + doc_content_chars_max=doc_content_chars_max, + ) diff --git a/src/backend/langflow/components/utilities/WolframAlphaAPIWrapper.py b/src/backend/langflow/components/utilities/WolframAlphaAPIWrapper.py index 72e656a54..2e71a161c 100644 --- a/src/backend/langflow/components/utilities/WolframAlphaAPIWrapper.py +++ b/src/backend/langflow/components/utilities/WolframAlphaAPIWrapper.py @@ -1,6 +1,8 @@ -from langflow import CustomComponent from typing import Callable, Union + from langchain_community.utilities.wolfram_alpha import WolframAlphaAPIWrapper +from langflow import CustomComponent + # Since all the fields in the JSON have show=False, we will only create a basic component # without any configurable fields. @@ -13,4 +15,4 @@ class WolframAlphaAPIWrapperComponent(CustomComponent): return {"appid": {"display_name": "App ID", "type": "str", "password": True}} def build(self, appid: str) -> Union[Callable, WolframAlphaAPIWrapper]: - return WolframAlphaAPIWrapper(wolfram_alpha_appid=appid) + return WolframAlphaAPIWrapper(wolfram_alpha_appid=appid) # type: ignore diff --git a/src/backend/langflow/components/vectorstores/Pinecone.py b/src/backend/langflow/components/vectorstores/Pinecone.py index ada0d405d..1c04b6bc5 100644 --- a/src/backend/langflow/components/vectorstores/Pinecone.py +++ b/src/backend/langflow/components/vectorstores/Pinecone.py @@ -7,7 +7,7 @@ from langflow.field_typing import ( ) from langchain.schema import BaseRetriever from langchain.vectorstores.base import VectorStore -import pinecone +import pinecone # type: ignore class PineconeComponent(CustomComponent):