Python JavaScript
Embeddings (JavaScript/TypeScript)¶
GraphBit provides vector embedding capabilities for semantic search, similarity analysis, and AI-powered text operations.
Overview¶
GraphBit's embedding system supports: - OpenAI Provider - OpenAI embedding models - HuggingFace Provider - HuggingFace embedding models - Unified Interface - Consistent API across providers - Batch Processing - Efficient processing of multiple texts
Configuration¶
OpenAI Configuration¶
import { EmbeddingConfig } from '@infinitibit_gmbh/graphbit';
const config = EmbeddingConfig.openai(
process.env.OPENAI_API_KEY || '',
'text-embedding-3-small' // Optional - defaults to text-embedding-3-small
);
HuggingFace Configuration¶
import { EmbeddingConfig } from '@infinitibit_gmbh/graphbit';
const config = EmbeddingConfig.huggingface(
process.env.HUGGINGFACE_API_KEY || '',
'sentence-transformers/all-MiniLM-L6-v2'
);
Basic Usage¶
Creating Embedding Client¶
import { EmbeddingClient, EmbeddingConfig } from '@infinitibit_gmbh/graphbit';
const config = EmbeddingConfig.openai(
process.env.OPENAI_API_KEY || ''
);
const client = new EmbeddingClient(config);
Batch Text Embeddings¶
import { EmbeddingClient, EmbeddingConfig } from '@infinitibit_gmbh/graphbit';
const client = new EmbeddingClient(
EmbeddingConfig.openai(process.env.OPENAI_API_KEY || '')
);
const texts = [
'Machine learning is transforming industries',
'Natural language processing enables computers to understand text',
'Deep learning models require large datasets'
];
const response = await client.embed(texts);
console.log(`Generated ${response.embeddings.length} embeddings`);
console.log(`Model: ${response.model}`);
console.log(`Usage: ${response.usage.totalTokens} tokens`);
for (let i = 0; i < response.embeddings.length; i++) {
const embedding = response.embeddings[i];
console.log(`Text ${i}: ${texts[i].substring(0, 50)}...`);
console.log(`Vector dimension: ${embedding.length}`);
}
Calculating Similarity¶
GraphBit provides a helper method to calculate cosine similarity between two embeddings.
import { EmbeddingClient } from '@infinitibit_gmbh/graphbit';
// ... obtain embeddings as emb1, emb2
const similarity = EmbeddingClient.similarity(emb1, emb2);
console.log(`Similarity score: ${similarity}`); // 0.0 to 1.0 (or -1.0 to 1.0)
Response Format¶
interface EmbeddingResponse {
embeddings: number[][]; // Array of embedding vectors
model: string; // Model used
usage: EmbeddingUsage; // Token usage stats
}
interface EmbeddingUsage {
promptTokens: number; // Prompt tokens used
totalTokens: number; // Total tokens used
}
Complete Example¶
import { EmbeddingClient, EmbeddingConfig } from '@infinitibit_gmbh/graphbit';
async function main() {
// Create client
const client = new EmbeddingClient(
EmbeddingConfig.openai(process.env.OPENAI_API_KEY || '')
);
// Texts to embed
const texts = [
'GraphBit is a high-performance AI agent framework',
'It provides workflow orchestration and agent management',
'The framework supports multiple LLM providers'
];
// Generate embeddings
const response = await client.embed(texts);
console.log('Embedding Results:');
console.log(` Model: ${response.model}`);
console.log(` Tokens used: ${response.usage.totalTokens}`);
console.log(` Generated ${response.embeddings.length} vectors`);
console.log(` Vector dimension: ${response.embeddings[0]?.length}`);
}
main().catch(console.error);
Integration with Text Splitters¶
import {
TextSplitter,
EmbeddingClient,
EmbeddingConfig
} from '@infinitibit_gmbh/graphbit';
async function embedDocument(text: string) {
// Split large document
const splitter = TextSplitter.recursive(1000, 100);
const chunks = splitter.split(text);
// Generate embeddings
const client = new EmbeddingClient(
EmbeddingConfig.openai(process.env.OPENAI_API_KEY || '')
);
const chunkTexts = chunks.map(chunk => chunk.content);
const response = await client.embed(chunkTexts);
// Combine chunks with embeddings
return chunks.map((chunk, i) => ({
content: chunk.content,
embedding: response.embeddings[i],
startIndex: chunk.startIndex,
endIndex: chunk.endIndex
}));
}