From 87db2f4d0bfd9a6f99e3fb47c814bc24d65e6ad2 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Fri, 3 Nov 2023 11:50:03 -0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix(PromptRunner.py):=20change?= =?UTF-8?q?=20beta=20variable=20type=20from=20string=20to=20boolean=20to?= =?UTF-8?q?=20match=20expected=20type=20=F0=9F=90=9B=20fix(Metaphor.py):?= =?UTF-8?q?=20change=20beta=20variable=20type=20from=20string=20to=20boole?= =?UTF-8?q?an=20to=20match=20expected=20type=20=F0=9F=90=9B=20fix(GetReque?= =?UTF-8?q?st.py):=20change=20beta=20variable=20type=20from=20string=20to?= =?UTF-8?q?=20boolean=20to=20match=20expected=20type=20=F0=9F=90=9B=20fix(?= =?UTF-8?q?JSONDocumentBuilder.py):=20change=20beta=20variable=20type=20fr?= =?UTF-8?q?om=20string=20to=20boolean=20to=20match=20expected=20type=20?= =?UTF-8?q?=F0=9F=90=9B=20fix(PostRequest.py):=20change=20beta=20variable?= =?UTF-8?q?=20type=20from=20string=20to=20boolean=20to=20match=20expected?= =?UTF-8?q?=20type=20=F0=9F=90=9B=20fix(UpdateRequest.py):=20change=20beta?= =?UTF-8?q?=20variable=20type=20from=20string=20to=20boolean=20to=20match?= =?UTF-8?q?=20expected=20type=20=F0=9F=90=9B=20fix(Chroma.py):=20change=20?= =?UTF-8?q?beta=20variable=20type=20from=20string=20to=20boolean=20to=20ma?= =?UTF-8?q?tch=20expected=20type=20=F0=9F=90=9B=20fix(Vectara.py):=20chang?= =?UTF-8?q?e=20beta=20variable=20type=20from=20string=20to=20boolean=20to?= =?UTF-8?q?=20match=20expected=20type=20=F0=9F=90=9B=20fix(component.py):?= =?UTF-8?q?=20change=20ERROR=5FCODE=5FNULL=20variable=20type=20from=20dict?= =?UTF-8?q?=20to=20string=20to=20match=20expected=20type=20=F0=9F=90=9B=20?= =?UTF-8?q?fix(custom=5Fcomponent.py):=20change=20code=5Fclass=5Fbase=5Fin?= =?UTF-8?q?heritance=20variable=20type=20from=20dict=20to=20string=20to=20?= =?UTF-8?q?match=20expected=20type=20=F0=9F=90=9B=20fix(custom=5Fcomponent?= =?UTF-8?q?.py):=20change=20function=5Fentrypoint=5Fname=20variable=20type?= =?UTF-8?q?=20from=20dict=20to=20string=20to=20match=20expected=20type=20?= =?UTF-8?q?=F0=9F=90=9B=20fix(initialize/vector=5Fstore.py):=20change=20ch?= =?UTF-8?q?romadb=20variable=20name=20to=20chromadb=5Finstance=20for=20cla?= =?UTF-8?q?rity=20=F0=9F=90=9B=20fix(database/manager.py):=20change=20expe?= =?UTF-8?q?cted=5Fcolumns=20to=20use=20model=5Ffields=20instead=20of=20=5F?= =?UTF-8?q?=5Ffields=5F=5F=20to=20match=20new=20SQLModel=20version=20?= =?UTF-8?q?=F0=9F=90=9B=20fix(database/models/base.py):=20remove=20unused?= =?UTF-8?q?=20model=5Fconfig=20variable=20=F0=9F=90=9B=20fix(database/mode?= =?UTF-8?q?ls/flow/flow.py):=20change=20validator=20decorator=20to=20field?= =?UTF-8?q?=5Fvalidator=20to=20match=20new=20pydantic=20version=20?= =?UTF-8?q?=F0=9F=90=9B=20fix(settings.py):=20change=20root=5Fvalidator=20?= =?UTF-8?q?decorator=20to=20model=5Fvalidator=20to=20match=20new=20pydanti?= =?UTF-8?q?c=20version?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/backend/langflow/components/chains/PromptRunner.py | 2 +- src/backend/langflow/components/toolkits/Metaphor.py | 2 +- src/backend/langflow/components/utilities/GetRequest.py | 2 +- .../langflow/components/utilities/JSONDocumentBuilder.py | 2 +- src/backend/langflow/components/utilities/PostRequest.py | 2 +- .../langflow/components/utilities/UpdateRequest.py | 2 +- src/backend/langflow/components/vectorstores/Chroma.py | 2 +- src/backend/langflow/components/vectorstores/Vectara.py | 2 +- src/backend/langflow/interface/custom/component.py | 6 +++--- src/backend/langflow/interface/custom/custom_component.py | 6 +++--- src/backend/langflow/interface/initialize/vector_store.py | 8 ++++---- src/backend/langflow/services/database/manager.py | 2 +- src/backend/langflow/services/database/models/base.py | 7 +------ .../langflow/services/database/models/flow/flow.py | 4 ++-- src/backend/langflow/settings.py | 4 ++-- 15 files changed, 24 insertions(+), 29 deletions(-) diff --git a/src/backend/langflow/components/chains/PromptRunner.py b/src/backend/langflow/components/chains/PromptRunner.py index 34ee1f6da..15c2743a0 100644 --- a/src/backend/langflow/components/chains/PromptRunner.py +++ b/src/backend/langflow/components/chains/PromptRunner.py @@ -8,7 +8,7 @@ from langchain.schema import Document class PromptRunner(CustomComponent): display_name: str = "Prompt Runner" description: str = "Run a Chain with the given PromptTemplate" - beta: str = True + beta: bool = True field_config = { "llm": {"display_name": "LLM"}, "prompt": { diff --git a/src/backend/langflow/components/toolkits/Metaphor.py b/src/backend/langflow/components/toolkits/Metaphor.py index ce49d36f6..558224190 100644 --- a/src/backend/langflow/components/toolkits/Metaphor.py +++ b/src/backend/langflow/components/toolkits/Metaphor.py @@ -13,7 +13,7 @@ class MetaphorToolkit(CustomComponent): documentation = ( "https://python.langchain.com/docs/integrations/tools/metaphor_search" ) - beta: str = True + beta: bool = True # api key should be password = True field_config = { "metaphor_api_key": {"display_name": "Metaphor API Key", "password": True}, diff --git a/src/backend/langflow/components/utilities/GetRequest.py b/src/backend/langflow/components/utilities/GetRequest.py index 1b1f1d375..1417a79c5 100644 --- a/src/backend/langflow/components/utilities/GetRequest.py +++ b/src/backend/langflow/components/utilities/GetRequest.py @@ -10,7 +10,7 @@ class GetRequest(CustomComponent): description: str = "Make a GET request to the given URL." output_types: list[str] = ["Document"] documentation: str = "https://docs.langflow.org/components/utilities#get-request" - beta: str = True + beta: bool = True field_config = { "url": { "display_name": "URL", diff --git a/src/backend/langflow/components/utilities/JSONDocumentBuilder.py b/src/backend/langflow/components/utilities/JSONDocumentBuilder.py index c04d9e66f..2a166aa4a 100644 --- a/src/backend/langflow/components/utilities/JSONDocumentBuilder.py +++ b/src/backend/langflow/components/utilities/JSONDocumentBuilder.py @@ -20,7 +20,7 @@ class JSONDocumentBuilder(CustomComponent): display_name: str = "JSON Document Builder" description: str = "Build a Document containing a JSON object using a key and another Document page content." output_types: list[str] = ["Document"] - beta: str = True + beta: bool = True documentation: str = ( "https://docs.langflow.org/components/utilities#json-document-builder" ) diff --git a/src/backend/langflow/components/utilities/PostRequest.py b/src/backend/langflow/components/utilities/PostRequest.py index 7021e4aa8..fc61618ba 100644 --- a/src/backend/langflow/components/utilities/PostRequest.py +++ b/src/backend/langflow/components/utilities/PostRequest.py @@ -10,7 +10,7 @@ class PostRequest(CustomComponent): description: str = "Make a POST request to the given URL." output_types: list[str] = ["Document"] documentation: str = "https://docs.langflow.org/components/utilities#post-request" - beta: str = True + beta: bool = True field_config = { "url": {"display_name": "URL", "info": "The URL to make the request to."}, "headers": { diff --git a/src/backend/langflow/components/utilities/UpdateRequest.py b/src/backend/langflow/components/utilities/UpdateRequest.py index fb7213357..2e0e82b2a 100644 --- a/src/backend/langflow/components/utilities/UpdateRequest.py +++ b/src/backend/langflow/components/utilities/UpdateRequest.py @@ -10,7 +10,7 @@ class UpdateRequest(CustomComponent): description: str = "Make a PATCH request to the given URL." output_types: list[str] = ["Document"] documentation: str = "https://docs.langflow.org/components/utilities#update-request" - beta: str = True + beta: bool = True field_config = { "url": {"display_name": "URL", "info": "The URL to make the request to."}, "headers": { diff --git a/src/backend/langflow/components/vectorstores/Chroma.py b/src/backend/langflow/components/vectorstores/Chroma.py index 667d9cbe9..a94c3c0a7 100644 --- a/src/backend/langflow/components/vectorstores/Chroma.py +++ b/src/backend/langflow/components/vectorstores/Chroma.py @@ -17,7 +17,7 @@ class ChromaComponent(CustomComponent): display_name: str = "Chroma" description: str = "Implementation of Vector Store using Chroma" documentation = "https://python.langchain.com/docs/integrations/vectorstores/chroma" - beta: str = True + beta: bool = True def build_config(self): """ diff --git a/src/backend/langflow/components/vectorstores/Vectara.py b/src/backend/langflow/components/vectorstores/Vectara.py index 28cd4e3a9..4f0891a2a 100644 --- a/src/backend/langflow/components/vectorstores/Vectara.py +++ b/src/backend/langflow/components/vectorstores/Vectara.py @@ -13,7 +13,7 @@ class VectaraComponent(CustomComponent): documentation = ( "https://python.langchain.com/docs/integrations/vectorstores/vectara" ) - beta: str = True + beta: bool = True # api key should be password = True field_config = { "vectara_customer_id": {"display_name": "Vectara Customer ID"}, diff --git a/src/backend/langflow/interface/custom/component.py b/src/backend/langflow/interface/custom/component.py index 16d108b76..cd59ff8ff 100644 --- a/src/backend/langflow/interface/custom/component.py +++ b/src/backend/langflow/interface/custom/component.py @@ -1,5 +1,5 @@ import ast -from typing import Any, ClassVar, Dict, Optional +from typing import Any, ClassVar, Optional from pydantic import BaseModel from fastapi import HTTPException @@ -16,9 +16,9 @@ class ComponentFunctionEntrypointNameNullError(HTTPException): class Component(BaseModel): - ERROR_CODE_NULL: ClassVar[Dict] = "Python code must be provided." + ERROR_CODE_NULL: ClassVar[str] = "Python code must be provided." ERROR_FUNCTION_ENTRYPOINT_NAME_NULL: ClassVar[ - Dict + str ] = "The name of the entrypoint function must be provided." code: Optional[str] = None diff --git a/src/backend/langflow/interface/custom/custom_component.py b/src/backend/langflow/interface/custom/custom_component.py index b275127ee..63bb67f8d 100644 --- a/src/backend/langflow/interface/custom/custom_component.py +++ b/src/backend/langflow/interface/custom/custom_component.py @@ -1,4 +1,4 @@ -from typing import Any, Callable, ClassVar, List, Optional, Union, Dict +from typing import Any, Callable, ClassVar, List, Optional, Union from uuid import UUID from fastapi import HTTPException from langflow.field_typing.constants import CUSTOM_COMPONENT_SUPPORTED_TYPES @@ -19,8 +19,8 @@ class CustomComponent(Component, extra="allow"): description = "Custom Component" code: Optional[str] = None field_config: dict = {} - code_class_base_inheritance: ClassVar[Dict] = "CustomComponent" - function_entrypoint_name: ClassVar[Dict] = "build" + code_class_base_inheritance: ClassVar[str] = "CustomComponent" + function_entrypoint_name: ClassVar[str] = "build" function: Optional[Callable] = None return_type_valid_list: List[str] = list(CUSTOM_COMPONENT_SUPPORTED_TYPES.keys()) repr_value: Optional[Any] = "" diff --git a/src/backend/langflow/interface/initialize/vector_store.py b/src/backend/langflow/interface/initialize/vector_store.py index 59e7c0d3b..0e9b573a4 100644 --- a/src/backend/langflow/interface/initialize/vector_store.py +++ b/src/backend/langflow/interface/initialize/vector_store.py @@ -196,7 +196,7 @@ def initialize_chroma(class_object: Type[Chroma], params: dict): params.pop("documents", None) params.pop("texts", None) params["embedding_function"] = params.pop("embedding") - chromadb = class_object(**params) + chromadb_instance = class_object(**params) else: if "texts" in params: params["documents"] = params.pop("texts") @@ -211,10 +211,10 @@ def initialize_chroma(class_object: Type[Chroma], params: dict): if value is None: doc.metadata[key] = "" - chromadb = class_object.from_documents(**params) + chromadb_instance = class_object.from_documents(**params) if persist: - chromadb.persist() - return chromadb + chromadb_instance.persist() + return chromadb_instance def initialize_qdrant(class_object: Type[Qdrant], params: dict): diff --git a/src/backend/langflow/services/database/manager.py b/src/backend/langflow/services/database/manager.py index 7465c804f..ce5de7095 100644 --- a/src/backend/langflow/services/database/manager.py +++ b/src/backend/langflow/services/database/manager.py @@ -94,7 +94,7 @@ class DatabaseService(Service): legacy_tables = ["flowstyle"] for table, model in model_mapping.items(): - expected_columns = list(model.__fields__.keys()) + expected_columns = list(model.model_fields.keys()) try: available_columns = [ diff --git a/src/backend/langflow/services/database/models/base.py b/src/backend/langflow/services/database/models/base.py index bce8bf856..9dff68c19 100644 --- a/src/backend/langflow/services/database/models/base.py +++ b/src/backend/langflow/services/database/models/base.py @@ -1,6 +1,5 @@ from sqlmodel import SQLModel import orjson -from pydantic import ConfigDict def orjson_dumps(v, *, default=None, sort_keys=False, indent_2=True): @@ -22,8 +21,4 @@ def orjson_dumps(v, *, default=None, sort_keys=False, indent_2=True): class SQLModelSerializable(SQLModel): # TODO[pydantic]: The following keys were removed: `json_loads`, `json_dumps`. # Check https://docs.pydantic.dev/dev-v2/migration/#changes-to-config for more information. - model_config = ConfigDict( - from_attributes=True, - # json_loads=orjson.loads, - # json_dumps=orjson_dumps - ) + pass diff --git a/src/backend/langflow/services/database/models/flow/flow.py b/src/backend/langflow/services/database/models/flow/flow.py index 4837e5ef0..b544766d8 100644 --- a/src/backend/langflow/services/database/models/flow/flow.py +++ b/src/backend/langflow/services/database/models/flow/flow.py @@ -1,7 +1,7 @@ # Path: src/backend/langflow/database/models/flow.py from langflow.services.database.models.base import SQLModelSerializable -from pydantic import validator +from pydantic import field_validator from sqlmodel import Field, JSON, Column, Relationship from uuid import UUID, uuid4 @@ -16,7 +16,7 @@ class FlowBase(SQLModelSerializable): description: Optional[str] = Field(index=True, nullable=True, default=None) data: Optional[Dict] = Field(default=None, nullable=True) - @validator("data") + @field_validator("data") def validate_json(v): if not v: return v diff --git a/src/backend/langflow/settings.py b/src/backend/langflow/settings.py index 5b11900c3..6b6e81baf 100644 --- a/src/backend/langflow/settings.py +++ b/src/backend/langflow/settings.py @@ -5,7 +5,7 @@ from typing import Optional, List from pathlib import Path import yaml -from pydantic import root_validator, validator +from pydantic import validator, model_validator from pydantic_settings import BaseSettings from langflow.utils.logger import logger @@ -88,7 +88,7 @@ class Settings(BaseSettings): extra = "ignore" env_prefix = "LANGFLOW_" - @root_validator(allow_reuse=True) + @model_validator(mode="after") def validate_lists(cls, values): for key, value in values.items(): if key != "dev" and not value: