Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
25b68fe
feat(embeddings): multi-provider Embeddings block on a shared core
mzxchandra Aug 6, 2026
e4306e4
fix(embeddings): report an unsupported dimension as a client error
mzxchandra Aug 6, 2026
f5fd25d
fix(embeddings): only send a dimension when the caller asked to reduce
mzxchandra Aug 6, 2026
350c389
test(knowledge): de-flake the sync-engine suite
mzxchandra Aug 6, 2026
041de1f
fix(embeddings): drop a capability the selected model no longer offers
mzxchandra Aug 6, 2026
0a0f41b
feat(embeddings): use the latent-constellation mark for the block icon
mzxchandra Aug 6, 2026
9f976b6
fix(embeddings): declare the outputs the legacy openai block returns
mzxchandra Aug 6, 2026
5f1492b
fix(copilot): resolve same-id subblock variants before validating
mzxchandra Aug 6, 2026
6de1c6e
fix(copilot): prefer a conditioned variant over an unconditioned catc…
mzxchandra Aug 6, 2026
493f5b6
Merge origin/staging into feat/embeddings-multi-provider
mzxchandra Aug 6, 2026
baf0067
Merge remote-tracking branch 'origin/staging' into feat/embeddings-mu…
mzxchandra Aug 6, 2026
8c0dfee
chore(embeddings): scope this branch to the multi-provider block
mzxchandra Aug 6, 2026
8b57c78
fix(embeddings): honor per-model token limits and bound the JSON inpu…
mzxchandra Aug 6, 2026
c67461d
Merge remote-tracking branch 'origin/staging' into feat/embeddings-mu…
mzxchandra Aug 6, 2026
04e8621
chore(embeddings): regenerate tool metadata for the new embedding tools
mzxchandra Aug 6, 2026
06bf039
fix(embeddings): project before batching, and keep the sunset block's…
mzxchandra Aug 6, 2026
05efae9
Merge remote-tracking branch 'origin/staging' into feat/embeddings-mu…
mzxchandra Aug 6, 2026
9302f84
fix(embeddings): override stale block params instead of omitting them
mzxchandra Aug 6, 2026
d7be0f9
Merge remote-tracking branch 'origin/staging' into feat/embeddings-mu…
mzxchandra Aug 6, 2026
27ec27e
fix(embeddings): discount the batch ceiling when the tokenizer is for…
mzxchandra Aug 6, 2026
4da0625
Merge remote-tracking branch 'origin/staging' into feat/embeddings-mu…
mzxchandra Aug 6, 2026
73e12df
fix(embeddings): keep the batch ceiling exact and warn before truncating
mzxchandra Aug 6, 2026
e742ac9
Merge remote-tracking branch 'origin/staging' into feat/embeddings-mu…
mzxchandra Aug 6, 2026
14c8797
refactor(embeddings): drop dead surface and enforce OpenAI's item cap
waleedlatif1 Aug 6, 2026
491fb16
fix(embeddings): normalize reduced Cohere output; correct OpenAI toke…
waleedlatif1 Aug 6, 2026
26f1807
fix(embeddings): split per-input and per-request token limits; close …
waleedlatif1 Aug 6, 2026
5d452da
refactor(embeddings): derive block options from the catalog; use shar…
waleedlatif1 Aug 6, 2026
dd636b8
docs(embeddings): correct comments that drifted from the code
waleedlatif1 Aug 6, 2026
ae002f1
fix(docs): generate tool inputs for factory-built tools
waleedlatif1 Aug 6, 2026
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
30 changes: 30 additions & 0 deletions apps/docs/components/icons.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2412,6 +2412,36 @@ export function ImageIcon(props: SVGProps<SVGSVGElement>) {
)
}

export function EmbeddingsIcon(props: SVGProps<SVGSVGElement>) {
return (
<svg
{...props}
width='26'
height='26'
viewBox='0 0 26 26'
fill='none'
xmlns='http://www.w3.org/2000/svg'
stroke='currentColor'
strokeWidth='2'
strokeLinecap='round'
strokeLinejoin='round'
>
{/* Rays sit below the nodes in weight, but not so far below that they
wash out to loose dots at the 14px search-row size. */}
<path
d='M13 13L5.5 6.5M13 13L21 7M13 13L6.5 20M13 13L21 19'
strokeWidth='1.6'
opacity='0.9'
/>
<circle cx='13' cy='13' r='3.1' fill='currentColor' stroke='none' />
<circle cx='5.5' cy='6.5' r='1.9' fill='currentColor' stroke='none' />
<circle cx='21' cy='7' r='1.9' fill='currentColor' stroke='none' />
<circle cx='6.5' cy='20' r='1.9' fill='currentColor' stroke='none' />
<circle cx='21' cy='19' r='1.9' fill='currentColor' stroke='none' />
</svg>
)
}

export function TypeformIcon(props: SVGProps<SVGSVGElement>) {
return (
<svg
Expand Down
2 changes: 2 additions & 0 deletions apps/docs/components/ui/icon-mapping.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ import {
ElasticsearchIcon,
ElevenLabsIcon,
EmailBisonIcon,
EmbeddingsIcon,
EnrichmentIcon,
EnrichSoIcon,
EnrowIcon,
Expand Down Expand Up @@ -317,6 +318,7 @@ export const blockTypeToIconMap: Record<string, IconComponent> = {
elasticsearch: ElasticsearchIcon,
elevenlabs: ElevenLabsIcon,
emailbison: EmailBisonIcon,
embeddings: EmbeddingsIcon,
enrich: EnrichSoIcon,
enrichment: EnrichmentIcon,
enrow: EnrowIcon,
Expand Down
130 changes: 130 additions & 0 deletions apps/docs/content/docs/en/integrations/embeddings.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
---
title: Embeddings
description: Generate embeddings
---

import { BlockInfoCard } from "@/components/ui/block-info-card"

<BlockInfoCard
type="embeddings"
color="#7B4DFF"
/>

{/* MANUAL-CONTENT-START:intro */}
An embedding turns a piece of text into a list of numbers that captures its meaning. Two texts that mean similar things get similar numbers, so you can compare meaning directly instead of matching keywords. That is what powers semantic search, grouping related items, and spotting near-duplicates that are worded differently.

The Embeddings block generates those numbers using OpenAI, Google Gemini, Cohere, or Mistral. Pick a provider, pick one of its models, pass in text, and get a vector back — one vector per input, in the order you supplied them. You can embed a single string or a list of strings in one call.

Models differ in what they are good at and what they cost. `text-embedding-3-small` is the cost-efficient general choice, `gemini-embedding-001` gives the highest retrieval quality, `embed-v4.0` handles multilingual content, and `codestral-embed` is tuned for source code. Some models also let you trade vector size against quality, and some accept a task type so the vector is conditioned for how it will be used — the block only offers those controls for the models that actually support them.

Two things worth knowing before you build on it. Vectors are only comparable when they come from the same model at the same size, so changing either means re-embedding everything you intend to compare. And input longer than the model's limit is shortened to fit rather than rejected, with a warning in the run, so chunk long documents yourself when the tail matters.

Sim's knowledge bases embed separately, at a fixed vector width and from a smaller set of models. This block is for embedding text yourself inside a workflow.
{/* MANUAL-CONTENT-END */}


## Usage Instructions

Turn text into embedding vectors for semantic search, clustering, and similarity. Supports OpenAI, Google Gemini, Cohere, and Mistral embedding models.



## Actions

### `embeddings_openai`

Generate embeddings from text using OpenAI's embedding models

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `input` | string | Yes | Text to embed, or an array of texts to embed in one call |
| `model` | string | No | Embedding model to use |
| `taskType` | string | No | What the embedding is for, when the model supports task conditioning: document, query, similarity, classification, or clustering |
| `dimensions` | number | No | Output dimensions, when the model supports truncation. Defaults to native. |
| `apiKey` | string | Yes | API key for the selected embedding provider |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `embeddings` | json | Generated embeddings |
| `model` | string | Model used |
| `provider` | string | Provider used |
| `dimensions` | number | Dimensionality of each vector |
| `usage` | json | Token usage |

### `embeddings_gemini`

Generate embeddings from text using Google's Gemini embedding models

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `input` | string | Yes | Text to embed, or an array of texts to embed in one call |
| `model` | string | No | Embedding model to use |
| `taskType` | string | No | What the embedding is for, when the model supports task conditioning: document, query, similarity, classification, or clustering |
| `dimensions` | number | No | Output dimensions, when the model supports truncation. Defaults to native. |
| `apiKey` | string | Yes | API key for the selected embedding provider |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `embeddings` | json | Generated embeddings |
| `model` | string | Model used |
| `provider` | string | Provider used |
| `dimensions` | number | Dimensionality of each vector |
| `usage` | json | Token usage |

### `embeddings_cohere`

Generate embeddings from text using Cohere's embedding models

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `input` | string | Yes | Text to embed, or an array of texts to embed in one call |
| `model` | string | No | Embedding model to use |
| `taskType` | string | No | What the embedding is for, when the model supports task conditioning: document, query, similarity, classification, or clustering |
| `dimensions` | number | No | Output dimensions, when the model supports truncation. Defaults to native. |
| `apiKey` | string | Yes | API key for the selected embedding provider |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `embeddings` | json | Generated embeddings |
| `model` | string | Model used |
| `provider` | string | Provider used |
| `dimensions` | number | Dimensionality of each vector |
| `usage` | json | Token usage |

### `embeddings_mistral`

Generate embeddings from text using Mistral's embedding models

#### Input

| Parameter | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `input` | string | Yes | Text to embed, or an array of texts to embed in one call |
| `model` | string | No | Embedding model to use |
| `taskType` | string | No | What the embedding is for, when the model supports task conditioning: document, query, similarity, classification, or clustering |
| `dimensions` | number | No | Output dimensions, when the model supports truncation. Defaults to native. |
| `apiKey` | string | Yes | API key for the selected embedding provider |

#### Output

| Parameter | Type | Description |
| --------- | ---- | ----------- |
| `embeddings` | json | Generated embeddings |
| `model` | string | Model used |
| `provider` | string | Provider used |
| `dimensions` | number | Dimensionality of each vector |
| `usage` | json | Token usage |


10 changes: 0 additions & 10 deletions apps/docs/content/docs/en/integrations/exa.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,6 @@ Search the web using Exa AI. Returns relevant search results with titles, URLs,
| `startCrawlDate` | string | No | Deprecated: use startPublishedDate. Only include results crawled on or after this ISO 8601 date |
| `endCrawlDate` | string | No | Deprecated: use endPublishedDate. Only include results crawled on or before this ISO 8601 date |
| `apiKey` | string | Yes | Exa AI API Key |
| `pricing` | custom | No | No description |
| `rateLimit` | string | No | No description |

#### Output

Expand Down Expand Up @@ -120,8 +118,6 @@ Retrieve the contents of webpages using Exa AI. Returns the title, text content,
| `livecrawlTimeout` | number | No | Live crawl timeout in milliseconds \(max 90000\). Default: 10000 |
| `livecrawl` | string | No | Deprecated: use maxAgeHours instead. Live crawling mode: never, fallback, always, or preferred |
| `apiKey` | string | Yes | Exa AI API Key |
| `pricing` | custom | No | No description |
| `rateLimit` | string | No | No description |

#### Output

Expand Down Expand Up @@ -162,8 +158,6 @@ Find webpages similar to a given URL using Exa AI. Deprecated by Exa in favor of
| `livecrawlTimeout` | number | No | Live crawl timeout in milliseconds \(max 90000\). Default: 10000 |
| `livecrawl` | string | No | Deprecated: use maxAgeHours instead. Live crawling mode: never, fallback, always, or preferred |
| `apiKey` | string | Yes | Exa AI API Key |
| `pricing` | custom | No | No description |
| `rateLimit` | string | No | No description |

#### Output

Expand Down Expand Up @@ -191,8 +185,6 @@ Get an AI-generated answer to a question with citations from the web using Exa A
| `text` | boolean | No | Include the full page text of each cited source \(default: false\). This does not affect the answer itself. |
| `outputSchema` | json | No | JSON Schema describing the answer shape. When supplied, the answer is returned as a structured object instead of a string. |
| `apiKey` | string | Yes | Exa AI API Key |
| `pricing` | custom | No | No description |
| `rateLimit` | string | No | No description |

#### Output

Expand Down Expand Up @@ -222,8 +214,6 @@ Run a deep research task with Exa Agent. Handles multi-step list building, enric
| `systemPrompt` | string | No | Additional guidance for how the agent should behave or format its answer |
| `previousRunId` | string | No | ID of a completed agent run to continue from, for follow-up questions |
| `apiKey` | string | Yes | Exa AI API Key |
| `pricing` | custom | No | No description |
| `rateLimit` | string | No | No description |

#### Output

Expand Down
4 changes: 0 additions & 4 deletions apps/docs/content/docs/en/integrations/google_books.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,6 @@ Search for books using the Google Books API
| `startIndex` | number | No | Index of the first result to return \(for pagination\) |
| `maxResults` | number | No | Maximum number of results to return \(1-40\) |
| `langRestrict` | string | No | Restrict results to a specific language \(ISO 639-1 code\) |
| `pricing` | per_request | No | No description |
| `rateLimit` | string | No | No description |

#### Output

Expand Down Expand Up @@ -84,8 +82,6 @@ Get detailed information about a specific book volume
| `apiKey` | string | Yes | Google Books API key |
| `volumeId` | string | Yes | The ID of the volume to retrieve |
| `projection` | string | No | Projection level \(full, lite\) |
| `pricing` | per_request | No | No description |
| `rateLimit` | string | No | No description |

#### Output

Expand Down
30 changes: 0 additions & 30 deletions apps/docs/content/docs/en/integrations/google_maps.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,6 @@ Get current air quality data for a location
| `lat` | number | Yes | Latitude coordinate |
| `lng` | number | Yes | Longitude coordinate |
| `languageCode` | string | No | Language code for the response \(e.g., "en", "es"\) |
| `pricing` | per_request | No | No description |
| `rateLimit` | string | No | No description |

#### Output

Expand Down Expand Up @@ -93,8 +91,6 @@ Get directions and route information between two locations
| `waypoints` | json | No | Array of intermediate waypoints |
| `units` | string | No | Unit system: metric or imperial |
| `language` | string | No | Language code for results \(e.g., en, es, fr\) |
| `pricing` | per_request | No | No description |
| `rateLimit` | string | No | No description |

#### Output

Expand Down Expand Up @@ -139,8 +135,6 @@ Calculate travel distance and time between multiple origins and destinations
| `avoid` | string | No | Features to avoid: tolls, highways, or ferries |
| `units` | string | No | Unit system: metric or imperial |
| `language` | string | No | Language code for results \(e.g., en, es, fr\) |
| `pricing` | custom | No | No description |
| `rateLimit` | string | No | No description |

#### Output

Expand Down Expand Up @@ -169,8 +163,6 @@ Get elevation data for a location
| `apiKey` | string | Yes | Google Maps API key |
| `lat` | number | Yes | Latitude coordinate |
| `lng` | number | Yes | Longitude coordinate |
| `pricing` | per_request | No | No description |
| `rateLimit` | string | No | No description |

#### Output

Expand All @@ -193,8 +185,6 @@ Convert an address into geographic coordinates (latitude and longitude)
| `address` | string | Yes | The address to geocode |
| `language` | string | No | Language code for results \(e.g., en, es, fr\) |
| `region` | string | No | Region bias as a ccTLD code \(e.g., us, uk\) |
| `pricing` | per_request | No | No description |
| `rateLimit` | string | No | No description |

#### Output

Expand Down Expand Up @@ -227,8 +217,6 @@ Geolocate a device using WiFi access points, cell towers, or IP address
| `considerIp` | boolean | No | Whether to use IP address for geolocation \(default: true\) |
| `cellTowers` | array | No | Array of cell tower objects with cellId, locationAreaCode, mobileCountryCode, mobileNetworkCode |
| `wifiAccessPoints` | array | No | Array of WiFi access point objects with macAddress \(required\), signalStrength, etc. |
| `pricing` | per_request | No | No description |
| `rateLimit` | string | No | No description |

#### Output

Expand All @@ -250,8 +238,6 @@ Get detailed information about a specific place
| `placeId` | string | Yes | Google Place ID |
| `fields` | string | No | Comma-separated list of fields to return |
| `language` | string | No | Language code for results \(e.g., en, es, fr\) |
| `pricing` | per_request | No | No description |
| `rateLimit` | string | No | No description |

#### Output

Expand Down Expand Up @@ -306,8 +292,6 @@ Search for places of a given type within a radius of a location
| `rankPreference` | string | No | How to rank results: POPULARITY \(default\) or DISTANCE |
| `languageCode` | string | No | Language code for the response \(e.g., en, es\) |
| `regionCode` | string | No | Region bias as a ccTLD code \(e.g., us, uk\) |
| `pricing` | per_request | No | No description |
| `rateLimit` | string | No | No description |

#### Output

Expand Down Expand Up @@ -342,8 +326,6 @@ Search for places using a text query
| `language` | string | No | Language code for results \(e.g., en, es, fr\) |
| `region` | string | No | Region bias as a ccTLD code \(e.g., us, uk\) |
| `pageToken` | string | No | Token from a previous search response to fetch the next page of results. Wait a couple seconds after receiving the token before using it, or the API returns INVALID_REQUEST |
| `pricing` | per_request | No | No description |
| `rateLimit` | string | No | No description |

#### Output

Expand Down Expand Up @@ -378,8 +360,6 @@ Get a daily pollen forecast (grass, tree, weed) for a location
| `days` | number | No | Number of forecast days to return \(1-5, defaults to 1\) |
| `languageCode` | string | No | Language code for the response \(e.g., "en", "es"\) |
| `plantsDescription` | boolean | No | Include detailed plant descriptions \(defaults to true\) |
| `pricing` | per_request | No | No description |
| `rateLimit` | string | No | No description |

#### Output

Expand Down Expand Up @@ -413,8 +393,6 @@ Convert geographic coordinates (latitude and longitude) into a human-readable ad
| `lat` | number | Yes | Latitude coordinate |
| `lng` | number | Yes | Longitude coordinate |
| `language` | string | No | Language code for results \(e.g., en, es, fr\) |
| `pricing` | per_request | No | No description |
| `rateLimit` | string | No | No description |

#### Output

Expand All @@ -439,8 +417,6 @@ Snap GPS coordinates to the nearest road segment
| `apiKey` | string | Yes | Google Maps API key with Roads API enabled |
| `path` | string | Yes | Pipe-separated list of lat,lng coordinates \(e.g., "60.170880,24.942795\|60.170879,24.942796"\) |
| `interpolate` | boolean | No | Whether to interpolate additional points along the road |
| `pricing` | per_request | No | No description |
| `rateLimit` | string | No | No description |

#### Output

Expand All @@ -466,8 +442,6 @@ Get solar potential and panel insights for the building nearest a location
| `lat` | number | Yes | Latitude coordinate |
| `lng` | number | Yes | Longitude coordinate |
| `requiredQuality` | string | No | Minimum imagery quality to accept \(HIGH, MEDIUM, or BASE\) |
| `pricing` | per_request | No | No description |
| `rateLimit` | string | No | No description |

#### Output

Expand Down Expand Up @@ -525,8 +499,6 @@ Get timezone information for a location
| `lng` | number | Yes | Longitude coordinate |
| `timestamp` | number | No | Unix timestamp to determine DST offset \(defaults to current time\) |
| `language` | string | No | Language code for timezone name \(e.g., en, es, fr\) |
| `pricing` | per_request | No | No description |
| `rateLimit` | string | No | No description |

#### Output

Expand All @@ -552,8 +524,6 @@ Validate and standardize a postal address
| `regionCode` | string | No | ISO 3166-1 alpha-2 country code \(e.g., "US", "CA"\) |
| `locality` | string | No | City or locality name |
| `enableUspsCass` | boolean | No | Enable USPS CASS validation for US addresses |
| `pricing` | per_request | No | No description |
| `rateLimit` | string | No | No description |

#### Output

Expand Down
2 changes: 0 additions & 2 deletions apps/docs/content/docs/en/integrations/google_pagespeed.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,6 @@ Analyze a webpage for performance, accessibility, SEO, and best practices using
| `category` | string | No | Lighthouse categories to analyze \(comma-separated\): performance, accessibility, best-practices, seo |
| `strategy` | string | No | Analysis strategy: desktop or mobile |
| `locale` | string | No | Locale for results \(e.g., en, fr, de\) |
| `pricing` | per_request | No | No description |
| `rateLimit` | string | No | No description |

#### Output

Expand Down
Loading
Loading