Python JavaScript
Configuration Options - JavaScript¶
GraphBit's JavaScript bindings provide extensive configuration options to customize workflow execution, LLM providers, reliability features, and performance settings.
Library Initialization¶
Basic Initialization¶
Advanced Initialization¶
import { init } from '@infinitibit_gmbh/graphbit';
// With debugging and logging
init({
logLevel: 'info', // Log level: trace, debug, info, warn, error
enableTracing: true, // Enable detailed tracing
debug: true // Enable debug mode (alias for enableTracing)
});
Runtime Configuration¶
Configure the runtime before initialization for advanced control:
import { configureRuntime, init } from '@infinitibit_gmbh/graphbit';
// Configure runtime (call before init)
configureRuntime({
workerThreads: 8, // Number of worker threads
maxBlockingThreads: 16, // Maximum blocking threads
threadStackSizeMb: 8 // Thread stack size in MB
});
// Then initialize
init();
LLM Configuration¶
OpenAI Configuration¶
import 'dotenv/config';
import { LlmConfig } from '@infinitibit_gmbh/graphbit';
// Basic OpenAI configuration
const openaiConfig = LlmConfig.openai({
apiKey: process.env.OPENAI_API_KEY || '',
model: 'gpt-4o-mini' // Optional, defaults to gpt-4o-mini
});
// With default model
const openaiConfigAlt = LlmConfig.openai({
apiKey: process.env.OPENAI_API_KEY || ''
});
Anthropic Configuration¶
import 'dotenv/config';
import { LlmConfig } from '@infinitibit_gmbh/graphbit';
// Basic Anthropic configuration
const anthropicConfig = LlmConfig.anthropic({
apiKey: process.env.ANTHROPIC_API_KEY || '',
model: 'claude-sonnet-4-20250514' // Optional, defaults to claude-sonnet-4-20250514
});
// With default model
const anthropicConfigAlt = LlmConfig.anthropic({
apiKey: process.env.ANTHROPIC_API_KEY || ''
});
Azure OpenAI Configuration¶
import 'dotenv/config';
import { LlmConfig } from '@infinitibit_gmbh/graphbit';
// Basic Azure OpenAI configuration
const azureConfig = LlmConfig.azureOpenai({
apiKey: process.env.AZURE_OPENAI_API_KEY || '',
deploymentName: 'gpt-4o-mini', // Your Azure deployment name
endpoint: process.env.AZURE_OPENAI_ENDPOINT || '' // Your Azure OpenAI endpoint
});
// With custom API version
const azureConfigCustom = LlmConfig.azureOpenai({
apiKey: process.env.AZURE_OPENAI_API_KEY || '',
deploymentName: 'gpt-4o',
endpoint: process.env.AZURE_OPENAI_ENDPOINT || '',
apiVersion: '2024-10-21' // Optional, defaults to '2024-10-21'
});
Perplexity Configuration¶
[!IMPORTANT] The
modelparameter is required for Perplexity.
import 'dotenv/config';
import { LlmConfig } from '@infinitibit_gmbh/graphbit';
// Perplexity configuration
const perplexityConfig = LlmConfig.perplexity({
apiKey: process.env.PERPLEXITY_API_KEY || '',
model: 'llama-3.1-sonar-small-128k-online' // Required
});
// Different models for specific use cases
const researchConfig = LlmConfig.perplexity({
apiKey: process.env.PERPLEXITY_API_KEY || '',
model: 'llama-3.1-sonar-large-128k-online'
});
DeepSeek Configuration¶
import 'dotenv/config';
import { LlmConfig } from '@infinitibit_gmbh/graphbit';
// Basic DeepSeek configuration
const llmConfig = LlmConfig.deepseek({
apiKey: 'your-deepseek-key',
model: 'deepseek-chat' // Optional, defaults to deepseek-chat
});
// With default model
const llmConfig = LlmConfig.deepseek({ apiKey: 'your-deepseek-key' });
// Different models for specific use cases
const codingConfig = LlmConfig.deepseek({ apiKey: 'your-deepseek-key', model: 'deepseek-coder' });
const reasoningConfig = LlmConfig.deepseek({ apiKey: 'your-deepseek-key', model: 'deepseek-reasoner' });
MistralAI Configuration¶
[!IMPORTANT] The
modelparameter is required for MistralAI.
import 'dotenv/config';
import { LlmConfig } from '@infinitibit_gmbh/graphbit';
// MistralAI configuration
const mistralConfig = LlmConfig.mistralai({
apiKey: process.env.MISTRALAI_API_KEY || '',
model: 'mistral-large-latest' // Required
});
// Different models for specific use cases
const largeConfig = LlmConfig.mistralai({
apiKey: process.env.MISTRALAI_API_KEY || '',
model: 'mistral-large-latest' // Most capable
});
const mediumConfig = LlmConfig.mistralai({
apiKey: process.env.MISTRALAI_API_KEY || '',
model: 'mistral-medium-latest' // Balanced
});
const smallConfig = LlmConfig.mistralai({
apiKey: process.env.MISTRALAI_API_KEY || '',
model: 'mistral-small-latest' // Fastest
});
Ollama Configuration¶
[!IMPORTANT] The
modelparameter is required for Ollama. Make sure the model is pulled locally withollama pull <model-name>before use.
import 'dotenv/config';
import { LlmConfig } from '@infinitibit_gmbh/graphbit';
// Local Ollama configuration
const ollamaConfig = LlmConfig.ollama({
model: 'llama3.2' // Required
});
// With custom Ollama server
const ollamaCustomConfig = LlmConfig.ollama({
model: 'llama3.2',
baseUrl: 'http://localhost:11434' // Optional, defaults to http://localhost:11434
});
// Different models
const codingConfig = LlmConfig.ollama({ model: 'codellama' });
const chatConfig = LlmConfig.ollama({ model: 'mistral' });
OpenRouter Configuration¶
import 'dotenv/config';
import { LlmConfig } from '@infinitibit_gmbh/graphbit';
// OpenRouter configuration
const llmConfig = LlmConfig.openrouter({
apiKey: 'your-openrouter-key',
model: 'anthropic/claude-3.5-sonnet' // Model identifier
});
Configuration Properties¶
// Access configuration properties
const provider = llmConfig.provider(); // 'openai', 'azure_openai', 'anthropic', etc.
const model = llmConfig.model(); // Model name
LLM Client Configuration¶
Basic Client¶
import { LlmConfig, LlmClient } from '@infinitibit_gmbh/graphbit';
// Simple client
const llmConfig = LlmConfig.openai({ apiKey: 'your-api-key' });
const client = new LlmClient(llmConfig);
Client with Debug Mode¶
import { LlmConfig, LlmClient } from '@infinitibit_gmbh/graphbit';
// Client with debugging enabled
const llmConfig = LlmConfig.openai({ apiKey: 'your-api-key' });
const client = new LlmClient(llmConfig, { debug: true });
Client Statistics and Monitoring¶
// Get performance statistics
const stats = client.getStats();
console.log(`Total requests: ${stats.totalRequests}`);
console.log(`Success rate: ${stats.successRate}`);
console.log(`Average response time: ${stats.averageResponseTimeMs}ms`);
// Reset statistics
client.resetStats();
// Warm up client for better performance
await client.warmup();
Executor Configuration¶
Basic Executor¶
import { LlmConfig, Executor } from '@infinitibit_gmbh/graphbit';
// Simple executor
const llmConfig = LlmConfig.openai({ apiKey: 'your-api-key' });
const executor = new Executor(llmConfig);
Executor with Options¶
import { LlmConfig, Executor } from '@infinitibit_gmbh/graphbit';
// Executor with configuration
const llmConfig = LlmConfig.openai({ apiKey: 'your-api-key' });
const executor = new Executor(llmConfig, {
lightweightMode: false, // Enable lightweight/low-latency mode
timeoutSeconds: 300, // Execution timeout (1-3600 seconds)
debug: true // Enable debug mode
});
Specialized Executors¶
High Throughput Executor¶
import { Executor, LlmConfig } from '@infinitibit_gmbh/graphbit';
// Optimized for high throughput
const executor = Executor.newHighThroughput(llmConfig, {
timeoutSeconds: 600, // Optional timeout override
debug: false // Optional debug mode
});
Low Latency Executor¶
import { Executor, LlmConfig } from '@infinitibit_gmbh/graphbit';
// Optimized for low latency
const executor = Executor.newLowLatency(llmConfig, {
timeoutSeconds: 30, // Shorter timeout for low latency
debug: false
});
Balanced Executor¶
import { Executor, LlmConfig } from '@infinitibit_gmbh/graphbit';
// Balanced configuration
const executor = Executor.newBalanced(llmConfig, {
timeoutSeconds: 120,
debug: false
});
Runtime Configuration¶
// Configure executor settings
executor.configure({
timeoutSeconds: 600, // Execution timeout (1-3600 seconds)
maxRetries: 5, // Maximum retries (0-10)
enableMetrics: true, // Enable performance metrics
debug: false // Debug mode
});
// Legacy configuration methods
executor.setLightweightMode(true); // Enable lightweight mode
const isLightweight = executor.isLightweightMode(); // Check mode
Executor Statistics¶
// Get execution statistics
const stats = executor.getStats();
console.log(`Total executions: ${stats.totalExecutions}`);
console.log(`Success rate: ${stats.successRate}`);
console.log(`Average duration: ${stats.averageDurationMs}ms`);
console.log(`Execution mode: ${stats.executionMode}`);
// Reset statistics
executor.resetStats();
// Get current execution mode
const mode = executor.getExecutionMode(); // Returns: HighThroughput, LowLatency, etc.
Embeddings Configuration¶
OpenAI Embeddings¶
import { EmbeddingConfig } from '@infinitibit_gmbh/graphbit';
// OpenAI embeddings configuration
const embedConfig = EmbeddingConfig.openai({
apiKey: 'your-api-key',
model: 'text-embedding-3-small' // Optional, defaults to text-embedding-3-small
});
// With default model
const embedConfig = EmbeddingConfig.openai({ apiKey: 'your-api-key' });
Embeddings Client¶
import { EmbeddingConfig, EmbeddingClient } from '@infinitibit_gmbh/graphbit';
// Create embeddings client
const embedConfig = EmbeddingConfig.openai({ apiKey: 'your-api-key' });
const embedClient = new EmbeddingClient(embedConfig);
// Generate single embedding
const embedding = await embedClient.embed('Hello world');
// Generate multiple embeddings
const embeddings = await embedClient.embedMany(['Text 1', 'Text 2']);
// Calculate similarity
const similarity = EmbeddingClient.similarity(embedding1, embedding2);
Environment Variables¶
Required Environment Variables¶
# OpenAI
export OPENAI_API_KEY="your-openai-api-key"
# Anthropic
export ANTHROPIC_API_KEY="your-anthropic-api-key"
GraphBit-Specific Environment Variables¶
# Runtime configuration
export GRAPHBIT_WORKER_THREADS="8"
export GRAPHBIT_MAX_BLOCKING_THREADS="16"
# Logging
export GRAPHBIT_LOG_LEVEL="INFO"
export GRAPHBIT_DEBUG="true"
System Information and Health¶
System Information¶
import { getSystemInfo } from '@infinitibit_gmbh/graphbit';
// Get comprehensive system information
const info = getSystemInfo();
console.log(`Version: ${info.version}`);
console.log(`CPU count: ${info.cpuCount}`);
console.log(`Runtime initialized: ${info.runtimeInitialized}`);
console.log(`Worker threads: ${info.runtimeWorkerThreads}`);
console.log(`Memory allocator: ${info.memoryAllocator}`);
Health Checks¶
import { healthCheck } from '@infinitibit_gmbh/graphbit';
// Perform health check
const health = healthCheck();
if (health.overallHealthy) {
console.log('✅ System is healthy');
console.log(`Memory healthy: ${health.memoryHealthy}`);
console.log(`Runtime healthy: ${health.runtimeHealthy}`);
} else {
console.log('❌ System has issues');
}
Version Information¶
import { version } from '@infinitibit_gmbh/graphbit';
// Get current version
const graphbitVersion = version();
console.log(`GraphBit version: ${graphbitVersion}`);
Configuration Examples¶
Development Configuration¶
import { init, LlmConfig, Executor } from '@infinitibit_gmbh/graphbit';
function createDevConfig(): Executor {
// Initialize with debugging
init({ debug: true, logLevel: 'info' });
// Use faster, cheaper model for development
const config = LlmConfig.openai({
apiKey: process.env.OPENAI_API_KEY || '',
model: 'gpt-4o-mini'
});
// Low-latency executor for development
const executor = Executor.newLowLatency(config, {
timeoutSeconds: 60,
debug: true
});
return executor;
}
Production Configuration¶
import { init, LlmConfig, Executor } from '@infinitibit_gmbh/graphbit';
function createProdConfig(): Executor {
// Initialize without debugging
init({ debug: false, logLevel: 'warn' });
// High-quality model for production
const config = LlmConfig.openai({
apiKey: process.env.OPENAI_API_KEY || '',
model: 'gpt-4o-mini'
});
// High-throughput executor for production
const executor = Executor.newHighThroughput(config, {
timeoutSeconds: 300,
debug: false
});
// Configure for production reliability
executor.configure({
timeoutSeconds: 300,
maxRetries: 3,
enableMetrics: true,
debug: false
});
return executor;
}
Local Development Configuration¶
import { init, LlmConfig, Executor } from '@infinitibit_gmbh/graphbit';
function createLocalConfig(): Executor {
init({ debug: true, logLevel: 'debug' });
// Use local Ollama
const config = LlmConfig.ollama({ model: 'llama3.2' });
// Low-latency for quick iteration
const executor = Executor.newLowLatency(config, {
timeoutSeconds: 180, // Longer timeout for local inference
debug: true
});
return executor;
}
Configuration Validation¶
Environment Validation¶
function validateEnvironment(): void {
// Check required environment variables
const requiredVars: Record<string, string> = {
OPENAI_API_KEY: 'OpenAI API key',
// Add others as needed
};
const missingVars: string[] = [];
for (const [varName, description] of Object.entries(requiredVars)) {
if (!process.env[varName]) {
missingVars.push(`${varName} (${description})`);
}
}
if (missingVars.length > 0) {
throw new Error(`Missing environment variables: ${missingVars.join(', ')}`);
}
console.log('✅ Environment validation passed');
}
Configuration Testing¶
import { LlmConfig, LlmClient } from '@infinitibit_gmbh/graphbit';
async function testConfiguration(config: LlmConfig): Promise<boolean> {
try {
// Create client
const client = new LlmClient(config);
// Test simple completion
const response = await client.complete('Say "Configuration test successful"');
if (response.toLowerCase().includes('successful')) {
console.log('✅ Configuration test passed');
return true;
} else {
console.log('❌ Configuration test failed - unexpected response');
return false;
}
} catch (error) {
console.error('❌ Configuration test failed:', error);
return false;
}
}
Health Check Function¶
import { healthCheck, getSystemInfo, LlmConfig, LlmClient } from '@infinitibit_gmbh/graphbit';
async function comprehensiveHealthCheck(): Promise<boolean> {
// Check system health
const health = healthCheck();
if (!health.overallHealthy) {
console.error('❌ System health check failed');
return false;
}
// Check system info
const info = getSystemInfo();
if (!info.runtimeInitialized) {
console.error('❌ Runtime not initialized');
return false;
}
// Test basic functionality
try {
const config = LlmConfig.openai({ apiKey: process.env.OPENAI_API_KEY || '' });
const client = new LlmClient(config);
// Quick test
const response = await client.complete('Test');
if (!response) {
console.error('❌ LLM test failed');
return false;
}
} catch (error) {
console.error('❌ LLM test failed:', error);
return false;
}
console.log('✅ Comprehensive health check passed');
return true;
}
Best Practices¶
1. Environment-Based Configuration¶
function getConfigForEnvironment(): Executor {
const env = process.env.NODE_ENV || 'development';
switch (env) {
case 'production':
return createProdConfig();
case 'staging':
return createStagingConfig();
case 'local':
return createLocalConfig();
default:
return createDevConfig();
}
}
2. Secure Configuration¶
import { LlmConfig } from '@infinitibit_gmbh/graphbit';
function secureConfigSetup(): LlmConfig {
// Validate API key exists
const apiKey = process.env.OPENAI_API_KEY;
if (!apiKey) {
throw new Error('OPENAI_API_KEY environment variable required');
}
// Validate API key format (basic check)
if (apiKey.length < 20) {
throw new Error('Invalid API key format');
}
const config = LlmConfig.openai({ apiKey });
return config;
}
3. Performance Monitoring¶
async function monitorPerformance(executor: Executor, workflow: Workflow): Promise<void> {
// Get initial stats
const initialStats = executor.getStats();
const startTime = Date.now();
// Execute workflow
const result = await executor.execute(workflow);
const endTime = Date.now();
const executionTime = endTime - startTime;
// Get final stats
const finalStats = executor.getStats();
// Log performance metrics
console.log(`Execution time: ${executionTime}ms`);
console.log(`Total executions: ${finalStats.totalExecutions}`);
console.log(`Success rate: ${finalStats.successRate}`);
// Alert on performance issues
if (executionTime > 60000) { // 60 second threshold
console.warn('⚠️ Slow execution detected - consider tuning configuration');
}
if (finalStats.successRate < 0.95) { // 95% success rate threshold
console.warn('⚠️ Low success rate - check configuration and API health');
}
}
4. Graceful Error Handling¶
import { LlmConfig, Executor } from '@infinitibit_gmbh/graphbit';
async function robustConfigCreation(): Promise<Executor> {
try {
// Primary configuration
const config = LlmConfig.openai({ apiKey: process.env.OPENAI_API_KEY || '' });
const executor = new Executor(config);
// Test configuration
if (await testConfiguration(config)) {
return executor;
} else {
throw new Error('Configuration test failed');
}
} catch (error) {
console.error('❌ Primary configuration failed:', error);
try {
// Fallback to local Ollama
console.log('🔄 Falling back to local Ollama...');
const fallbackConfig = LlmConfig.ollama();
const fallbackExecutor = new Executor(fallbackConfig);
if (await testConfiguration(fallbackConfig)) {
return fallbackExecutor;
} else {
throw new Error('Fallback configuration failed');
}
} catch (fallbackError) {
console.error('❌ Fallback configuration failed:', fallbackError);
throw new Error('All configuration options exhausted');
}
}
}
5. Resource Cleanup¶
import { shutdown } from '@infinitibit_gmbh/graphbit';
function cleanupResources(): void {
try {
// Shutdown GraphBit (for testing/cleanup)
shutdown();
console.log('✅ Resources cleaned up successfully');
} catch (error) {
console.error('❌ Error during cleanup:', error);
}
}
Configuration Troubleshooting¶
Common Issues and Solutions¶
1. API Key Issues¶
// Check API key validity
const apiKey = process.env.OPENAI_API_KEY;
if (!apiKey) {
console.error('❌ OPENAI_API_KEY not set');
} else if (apiKey.length < 20) {
console.error('❌ API key appears invalid (too short)');
} else if (!apiKey.startsWith('sk-')) {
console.error('❌ OpenAI API key should start with "sk-"');
} else {
console.log('✅ API key format looks correct');
}
2. Runtime Issues¶
import { getSystemInfo } from '@infinitibit_gmbh/graphbit';
// Check runtime status
const info = getSystemInfo();
if (!info.runtimeInitialized) {
console.error('❌ Runtime not initialized - call init()');
} else {
console.log(`✅ Runtime initialized with ${info.runtimeWorkerThreads} workers`);
}
3. Memory Issues¶
import { healthCheck } from '@infinitibit_gmbh/graphbit';
// Check memory status
const health = healthCheck();
if (!health.memoryHealthy) {
console.warn(`⚠️ Low memory: ${health.availableMemoryMb}MB available`);
console.warn('Consider using memory-optimized executor');
} else {
console.log('✅ Memory status OK');
}
TypeScript Configuration¶
Type Safety¶
import { LlmConfig, Executor, ExecutorOptions } from '@infinitibit_gmbh/graphbit';
// Define configuration with types
interface AppConfig {
llm: LlmConfig;
executor: ExecutorOptions;
}
const appConfig: AppConfig = {
llm: LlmConfig.openai({
apiKey: process.env.OPENAI_API_KEY || '',
model: 'gpt-4o-mini'
}),
executor: {
timeoutSeconds: 300,
debug: false,
lightweightMode: false
}
};
// Create executor with typed config
const executor = new Executor(appConfig.llm, appConfig.executor);
Configuration Interfaces¶
interface LlmProviderConfig {
provider: 'openai' | 'anthropic' | 'ollama' | 'deepseek';
apiKey?: string;
model?: string;
}
function createConfigFromInterface(config: LlmProviderConfig): LlmConfig {
switch (config.provider) {
case 'openai':
return LlmConfig.openai({ apiKey: config.apiKey!, model: config.model });
case 'anthropic':
return LlmConfig.anthropic({ apiKey: config.apiKey!, model: config.model });
case 'ollama':
return LlmConfig.ollama({ model: config.model });
case 'deepseek':
return LlmConfig.deepseek({ apiKey: config.apiKey!, model: config.model });
default:
throw new Error(`Unknown provider: ${config.provider}`);
}
}
Proper configuration is essential for optimal GraphBit performance in JavaScript/TypeScript applications. Choose settings that match your use case, environment, and performance requirements.