feat: add cloudflare workers ai embeddings (#3697)

This commit is contained in:
Siavash Safi 2024-11-28 01:45:48 +01:00 committed by GitHub
commit 5307f0683f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 108 additions and 0 deletions

View file

@ -2,6 +2,7 @@ from .aiml import AIMLEmbeddingsComponent
from .amazon_bedrock import AmazonBedrockEmbeddingsComponent
from .astra_vectorize import AstraVectorizeComponent
from .azure_openai import AzureOpenAIEmbeddingsComponent
from .cloudflare import CloudflareWorkersAIEmbeddingsComponent
from .cohere import CohereEmbeddingsComponent
from .google_generative_ai import GoogleGenerativeAIEmbeddingsComponent
from .huggingface_inference_api import HuggingFaceInferenceAPIEmbeddingsComponent
@ -19,6 +20,7 @@ __all__ = [
"AmazonBedrockEmbeddingsComponent",
"AstraVectorizeComponent",
"AzureOpenAIEmbeddingsComponent",
"CloudflareWorkersAIEmbeddingsComponent",
"CohereEmbeddingsComponent",
"EmbeddingSimilarityComponent",
"GoogleGenerativeAIEmbeddingsComponent",

View file

@ -0,0 +1,80 @@
from langchain_community.embeddings.cloudflare_workersai import CloudflareWorkersAIEmbeddings
from langflow.base.models.model import LCModelComponent
from langflow.field_typing import Embeddings
from langflow.io import BoolInput, DictInput, IntInput, MessageTextInput, Output, SecretStrInput
class CloudflareWorkersAIEmbeddingsComponent(LCModelComponent):
display_name: str = "Cloudflare Workers AI Embeddings"
description: str = "Generate embeddings using Cloudflare Workers AI models."
documentation: str = "https://python.langchain.com/docs/integrations/text_embedding/cloudflare_workersai/"
icon = "Cloudflare"
name = "CloudflareWorkersAIEmbeddings"
inputs = [
MessageTextInput(
name="account_id",
display_name="Cloudflare account ID",
info="Find your account ID https://developers.cloudflare.com/fundamentals/setup/find-account-and-zone-ids/#find-account-id-workers-and-pages",
required=True,
),
SecretStrInput(
name="api_token",
display_name="Cloudflare API token",
info="Create an API token https://developers.cloudflare.com/fundamentals/api/get-started/create-token/",
required=True,
),
MessageTextInput(
name="model_name",
display_name="Model Name",
info="List of supported models https://developers.cloudflare.com/workers-ai/models/#text-embeddings",
required=True,
value="@cf/baai/bge-base-en-v1.5"
),
BoolInput(
name="strip_new_lines",
display_name="Strip New Lines",
advanced=True,
value=True,
),
IntInput(
name="batch_size",
display_name="Batch Size",
advanced=True,
value=50,
),
MessageTextInput(
name="api_base_url",
display_name="Cloudflare API base URL",
advanced=True,
value="https://api.cloudflare.com/client/v4/accounts",
),
DictInput(
name="headers",
display_name="Headers",
info="Additional request headers",
is_list=True,
advanced=True,
),
]
outputs = [
Output(display_name="Embeddings", name="embeddings", method="build_embeddings"),
]
def build_embeddings(self) -> Embeddings:
try:
embeddings = CloudflareWorkersAIEmbeddings(
account_id=self.account_id,
api_base_url=self.api_base_url,
api_token=self.api_token,
batch_size=self.batch_size,
headers=self.headers,
model_name=self.model_name,
strip_new_lines=self.strip_new_lines,
)
except Exception as e:
raise ValueError(f"Could not connect to CloudflareWorkersAIEmbeddings API: {str(e)}") from e
return embeddings

View file

@ -0,0 +1,14 @@
const SvgCloudflareIcon = (props) => (
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 209.51 94.74" {...props}>
<path
fill="#f4801f"
d="M143.05,93.42l1.07-3.71c1.27-4.41.8-8.48-1.34-11.48-2-2.76-5.26-4.38-9.25-4.57L58,72.7a1.47,1.47,0,0,1-1.35-2,2,2,0,0,1,1.75-1.34l76.26-1c9-.41,18.84-7.75,22.27-16.71l4.34-11.36a2.68,2.68,0,0,0,.18-1,3.31,3.31,0,0,0-.06-.54,49.67,49.67,0,0,0-95.49-5.14,22.35,22.35,0,0,0-35,23.42A31.73,31.73,0,0,0,.34,93.45a1.47,1.47,0,0,0,1.45,1.27l139.49,0h0A1.83,1.83,0,0,0,143.05,93.42Z"
/>
<path
fill="#f9ab41"
d="M168.22,41.15q-1,0-2.1.06a.88.88,0,0,0-.32.07,1.17,1.17,0,0,0-.76.8l-3,10.26c-1.28,4.41-.81,8.48,1.34,11.48a11.65,11.65,0,0,0,9.24,4.57l16.11,1a1.44,1.44,0,0,1,1.14.62,1.5,1.5,0,0,1,.17,1.37,2,2,0,0,1-1.75,1.34l-16.73,1c-9.09.42-18.88,7.75-22.31,16.7l-1.21,3.16a.9.9,0,0,0,.79,1.22h57.63A1.55,1.55,0,0,0,208,93.63a41.34,41.34,0,0,0-39.76-52.48Z"
/>
</svg>
);
export default SvgCloudflareIcon;

View file

@ -0,0 +1 @@
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 209.51 94.74"><defs><style>.cls-1{fill:#f4801f;}.cls-2{fill:#f9ab41;}</style></defs><path class="cls-1" d="M143.05,93.42l1.07-3.71c1.27-4.41.8-8.48-1.34-11.48-2-2.76-5.26-4.38-9.25-4.57L58,72.7a1.47,1.47,0,0,1-1.35-2,2,2,0,0,1,1.75-1.34l76.26-1c9-.41,18.84-7.75,22.27-16.71l4.34-11.36a2.68,2.68,0,0,0,.18-1,3.31,3.31,0,0,0-.06-.54,49.67,49.67,0,0,0-95.49-5.14,22.35,22.35,0,0,0-35,23.42A31.73,31.73,0,0,0,.34,93.45a1.47,1.47,0,0,0,1.45,1.27l139.49,0h0A1.83,1.83,0,0,0,143.05,93.42Z"/><path class="cls-2" d="M168.22,41.15q-1,0-2.1.06a.88.88,0,0,0-.32.07,1.17,1.17,0,0,0-.76.8l-3,10.26c-1.28,4.41-.81,8.48,1.34,11.48a11.65,11.65,0,0,0,9.24,4.57l16.11,1a1.44,1.44,0,0,1,1.14.62,1.5,1.5,0,0,1,.17,1.37,2,2,0,0,1-1.75,1.34l-16.73,1c-9.09.42-18.88,7.75-22.31,16.7l-1.21,3.16a.9.9,0,0,0,.79,1.22h57.63A1.55,1.55,0,0,0,208,93.63a41.34,41.34,0,0,0-39.76-52.48Z"/></svg>

After

Width:  |  Height:  |  Size: 946 B

View file

@ -0,0 +1,9 @@
import React, { forwardRef } from "react";
import SvgCloudflareIcon from "./Cloudflare";
export const CloudflareIcon = forwardRef<
SVGSVGElement,
React.PropsWithChildren<{}>
>((props, ref) => {
return <SvgCloudflareIcon ref={ref} {...props} />;
});

View file

@ -241,6 +241,7 @@ import { BotMessageSquareIcon } from "../icons/BotMessageSquare";
import { CassandraIcon } from "../icons/Cassandra";
import { ChromaIcon } from "../icons/ChromaIcon";
import { ClickhouseIcon } from "../icons/Clickhouse";
import { CloudflareIcon } from "../icons/Cloudflare";
import { CohereIcon } from "../icons/Cohere";
import { ComposioIcon } from "../icons/Composio";
import { ConfluenceIcon } from "../icons/Confluence";
@ -601,6 +602,7 @@ export const nodeIconsLucide: iconsType = {
Chroma: ChromaIcon,
Couchbase: CouchbaseIcon,
Clickhouse: ClickhouseIcon,
Cloudflare: CloudflareIcon,
AirbyteJSONLoader: AirbyteIcon,
AmazonBedrockEmbeddings: AWSIcon,
Amazon: AWSIcon,