From 0f9279c68d6b15768eb203bfb9a9a4bd43c6e109 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Mon, 28 Aug 2023 07:32:18 -0300 Subject: [PATCH 1/4] =?UTF-8?q?=E2=9C=A8=20feat(MetalRetriever.py):=20add?= =?UTF-8?q?=20MetalRetriever=20component=20to=20retrieve=20data=20using=20?= =?UTF-8?q?the=20Metal=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ✨ feat(__init__.py): add empty __init__.py file to the retrievers directory to make it a package --- .../components/retrievers/MetalRetriever.py | 23 +++++++++++++++++++ .../components/retrievers/__init__.py | 0 2 files changed, 23 insertions(+) create mode 100644 src/backend/langflow/components/retrievers/MetalRetriever.py create mode 100644 src/backend/langflow/components/retrievers/__init__.py diff --git a/src/backend/langflow/components/retrievers/MetalRetriever.py b/src/backend/langflow/components/retrievers/MetalRetriever.py new file mode 100644 index 000000000..df6c0b222 --- /dev/null +++ b/src/backend/langflow/components/retrievers/MetalRetriever.py @@ -0,0 +1,23 @@ +from typing import Optional +from langflow import CustomComponent +from langchain.retrievers import MetalRetriever +from langchain.schema.retriever import BaseRetriever + + +class MetalRetrieverComponent(CustomComponent): + display_name: str = "Metal Retriever" + description: str = "Retriever that uses the Metal API." + + def build_config(self): + return { + "api_key": {"display_name": "API Key", "password": True}, + "client_id": {"display_name": "Client ID", "password": True}, + "index_id": {"display_name": "Index ID"}, + "params": {"display_name": "Parameters", "field_type": "code"}, + "code": {"show": False}, + } + + def build( + self, api_key: str, client_id: str, index_id: str, params: Optional[dict] = None + ) -> BaseRetriever: + return MetalRetriever(api_key, client_id, index_id, params=params) diff --git a/src/backend/langflow/components/retrievers/__init__.py b/src/backend/langflow/components/retrievers/__init__.py new file mode 100644 index 000000000..e69de29bb From d2c23945ea197b9ff3c28f432eae822600c424f5 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Mon, 28 Aug 2023 07:53:33 -0300 Subject: [PATCH 2/4] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20chore(pyproject.toml):?= =?UTF-8?q?=20upgrade=20metal-sdk=20dependency=20to=20version=202.0.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- poetry.lock | 17 ++++++++++++++++- pyproject.toml | 1 + 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/poetry.lock b/poetry.lock index b64dd4d02..8d8f36714 100644 --- a/poetry.lock +++ b/poetry.lock @@ -3280,6 +3280,21 @@ files = [ {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, ] +[[package]] +name = "metal-sdk" +version = "2.0.2" +description = "SDK for getmetal.io" +optional = false +python-versions = ">=3.7" +files = [ + {file = "metal_sdk-2.0.2-py3-none-any.whl", hash = "sha256:a5a95fb3796979085965667ffc41fd9eeddc87b60671619671a0eaebd0bec4a1"}, + {file = "metal_sdk-2.0.2.tar.gz", hash = "sha256:e5e35d230f00b1b838cfcffbcb7042f450b23b59448f37bdd385761871a1490d"}, +] + +[package.dependencies] +httpx = "*" +typing-extensions = "*" + [[package]] name = "metaphor-python" version = "0.1.16" @@ -7467,4 +7482,4 @@ local = ["ctransformers", "llama-cpp-python", "sentence-transformers"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.11" -content-hash = "36e1f79f4e6d2e55b652d10e43ccde639714ffff2965fa52b466bd854259ebf6" +content-hash = "35b3782f944eff6bd6676ea060b36adb51ee78e19c5ef4d8a2c08c163f87ce9a" diff --git a/pyproject.toml b/pyproject.toml index 24bb548ff..175457578 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -80,6 +80,7 @@ fastavro = "^1.8.0" langchain-experimental = "^0.0.8" metaphor-python = "^0.1.11" pillow = "^10.0.0" +metal-sdk = "^2.0.2" [tool.poetry.group.dev.dependencies] black = "^23.1.0" From b3b0f63a1fb75a26b74b3b76c29172a8e5eb27da Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Mon, 28 Aug 2023 07:54:59 -0300 Subject: [PATCH 3/4] =?UTF-8?q?=F0=9F=94=80=20merge(MetalRetriever.py):=20?= =?UTF-8?q?merge=20changes=20from=20langchain/retrievers=20to=20langchain/?= =?UTF-8?q?schema=20to=20keep=20codebase=20up=20to=20date=20=F0=9F=94=80?= =?UTF-8?q?=20merge(MetalRetriever.py):=20merge=20changes=20from=20metal?= =?UTF-8?q?=5Fsdk/metal=20to=20langchain/schema=20to=20keep=20codebase=20u?= =?UTF-8?q?p=20to=20date=20=F0=9F=90=9B=20fix(MetalRetriever.py):=20change?= =?UTF-8?q?=20BaseRetriever=20import=20from=20langchain.schema.retriever?= =?UTF-8?q?=20to=20langchain.schema=20to=20match=20updated=20codebase=20?= =?UTF-8?q?=E2=9C=A8=20feat(MetalRetriever.py):=20add=20error=20handling?= =?UTF-8?q?=20to=20MetalRetriever=20build=20method=20to=20raise=20ValueErr?= =?UTF-8?q?or=20if=20connection=20to=20Metal=20API=20fails?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../langflow/components/retrievers/MetalRetriever.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/backend/langflow/components/retrievers/MetalRetriever.py b/src/backend/langflow/components/retrievers/MetalRetriever.py index df6c0b222..aaf9fd613 100644 --- a/src/backend/langflow/components/retrievers/MetalRetriever.py +++ b/src/backend/langflow/components/retrievers/MetalRetriever.py @@ -1,7 +1,8 @@ from typing import Optional from langflow import CustomComponent from langchain.retrievers import MetalRetriever -from langchain.schema.retriever import BaseRetriever +from langchain.schema import BaseRetriever +from metal_sdk.metal import Metal class MetalRetrieverComponent(CustomComponent): @@ -20,4 +21,8 @@ class MetalRetrieverComponent(CustomComponent): def build( self, api_key: str, client_id: str, index_id: str, params: Optional[dict] = None ) -> BaseRetriever: - return MetalRetriever(api_key, client_id, index_id, params=params) + try: + metal = Metal(api_key=api_key, client_id=client_id, index_id=index_id) + except Exception as e: + raise ValueError("Could not connect to Metal API.") from e + return MetalRetriever(client=metal, params=params or {}) From cc4db3911e97810c005d3bb7eb11d54f248e572a Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Mon, 28 Aug 2023 08:06:37 -0300 Subject: [PATCH 4/4] =?UTF-8?q?=F0=9F=94=80=20chore(MetalRetriever.py):=20?= =?UTF-8?q?fix=20import=20statement=20for=20Metal=20class=20from=20metal?= =?UTF-8?q?=5Fsdk.metal=20module=20to=20resolve=20type=20checking=20issue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/backend/langflow/components/retrievers/MetalRetriever.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/langflow/components/retrievers/MetalRetriever.py b/src/backend/langflow/components/retrievers/MetalRetriever.py index aaf9fd613..9b2d1e5dd 100644 --- a/src/backend/langflow/components/retrievers/MetalRetriever.py +++ b/src/backend/langflow/components/retrievers/MetalRetriever.py @@ -2,7 +2,7 @@ from typing import Optional from langflow import CustomComponent from langchain.retrievers import MetalRetriever from langchain.schema import BaseRetriever -from metal_sdk.metal import Metal +from metal_sdk.metal import Metal # type: ignore class MetalRetrieverComponent(CustomComponent):