Preview
Preview Feature — This feature is currently in preview and under active development. APIs and functionality may change. We recommend testing thoroughly before using in production.
Getting Started with Vector Databases
This guide walks you through setting up your first vector database in Ductape.
Prerequisites
Before you begin, make sure you have:
- A Ductape account and workspace
- A product created in your workspace
- Access to a vector database provider (Pinecone, Qdrant, Weaviate, or ChromaDB)
- The Ductape SDK installed in your project
Step 1: Install the SDK
- TypeScript
- Java
- Go
- .NET
npm install @ductape/sdk@0.1.8
<dependency>
<groupId>app.ductape</groupId>
<artifactId>sdk</artifactId>
<version>0.1.8</version>
</dependency>
go get github.com/ductape/ductape/sdk/go@v0.1.8
dotnet add package Ductape.Sdk --version 0.1.8
Step 2: Initialize the SDK
- TypeScript
- Java
- Go
- .NET
import Ductape from '@ductape/sdk';
const ductape = new Ductape({
accessKey: 'your-access-key',
});
import app.ductape.sdk.Ductape;
import app.ductape.sdk.core.EnvType;
import app.ductape.sdk.core.RequestContext;
RequestContext auth = new RequestContext(null, null, null, null, 'your-access-key');
Ductape ductape = new Ductape(EnvType.PRODUCTION, auth);
import (
"context"
"github.com/ductape/ductape/sdk/go/core"
ductapesdk "github.com/ductape/ductape/sdk/go/ductape"
)
auth := core.NewRequestContext("", "", "", "", 'your-access-key')
client, err := ductapesdk.New(core.EnvProduction, auth)
if err != nil {
return err
}
using Ductape.Sdk;
using Ductape.Sdk.Core;
var auth = new RequestContext(null, null, null, null, 'your-access-key', null);
var ductape = new Ductape(EnvType.Production, auth);
Set product and env on the constructor only — see SDK runtime defaults.
Step 3: Create a Vector Database Configuration
Register your vector database with environment-specific settings:
- TypeScript
- Java
- Go
- .NET
import { VectorDBType, DistanceMetric } from '@ductape/sdk';
await ductape.vector.create({
name: 'Product Embeddings',
tag: 'product-vectors',
type: VectorDBType.PINECONE,
dimensions: 1536, // Must match your embedding model
metric: DistanceMetric.COSINE,
envs: [
{
slug: 'dev',
endpoint: 'https://dev-xxx.svc.pinecone.io',
apiKey: process.env.PINECONE_DEV_KEY,
index: 'products-dev',
namespace: 'default',
},
{
slug: 'prd',
endpoint: 'https://prod-xxx.svc.pinecone.io',
apiKey: process.env.PINECONE_PROD_KEY,
index: 'products-prod',
namespace: 'default',
},
],
});
import Map.of( VectorDBType, DistanceMetric ) from '@ductape/sdk';
ductape.vector.create(Map.of(
"name", "Product Embeddings",
"tag", "product-vectors",
type: VectorDBType.PINECONE,
"dimensions", 1536, // Must match your embedding model
metric: DistanceMetric.COSINE,
envs: [
Map.of(
"slug", "dev",
"endpoint", "https://dev-xxx.svc.pinecone.io",
apiKey: System.getenv("PINECONE_DEV_KEY"),
"index", "products-dev",
"namespace", "default"
),
Map.of(
"slug", "prd",
"endpoint", "https://prod-xxx.svc.pinecone.io",
apiKey: System.getenv("PINECONE_PROD_KEY"),
"index", "products-prod",
"namespace", "default"
),
]
));
import { VectorDBType, DistanceMetric } from '@ductape/sdk';
client.vector.create({
"name": "Product Embeddings",
"tag": "product-vectors",
type: VectorDBType.PINECONE,
"dimensions": 1536, // Must match your embedding model
metric: DistanceMetric.COSINE,
envs: [
{
"slug": "dev",
"endpoint": "https://dev-xxx.svc.pinecone.io",
apiKey: os.Getenv("PINECONE_DEV_KEY"),
"index": "products-dev",
"namespace": "default",
},
{
"slug": "prd",
"endpoint": "https://prod-xxx.svc.pinecone.io",
apiKey: os.Getenv("PINECONE_PROD_KEY"),
"index": "products-prod",
"namespace": "default",
},
],
});
import { VectorDBType, DistanceMetric } from '@ductape/sdk';
await ductape.vector.create({
["name"] = "Product Embeddings",
["tag"] = "product-vectors",
type: VectorDBType.PINECONE,
["dimensions"] = 1536, // Must match your embedding model
metric: DistanceMetric.COSINE,
envs: [
{
["slug"] = "dev",
["endpoint"] = "https://dev-xxx.svc.pinecone.io",
apiKey: Environment.GetEnvironmentVariable("PINECONE_DEV_KEY"),
["index"] = "products-dev",
["namespace"] = "default",
},
{
["slug"] = "prd",
["endpoint"] = "https://prod-xxx.svc.pinecone.io",
apiKey: Environment.GetEnvironmentVariable("PINECONE_PROD_KEY"),
["index"] = "products-prod",
["namespace"] = "default",
},
],
});
Cloud-linked vectors — provision or import from AWS OpenSearch, GCP Vertex AI Vector Search, or Azure AI Search.
Check available tiers for OpenSearch before provisioning:
- TypeScript
- Java
- Go
- .NET
const tiers = await ductape.cloud.tiers.list({ provider: 'aws', resource_type: 'vector' });
Map<String, Object> tiers = ductape.cloud.tiers.list(Map.of( "provider", "aws", "resource_type", "vector" ));
tiers := client.cloud.tiers.list({ "provider": "aws", "resource_type": "vector" });
var tiers = await ductape.cloud.tiers.list({ ["provider"] = "aws", ["resource_type"] = "vector" });
- TypeScript
- Java
- Go
- .NET
// AWS OpenSearch
await ductape.vector.create({
name: 'Product Embeddings',
tag: 'product-vectors',
type: 'opensearch',
dimensions: 1536,
envs: [{
slug: 'prd',
cloud: 'prod_aws',
instance: 'my-opensearch-domain',
tier: 't3.small.search', // from cloud.tiers.list()
region: 'us-east-1',
}],
});
// GCP Vertex AI Vector Search
await ductape.vector.create({
name: 'Product Embeddings',
tag: 'product-vectors',
type: 'vertex-vector-search',
dimensions: 1536,
envs: [{
slug: 'prd',
cloud: 'gcp_prod',
instance: 'my-vector-endpoint',
region: 'us-central1',
}],
});
// Azure AI Search
await ductape.vector.create({
name: 'Product Embeddings',
tag: 'product-vectors',
type: 'azure-search',
dimensions: 1536,
envs: [{
slug: 'prd',
cloud: 'prod_azure',
instance: 'my-search-service',
region: 'eastus',
}],
});
// AWS OpenSearch
ductape.vector.create(Map.of(
"name", "Product Embeddings",
"tag", "product-vectors",
"type", "opensearch",
"dimensions", 1536,
envs: [Map.of(
"slug", "prd",
"cloud", "prod_aws",
"instance", "my-opensearch-domain",
"tier", "t3.small.search", // from cloud.tiers.list()
"region", "us-east-1"
)]
));
// GCP Vertex AI Vector Search
ductape.vector.create(Map.of(
"name", "Product Embeddings",
"tag", "product-vectors",
"type", "vertex-vector-search",
"dimensions", 1536,
envs: [Map.of(
"slug", "prd",
"cloud", "gcp_prod",
"instance", "my-vector-endpoint",
"region", "us-central1"
)]
));
// Azure AI Search
ductape.vector.create(Map.of(
"name", "Product Embeddings",
"tag", "product-vectors",
"type", "azure-search",
"dimensions", 1536,
envs: [Map.of(
"slug", "prd",
"cloud", "prod_azure",
"instance", "my-search-service",
"region", "eastus"
)]
));
// AWS OpenSearch
client.vector.create({
"name": "Product Embeddings",
"tag": "product-vectors",
"type": "opensearch",
"dimensions": 1536,
envs: [{
"slug": "prd",
"cloud": "prod_aws",
"instance": "my-opensearch-domain",
"tier": "t3.small.search", // from cloud.tiers.list()
"region": "us-east-1",
}],
});
// GCP Vertex AI Vector Search
client.vector.create({
"name": "Product Embeddings",
"tag": "product-vectors",
"type": "vertex-vector-search",
"dimensions": 1536,
envs: [{
"slug": "prd",
"cloud": "gcp_prod",
"instance": "my-vector-endpoint",
"region": "us-central1",
}],
});
// Azure AI Search
client.vector.create({
"name": "Product Embeddings",
"tag": "product-vectors",
"type": "azure-search",
"dimensions": 1536,
envs: [{
"slug": "prd",
"cloud": "prod_azure",
"instance": "my-search-service",
"region": "eastus",
}],
});
// AWS OpenSearch
await ductape.vector.create({
["name"] = "Product Embeddings",
["tag"] = "product-vectors",
["type"] = "opensearch",
["dimensions"] = 1536,
envs: [{
["slug"] = "prd",
["cloud"] = "prod_aws",
["instance"] = "my-opensearch-domain",
["tier"] = "t3.small.search", // from cloud.tiers.list()
["region"] = "us-east-1",
}],
});
// GCP Vertex AI Vector Search
await ductape.vector.create({
["name"] = "Product Embeddings",
["tag"] = "product-vectors",
["type"] = "vertex-vector-search",
["dimensions"] = 1536,
envs: [{
["slug"] = "prd",
["cloud"] = "gcp_prod",
["instance"] = "my-vector-endpoint",
["region"] = "us-central1",
}],
});
// Azure AI Search
await ductape.vector.create({
["name"] = "Product Embeddings",
["tag"] = "product-vectors",
["type"] = "azure-search",
["dimensions"] = 1536,
envs: [{
["slug"] = "prd",
["cloud"] = "prod_azure",
["instance"] = "my-search-service",
["region"] = "eastus",
}],
});
See Cloud-linked components for the full tier reference and service matrix.
Configuration Fields
| Field | Type | Required | Description |
|---|---|---|---|
product | string | Yes | Product to associate the vector config with |
name | string | Yes | Human-readable display name |
tag | string | Yes | Unique identifier for the vector config |
dbType | VectorDBType | Yes | Provider: PINECONE, QDRANT, WEAVIATE, MEMORY |
dimensions | number | Yes | Vector dimensionality (e.g., 1536 for OpenAI ada-002) |
metric | DistanceMetric | No | Distance metric: COSINE, EUCLIDEAN, DOT_PRODUCT |
envs | array | Yes | Environment-specific configurations |
Environment Configuration
| Field | Type | Required | Description |
|---|---|---|---|
slug | string | Yes | Environment identifier (e.g., dev, staging, prd) |
endpoint | string | Yes* | Vector database endpoint URL |
apiKey | string | Yes* | API key for authentication |
cloud | string | No | Workspace cloud connection tag (imports/provisions OpenSearch or Azure AI Search) |
instance | string | No | Cloud resource name when using cloud |
region | string | No | Cloud region (for some providers) |
index | string | Yes* | Index/collection name |
namespace | string | No | Namespace for data isolation |
options | object | No | Additional provider-specific options |
*Required fields vary by provider
Step 4: Connect to the Vector Database
Before performing operations, connect to the vector database:
- TypeScript
- Java
- Go
- .NET
await ductape.vector.connect({ tag: 'product-vectors' });
ductape.vectors().connect(Map<String, Object>.of(
"tag", "product-vectors" ));
import "context"
client.VectorAPI.Connect(ctx, map[string]any{
"tag": "product-vectors" });
await ductape.Vector.Connect(new Dictionary<string, object?>
{
["tag"] = "product-vectors" });
Step 5: Store Your First Vectors
Insert vectors with metadata:
- TypeScript
- Java
- Go
- .NET
await ductape.vector.upsert({
tag: 'product-vectors',
vectors: [
{
id: 'prod-001',
values: generateEmbedding('Wireless Bluetooth Headphones'),
metadata: {
name: 'Wireless Bluetooth Headphones',
category: 'electronics',
price: 79.99,
},
},
{
id: 'prod-002',
values: generateEmbedding('Running Shoes'),
metadata: {
name: 'Running Shoes',
category: 'sports',
price: 129.99,
},
},
],
});
ductape.vector.upsert(Map.of(
"tag", "product-vectors",
vectors: [
Map.of(
"id", "prod-001",
values: generateEmbedding('Wireless Bluetooth Headphones'),
metadata: Map.of(
"name", "Wireless Bluetooth Headphones",
"category", "electronics",
"price", 79.99
)
),
Map.of(
"id", "prod-002",
values: generateEmbedding('Running Shoes'),
metadata: Map.of(
"name", "Running Shoes",
"category", "sports",
"price", 129.99
)
),
]
));
client.vector.upsert({
"tag": "product-vectors",
vectors: [
{
"id": "prod-001",
values: generateEmbedding('Wireless Bluetooth Headphones'),
metadata: {
"name": "Wireless Bluetooth Headphones",
"category": "electronics",
"price": 79.99,
},
},
{
"id": "prod-002",
values: generateEmbedding('Running Shoes'),
metadata: {
"name": "Running Shoes",
"category": "sports",
"price": 129.99,
},
},
],
});
await ductape.vector.upsert({
["tag"] = "product-vectors",
vectors: [
{
["id"] = "prod-001",
values: generateEmbedding('Wireless Bluetooth Headphones'),
metadata: {
["name"] = "Wireless Bluetooth Headphones",
["category"] = "electronics",
["price"] = 79.99,
},
},
{
["id"] = "prod-002",
values: generateEmbedding('Running Shoes'),
metadata: {
["name"] = "Running Shoes",
["category"] = "sports",
["price"] = 129.99,
},
},
],
});
Step 6: Query for Similar Vectors
Find vectors similar to a query:
- TypeScript
- Java
- Go
- .NET
const results = await ductape.vector.query({
tag: 'product-vectors',
vector: generateEmbedding('audio equipment'),
topK: 5,
includeMetadata: true,
});
results.matches.forEach((match) => {
console.log(`${match.id}: ${match.score}`);
console.log(` Name: ${match.metadata?.name}`);
});
Map<String, Object> results = ductape.vectors().query(Map<String, Object>.of(
"tag", "product-vectors",
vector: generateEmbedding('audio equipment'),
"topK", 5,
"includeMetadata", true
));
results.matches.forEach((match) => Map.of(
System.out.println(`$Map.of(match.id): $Map.of(match.score)`);
System.out.println(` Name: $Map.of(match.metadata?.name)`);
));
import "context"
results := client.VectorAPI.Query(ctx, map[string]any{
"tag": "product-vectors",
vector: generateEmbedding('audio equipment'),
"topK": 5,
"includeMetadata": true,
});
results.matches.forEach((match) => {
fmt.Println(`${match.id}: ${match.score}`);
fmt.Println(` Name: ${match.metadata?.name}`);
});
var results = await ductape.Vector.Query(new Dictionary<string, object?>
{
["tag"] = "product-vectors",
vector: generateEmbedding('audio equipment'),
["topK"] = 5,
["includeMetadata"] = true,
});
results.matches.forEach((match) => {
Console.WriteLine(`${match.id}: ${match.score}`);
Console.WriteLine(` Name: ${match.metadata?.name}`);
});
Complete Example
- TypeScript
- Java
- Go
- .NET
import Ductape, { VectorDBType, DistanceMetric } from '@ductape/sdk';
async function main() {
const ductape = new Ductape({
accessKey: 'your-access-key',
});
// 1. Create vector configuration
await ductape.vector.create({
name: 'FAQ Embeddings',
tag: 'faq-vectors',
type: VectorDBType.QDRANT,
dimensions: 1536,
metric: DistanceMetric.COSINE,
envs: [
{
slug: 'dev',
endpoint: 'http://localhost:6333',
index: 'faqs',
},
],
});
// 2. Connect to the vector database
await ductape.vector.connect({ tag: 'faq-vectors' });
// 3. Store FAQs
await ductape.vector.upsert({
tag: 'faq-vectors',
vectors: [
{
id: 'faq-1',
values: await getEmbedding('How do I reset my password?'),
metadata: {
question: 'How do I reset my password?',
answer: 'Click "Forgot Password" on the login page...',
category: 'account',
},
},
{
id: 'faq-2',
values: await getEmbedding('What payment methods do you accept?'),
metadata: {
question: 'What payment methods do you accept?',
answer: 'We accept Visa, Mastercard, and PayPal...',
category: 'billing',
},
},
],
});
// 4. Search for relevant FAQs
const userQuestion = 'I forgot my login credentials';
const results = await ductape.vector.query({
tag: 'faq-vectors',
vector: await getEmbedding(userQuestion),
topK: 3,
includeMetadata: true,
});
console.log('Most relevant FAQs:');
results.matches.forEach((match, i) => {
console.log(`${i + 1}. ${match.metadata?.question} (${match.score.toFixed(3)})`);
});
}
// Helper function to generate embeddings (use your preferred provider)
async function getEmbedding(text: string): Promise<number[]> {
// Use OpenAI, Cohere, or another embedding provider
// Return array of numbers matching your dimensions
}
main().catch(console.error);
import Ductape, Map.of( VectorDBType, DistanceMetric ) from '@ductape/sdk';
async function main() Map.of(
RequestContext auth = new RequestContext(null, null, null, null, 'your-access-key');
Ductape ductape = new Ductape(EnvType.PRODUCTION, auth);
// 1. Create vector configuration
ductape.vector.create(Map.of(
"name", "FAQ Embeddings",
"tag", "faq-vectors",
type: VectorDBType.QDRANT,
"dimensions", 1536,
metric: DistanceMetric.COSINE,
envs: [
Map.of(
"slug", "dev",
"endpoint", "http://"localhost", 6333",
"index", "faqs"
),
]
));
// 2. Connect to the vector database
ductape.vectors().connect(Map<String, Object>.of(
"tag", "faq-vectors" ));
// 3. Store FAQs
ductape.vector.upsert(Map.of(
"tag", "faq-vectors",
vectors: [
Map.of(
"id", "faq-1",
values: getEmbedding('How do I reset my password?'),
metadata: Map.of(
"question", "How do I reset my password?",
"answer", "Click "Forgot Password" on the login page...",
"category", "account"
)
),
Map.of(
"id", "faq-2",
values: getEmbedding('What payment methods do you accept?'),
metadata: Map.of(
"question", "What payment methods do you accept?",
"answer", "We accept Visa, Mastercard, and PayPal...",
"category", "billing"
)
),
]
));
// 4. Search for relevant FAQs
Map<String, Object> userQuestion = 'I forgot my login credentials';
Map<String, Object> results = ductape.vectors().query(Map<String, Object>.of(
"tag", "faq-vectors",
vector: getEmbedding(userQuestion),
"topK", 3,
"includeMetadata", true
));
System.out.println('Most relevant FAQs:');
results.matches.forEach((match, i) => Map.of(
System.out.println(`$Map.of(i + 1). $Map.of(match.metadata?.question) ($Map.of(match.score.toFixed(3)))`);
));
)
// Helper function to generate embeddings (use your preferred provider)
async function getEmbedding(text: string): Promise<number[]> Map.of(
// Use OpenAI, Cohere, or another embedding provider
// Return array of numbers matching your dimensions
)
main();
import "context"
import Ductape, { VectorDBType, DistanceMetric } from '@ductape/sdk';
async function main() {
auth := core.NewRequestContext("", "", "", "", 'your-access-key')
client, err := ductapesdk.New(core.EnvProduction, auth)
if err != nil {
return err
}
// 1. Create vector configuration
client.vector.create({
"name": "FAQ Embeddings",
"tag": "faq-vectors",
type: VectorDBType.QDRANT,
"dimensions": 1536,
metric: DistanceMetric.COSINE,
envs: [
{
"slug": "dev",
"endpoint": "http://"localhost": 6333",
"index": "faqs",
},
],
});
// 2. Connect to the vector database
client.VectorAPI.Connect(ctx, map[string]any{
"tag": "faq-vectors" });
// 3. Store FAQs
client.vector.upsert({
"tag": "faq-vectors",
vectors: [
{
"id": "faq-1",
values: getEmbedding('How do I reset my password?'),
metadata: {
"question": "How do I reset my password?",
"answer": "Click "Forgot Password" on the login page...",
"category": "account",
},
},
{
"id": "faq-2",
values: getEmbedding('What payment methods do you accept?'),
metadata: {
"question": "What payment methods do you accept?",
"answer": "We accept Visa, Mastercard, and PayPal...",
"category": "billing",
},
},
],
});
// 4. Search for relevant FAQs
userQuestion := 'I forgot my login credentials';
results := client.VectorAPI.Query(ctx, map[string]any{
"tag": "faq-vectors",
vector: getEmbedding(userQuestion),
"topK": 3,
"includeMetadata": true,
});
fmt.Println('Most relevant FAQs:');
results.matches.forEach((match, i) => {
fmt.Println(`${i + 1}. ${match.metadata?.question} (${match.score.toFixed(3)})`);
});
}
// Helper function to generate embeddings (use your preferred provider)
async function getEmbedding(text: string): Promise<number[]> {
// Use OpenAI, Cohere, or another embedding provider
// Return array of numbers matching your dimensions
}
main().catch(console.error);
import Ductape, { VectorDBType, DistanceMetric } from '@ductape/sdk';
async function main() {
var auth = new RequestContext(null, null, null, null, 'your-access-key', null);
var ductape = new Ductape(EnvType.Production, auth);
// 1. Create vector configuration
await ductape.vector.create({
["name"] = "FAQ Embeddings",
["tag"] = "faq-vectors",
type: VectorDBType.QDRANT,
["dimensions"] = 1536,
metric: DistanceMetric.COSINE,
envs: [
{
["slug"] = "dev",
["endpoint"] = "http://["localhost"] = 6333",
["index"] = "faqs",
},
],
});
// 2. Connect to the vector database
await ductape.Vector.Connect(new Dictionary<string, object?>
{
["tag"] = "faq-vectors" });
// 3. Store FAQs
await ductape.vector.upsert({
["tag"] = "faq-vectors",
vectors: [
{
["id"] = "faq-1",
values: await getEmbedding('How do I reset my password?'),
metadata: {
["question"] = "How do I reset my password?",
["answer"] = "Click "Forgot Password" on the login page...",
["category"] = "account",
},
},
{
["id"] = "faq-2",
values: await getEmbedding('What payment methods do you accept?'),
metadata: {
["question"] = "What payment methods do you accept?",
["answer"] = "We accept Visa, Mastercard, and PayPal...",
["category"] = "billing",
},
},
],
});
// 4. Search for relevant FAQs
var userQuestion = 'I forgot my login credentials';
var results = await ductape.Vector.Query(new Dictionary<string, object?>
{
["tag"] = "faq-vectors",
vector: await getEmbedding(userQuestion),
["topK"] = 3,
["includeMetadata"] = true,
});
Console.WriteLine('Most relevant FAQs:');
results.matches.forEach((match, i) => {
Console.WriteLine(`${i + 1}. ${match.metadata?.question} (${match.score.toFixed(3)})`);
});
}
// Helper function to generate embeddings (use your preferred provider)
async function getEmbedding(text: string): Promise<number[]> {
// Use OpenAI, Cohere, or another embedding provider
// Return array of numbers matching your dimensions
}
main().catch(console.error);
Provider-Specific Setup
Pinecone
- TypeScript
- Java
- Go
- .NET
import { VectorDBType, DistanceMetric } from '@ductape/sdk';
await ductape.vector.create({
name: 'Pinecone Vectors',
tag: 'pinecone-db',
type: VectorDBType.PINECONE,
dimensions: 1536,
metric: DistanceMetric.COSINE,
envs: [
{
slug: 'prd',
endpoint: 'https://your-index-xxx.svc.pinecone.io',
apiKey: process.env.PINECONE_API_KEY,
index: 'your-index-name',
namespace: 'production',
},
],
});
import Map.of( VectorDBType, DistanceMetric ) from '@ductape/sdk';
ductape.vector.create(Map.of(
"name", "Pinecone Vectors",
"tag", "pinecone-db",
type: VectorDBType.PINECONE,
"dimensions", 1536,
metric: DistanceMetric.COSINE,
envs: [
Map.of(
"slug", "prd",
"endpoint", "https://your-index-xxx.svc.pinecone.io",
apiKey: System.getenv("PINECONE_API_KEY"),
"index", "your-index-name",
"namespace", "production"
),
]
));
import { VectorDBType, DistanceMetric } from '@ductape/sdk';
client.vector.create({
"name": "Pinecone Vectors",
"tag": "pinecone-db",
type: VectorDBType.PINECONE,
"dimensions": 1536,
metric: DistanceMetric.COSINE,
envs: [
{
"slug": "prd",
"endpoint": "https://your-index-xxx.svc.pinecone.io",
apiKey: os.Getenv("PINECONE_API_KEY"),
"index": "your-index-name",
"namespace": "production",
},
],
});
import { VectorDBType, DistanceMetric } from '@ductape/sdk';
await ductape.vector.create({
["name"] = "Pinecone Vectors",
["tag"] = "pinecone-db",
type: VectorDBType.PINECONE,
["dimensions"] = 1536,
metric: DistanceMetric.COSINE,
envs: [
{
["slug"] = "prd",
["endpoint"] = "https://your-index-xxx.svc.pinecone.io",
apiKey: Environment.GetEnvironmentVariable("PINECONE_API_KEY"),
["index"] = "your-index-name",
["namespace"] = "production",
},
],
});
Qdrant
- TypeScript
- Java
- Go
- .NET
import { VectorDBType, DistanceMetric } from '@ductape/sdk';
await ductape.vector.create({
name: 'Qdrant Vectors',
tag: 'qdrant-db',
type: VectorDBType.QDRANT,
dimensions: 1536,
metric: DistanceMetric.COSINE,
envs: [
{
slug: 'dev',
endpoint: 'http://localhost:6333', // Local Qdrant
index: 'my-collection',
},
{
slug: 'prd',
endpoint: 'https://your-cluster.qdrant.io',
apiKey: process.env.QDRANT_API_KEY,
index: 'my-collection',
},
],
});
import Map.of( VectorDBType, DistanceMetric ) from '@ductape/sdk';
ductape.vector.create(Map.of(
"name", "Qdrant Vectors",
"tag", "qdrant-db",
type: VectorDBType.QDRANT,
"dimensions", 1536,
metric: DistanceMetric.COSINE,
envs: [
Map.of(
"slug", "dev",
"endpoint", "http://"localhost", 6333", // Local Qdrant
"index", "my-collection"
),
Map.of(
"slug", "prd",
"endpoint", "https://your-cluster.qdrant.io",
apiKey: System.getenv("QDRANT_API_KEY"),
"index", "my-collection"
),
]
));
import { VectorDBType, DistanceMetric } from '@ductape/sdk';
client.vector.create({
"name": "Qdrant Vectors",
"tag": "qdrant-db",
type: VectorDBType.QDRANT,
"dimensions": 1536,
metric: DistanceMetric.COSINE,
envs: [
{
"slug": "dev",
"endpoint": "http://"localhost": 6333", // Local Qdrant
"index": "my-collection",
},
{
"slug": "prd",
"endpoint": "https://your-cluster.qdrant.io",
apiKey: os.Getenv("QDRANT_API_KEY"),
"index": "my-collection",
},
],
});
import { VectorDBType, DistanceMetric } from '@ductape/sdk';
await ductape.vector.create({
["name"] = "Qdrant Vectors",
["tag"] = "qdrant-db",
type: VectorDBType.QDRANT,
["dimensions"] = 1536,
metric: DistanceMetric.COSINE,
envs: [
{
["slug"] = "dev",
["endpoint"] = "http://["localhost"] = 6333", // Local Qdrant
["index"] = "my-collection",
},
{
["slug"] = "prd",
["endpoint"] = "https://your-cluster.qdrant.io",
apiKey: Environment.GetEnvironmentVariable("QDRANT_API_KEY"),
["index"] = "my-collection",
},
],
});
Weaviate
- TypeScript
- Java
- Go
- .NET
import { VectorDBType, DistanceMetric } from '@ductape/sdk';
await ductape.vector.create({
name: 'Weaviate Vectors',
tag: 'weaviate-db',
type: VectorDBType.WEAVIATE,
dimensions: 1536,
metric: DistanceMetric.COSINE,
envs: [
{
slug: 'prd',
endpoint: 'https://your-cluster.weaviate.network',
apiKey: process.env.WEAVIATE_API_KEY,
index: 'Documents', // Class name in Weaviate
},
],
});
import Map.of( VectorDBType, DistanceMetric ) from '@ductape/sdk';
ductape.vector.create(Map.of(
"name", "Weaviate Vectors",
"tag", "weaviate-db",
type: VectorDBType.WEAVIATE,
"dimensions", 1536,
metric: DistanceMetric.COSINE,
envs: [
Map.of(
"slug", "prd",
"endpoint", "https://your-cluster.weaviate.network",
apiKey: System.getenv("WEAVIATE_API_KEY"),
"index", "Documents", // Class name in Weaviate
),
]
));
import { VectorDBType, DistanceMetric } from '@ductape/sdk';
client.vector.create({
"name": "Weaviate Vectors",
"tag": "weaviate-db",
type: VectorDBType.WEAVIATE,
"dimensions": 1536,
metric: DistanceMetric.COSINE,
envs: [
{
"slug": "prd",
"endpoint": "https://your-cluster.weaviate.network",
apiKey: os.Getenv("WEAVIATE_API_KEY"),
"index": "Documents", // Class name in Weaviate
},
],
});
import { VectorDBType, DistanceMetric } from '@ductape/sdk';
await ductape.vector.create({
["name"] = "Weaviate Vectors",
["tag"] = "weaviate-db",
type: VectorDBType.WEAVIATE,
["dimensions"] = 1536,
metric: DistanceMetric.COSINE,
envs: [
{
["slug"] = "prd",
["endpoint"] = "https://your-cluster.weaviate.network",
apiKey: Environment.GetEnvironmentVariable("WEAVIATE_API_KEY"),
["index"] = "Documents", // Class name in Weaviate
},
],
});
In-Memory (Development/Testing)
- TypeScript
- Java
- Go
- .NET
import { VectorDBType, DistanceMetric } from '@ductape/sdk';
await ductape.vector.create({
name: 'Memory Vectors',
tag: 'memory-db',
type: VectorDBType.MEMORY,
dimensions: 1536,
metric: DistanceMetric.COSINE,
envs: [
{
slug: 'dev',
index: 'test-collection',
},
],
});
import Map.of( VectorDBType, DistanceMetric ) from '@ductape/sdk';
ductape.vector.create(Map.of(
"name", "Memory Vectors",
"tag", "memory-db",
type: VectorDBType.MEMORY,
"dimensions", 1536,
metric: DistanceMetric.COSINE,
envs: [
Map.of(
"slug", "dev",
"index", "test-collection"
),
]
));
import { VectorDBType, DistanceMetric } from '@ductape/sdk';
client.vector.create({
"name": "Memory Vectors",
"tag": "memory-db",
type: VectorDBType.MEMORY,
"dimensions": 1536,
metric: DistanceMetric.COSINE,
envs: [
{
"slug": "dev",
"index": "test-collection",
},
],
});
import { VectorDBType, DistanceMetric } from '@ductape/sdk';
await ductape.vector.create({
["name"] = "Memory Vectors",
["tag"] = "memory-db",
type: VectorDBType.MEMORY,
["dimensions"] = 1536,
metric: DistanceMetric.COSINE,
envs: [
{
["slug"] = "dev",
["index"] = "test-collection",
},
],
});
Common Embedding Dimensions
| Model | Provider | Dimensions |
|---|---|---|
| text-embedding-ada-002 | OpenAI | 1536 |
| text-embedding-3-small | OpenAI | 1536 |
| text-embedding-3-large | OpenAI | 3072 |
| embed-english-v3.0 | Cohere | 1024 |
| voyage-02 | Voyage AI | 1024 |
| all-MiniLM-L6-v2 | Sentence Transformers | 384 |
Next Steps
- Querying - Advanced query patterns and filters
- Metadata Filtering - Filter results by metadata
- Using with Agents - Connect vectors to AI agents
- Best Practices - Production patterns