Skip to content
This repository was archived by the owner on May 10, 2024. It is now read-only.

[DOC]: Cloudflare Workers AI EF #231

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,5 @@ npm-debug.log*
yarn-debug.log*
yarn-error.log*

.tmp
.tmp
.idea/
23 changes: 12 additions & 11 deletions docs/embeddings.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,18 @@ Chroma provides lightweight wrappers around popular embedding providers, making

<div class="special_table"></div>

| | Python | JS |
|--------------|-----------|---------------|
| [OpenAI](/embeddings/openai) | ✅ | ✅ |
| [Google Generative AI](/embeddings/google-gemini) | ✅ | ✅ |
| [Cohere](/embeddings/cohere) | ✅ | ✅ |
| [Google PaLM](/embeddings/google-palm) | ✅ | ➖ |
| [Hugging Face](/embeddings/hugging-face) | ✅ | ➖ |
| [Instructor](/embeddings/instructor) | ✅ | ➖ |
| [Hugging Face Embedding Server](/embeddings/hugging-face-embedding-server) | ✅ | ✅ |
| [Jina AI](/embeddings/jinaai) | ✅ | ✅ |
| [Roboflow](/embeddings/roboflow-api) | ✅ | ➖ |
| | Python | JS |
|----------------------------------------------------------------------------|--------|----|
| [OpenAI](/embeddings/openai) | ✅ | ✅ |
| [Google Generative AI](/embeddings/google-gemini) | ✅ | ✅ |
| [Cohere](/embeddings/cohere) | ✅ | ✅ |
| [Google PaLM](/embeddings/google-palm) | ✅ | ➖ |
| [Hugging Face](/embeddings/hugging-face) | ✅ | ➖ |
| [Instructor](/embeddings/instructor) | ✅ | ➖ |
| [Hugging Face Embedding Server](/embeddings/hugging-face-embedding-server) | ✅ | ✅ |
| [Jina AI](/embeddings/jinaai) | ✅ | ✅ |
| [Roboflow](/embeddings/roboflow-api) | ✅ | ➖ |
| [Cloudflare Workers AI](/embeddings/cloudflare) | ✅ | ✅ |

We welcome pull requests to add new Embedding Functions to the community.

Expand Down
59 changes: 59 additions & 0 deletions docs/embeddings/cloudflare.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
---
---

# Cloudflare Workers AI

import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';

<div class="select-language">Select a language</div>

<Tabs queryString groupId="lang">
<TabItem value="py" label="Python"></TabItem>
<TabItem value="js" label="JavaScript"></TabItem>
</Tabs>

Chroma provides a convenient wrapper around Cloudflare Workers AI REST API. This embedding function runs remotely on a Cloudflare Workers AI. It requires an API key and an account Id or gateway endpoint. You can get an API key by signing up for an account at [Cloudflare Workers AI](https://cloudflare.com/).

Visit the [Cloudflare Workers AI documentation](https://developers.cloudflare.com/workers-ai/) for more information on getting started.

:::note
Currently cloudflare embeddings endpoints allow batches of maximum 100 documents in a single request. The EF has a hard limit of 100 documents per request, and will raise an error if you try to pass more than 100 documents.
:::

<Tabs queryString groupId="lang" className="hideTabSwitcher">
<TabItem value="py" label="Python">

```python
import chromadb.utils.embedding_functions as embedding_functions
cf_ef = embedding_functions.CloudflareWorkersAIEmbeddingFunction(
api_key = "YOUR_API_KEY",
account_id = "YOUR_ACCOUNT_ID", # or gateway_endpoint
model_name = "@cf/baai/bge-base-en-v1.5",
)
cf_ef(input=["This is my first text to embed", "This is my second document"])
```

You can pass in an optional `model_name` argument, which lets you choose which Cloudflare Workers AI [model](https://developers.cloudflare.com/workers-ai/models/#text-embeddings) to use. By default, Chroma uses `@cf/baai/bge-base-en-v1.5`.

</TabItem>
<TabItem value="js" label="JavaScript">

```javascript
// const {CloudflareWorkersAIEmbeddingFunction} = require('chromadb'); //CJS import
import {CloudflareWorkersAIEmbeddingFunction} from "chromadb"; //ESM import
const embedder = new CloudflareWorkersAIEmbeddingFunction({
apiToken: 'YOUR_API_KEY',
accountId: "YOUR_ACCOUNT_ID", // or gatewayEndpoint
model: '@cf/baai/bge-base-en-v1.5',
});

// use directly
const embeddings = embedder.generate(['document1', 'document2']);

// pass documents to query for .add and .query
const collection = await client.createCollection({name: "name", embeddingFunction: embedder})
const collectionGet = await client.getCollection({name:"name", embeddingFunction: embedder})
```
</TabItem>
</Tabs>
1 change: 1 addition & 0 deletions sidebars.js
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ const sidebars = {
'embeddings/roboflow-api',
'embeddings/hugging-face-embedding-server',
'embeddings/jinaai',
'embeddings/cloudflare',
],
},
],
Expand Down