@lewist9x/distil
Version:
An opinionated library for managing LLM pipelines. Define, track, rate, and curate prompt–completion pairs for fine-tuning.
108 lines (107 loc) • 2.82 kB
TypeScript
/**
* Generic input for a Distil pipeline.
* - modelName: Name of the model to use
* - systemPrompt & userPrompt: Template strings for the prompt
* - parameters: Input parameters that fill placeholders in the prompt
* - extraData: Optional extra information
* - pipelineName: Name of the pipeline (used as ES index)
* - templateHash: Computed hash for version tracking
* - originalInput: Raw input before preprocessing
*/
export interface LLMInput {
modelName: string;
systemPrompt: string;
userPrompt: string;
parameters?: Record<string, any>;
extraData?: any;
pipelineName: string;
templateHash?: string;
originalInput?: any;
startTime?: number;
preprocessFn?: (input: LLMInput) => Promise<LLMInput> | LLMInput;
postprocessFn?: (rawOutput: string, extraData?: any) => Promise<string> | string;
}
export interface InferenceResult {
detail: string;
rawInput: LLMInput;
preprocessedInput: LLMInput;
rawOutput: string;
processedOutput: string;
cost: number;
retryCount?: number;
}
export interface GenerationResult {
processedOutput: string;
metadata: {
generationCost: number;
timeTaken: number;
rawInput: LLMInput;
preprocessedInput: LLMInput;
rawOutput: string;
templateHash: string;
pipelineName: string;
generationId: string;
};
}
export interface PipelineExecutionResult {
processedOutput: string;
rawOutput: string;
rawInput: LLMInput;
preprocessedInput: LLMInput;
executionStats?: {
averageTime: number;
totalRuns: number;
successRate: number;
};
}
export interface PipelineVersionRecord {
id: string;
pipelineName: string;
template: {
systemPrompt: string;
userPrompt: string;
parameterKeys: string[];
};
tags: string[];
rating?: number;
isFinetuned?: boolean;
createdAt: string;
generations?: Array<{
id: string;
rawInput: any;
preprocessedInput: any;
rawOutput: string;
output: string;
timestamp: string;
metadata?: any;
}>;
}
export interface ESSearchResponse<T> {
hits: {
total: {
value: number;
relation: string;
};
hits: Array<{
_index: string;
_id: string;
_score: number;
_source: T;
}>;
};
aggregations?: {
[key: string]: {
buckets: Array<{
key: string;
doc_count: number;
latest_doc: {
hits: {
hits: Array<{
_source: T;
}>;
};
};
}>;
};
};
}