@varia-bly/variably-sdk
Version:
Official JavaScript/TypeScript SDK for Variably feature flags, experimentation, LLM experiments with React hooks, and real-time dynamic configurations
119 lines • 3.75 kB
TypeScript
/**
* GraphQL client for Variably API
*/
import { VariablyConfig, UserContext, Event, FlagEvaluationResponse, GateEvaluationResponse, BatchFlagEvaluationResponse, ExperimentMetric } from './types';
import { Logger } from './logger';
import { MetricsCollector } from './metrics';
export declare class GraphQLClient {
private baseUrl;
private apiKey;
private timeout;
private retryAttempts;
private logger;
private metrics;
constructor(config: Required<VariablyConfig>, logger: Logger, metrics: MetricsCollector);
/**
* Evaluate a single feature flag
*/
evaluateFlag(flagKey: string, context: UserContext): Promise<FlagEvaluationResponse>;
/**
* Evaluate multiple feature flags in batch
*/
evaluateFlags(flagKeys: string[], context: UserContext): Promise<BatchFlagEvaluationResponse>;
/**
* Evaluate a feature gate
*/
evaluateGate(gateKey: string, context: UserContext): Promise<GateEvaluationResponse>;
/**
* Track a single event
*/
trackEvent(event: Event): Promise<void>;
/**
* Track multiple events in batch
*/
trackEvents(events: Event[]): Promise<void>;
/**
* Track experiment metric
*/
trackExperimentMetric(experimentId: string, metric: ExperimentMetric): Promise<void>;
/**
* Logout and blacklist current token
*/
logout(): Promise<void>;
/**
* Execute LLM prompt
*/
executeLLMPrompt(messages: Array<{
role: string;
content: string;
}>, provider: string, model: string, temperature?: number, maxTokens?: number): Promise<{
content: string;
model: string;
provider: string;
tokenUsage: {
promptTokens: number;
completionTokens: number;
totalTokens: number;
estimatedCost: number;
};
finishReason: string;
}>;
/**
* Evaluate a prompt experiment - selects variant, executes LLM, and saves evaluation
* This is the recommended method for prompt experiments as it saves evaluation data
*/
evaluatePromptExperiment(experimentKey: string, context: UserContext, inputVariables?: Record<string, any>, metadata?: Record<string, any>): Promise<{
executionId: string;
experimentId: string;
variantUsed: string;
content: string;
model: string;
provider: string;
tokenUsage: {
promptTokens: number;
completionTokens: number;
totalTokens: number;
estimatedCost: number;
};
latencyMs: number;
qualityScore?: number;
}>;
/**
* Execute a GraphQL query
*/
private executeQuery;
/**
* Execute a GraphQL mutation
*/
private executeMutation;
/**
* Execute a GraphQL request with retry logic
*/
private executeGraphQL;
/**
* Execute the actual HTTP request
*/
private makeRequest;
/**
* Handle HTTP error responses
*/
private handleHttpError;
/**
* Determine if an error should trigger a retry
*/
private shouldRetry;
/**
* Convert SDK UserContext to GraphQL input format
*/
private convertUserContext;
/**
* Track a success metric for an LLM prompt experiment
* Uses the sdkTrackExperimentMetric GraphQL mutation
*/
trackSuccessMetric(experimentId: string, metricName: string, metricKey: string, userId: string, sessionId?: string, variantId?: string, variantKey?: string, value?: number, metadata?: Record<string, any>): Promise<void>;
/**
* Sleep for a given number of milliseconds
*/
private sleep;
}
//# sourceMappingURL=graphql-client.d.ts.map