@nomyx/assistant
Version:
A powerful assistant library and cli for your AI projects. works with Vertex AI (Claude and Gemini)
61 lines (50 loc) • 1.67 kB
text/typescript
import { StructuredPrompt } from './StructuredPrompt';
import { PromptDefinition } from '../types/common';
export class PromptRegistry {
private prompts: Map<string, StructuredPrompt> = new Map();
register(prompt: StructuredPrompt): void {
this.prompts.set(prompt.definition.name, prompt);
}
get(name: string): StructuredPrompt {
const prompt = this.prompts.get(name);
if (!prompt) {
throw new Error(`Prompt not found: ${name}`);
}
return prompt;
}
getAllPrompts(): StructuredPrompt[] {
return Array.from(this.prompts.values());
}
getPromptNames(): string[] {
return Array.from(this.prompts.keys());
}
removePrompt(name: string): boolean {
return this.prompts.delete(name);
}
clear(): void {
this.prompts.clear();
}
size(): number {
return this.prompts.size;
}
getPromptsSortedByPriority(): StructuredPrompt[] {
return this.getAllPrompts().sort((a, b) => {
const priorityA = a.getPriority() ?? 0;
const priorityB = b.getPriority() ?? 0;
return priorityB - priorityA; // Sort in descending order
});
}
getHighestPriorityPrompt(): StructuredPrompt | undefined {
const sortedPrompts = this.getPromptsSortedByPriority();
return sortedPrompts[0];
}
getPromptsByConfig(config: Partial<NonNullable<PromptDefinition['config']>>): StructuredPrompt[] {
return this.getAllPrompts().filter(prompt => {
const promptConfig = prompt.getConfig();
if (!promptConfig) return false;
return Object.entries(config).every(([key, value]) =>
promptConfig[key as keyof PromptDefinition['config']] === value
);
});
}
}