@nomyx/assistant
Version:
A powerful assistant library and cli for your AI projects. works with Vertex AI (Claude and Gemini)
42 lines (32 loc) • 1.73 kB
text/typescript
import * as path from 'path';
import { ILogger, Tool, StructuredPrompt } from '../types';
import { initializeTools } from './tools';
import { loadPrompts } from './promptLoader';
export class ToolAndPromptLoader {
constructor(private logger: ILogger) {}
async initializeToolsAndPrompts(toolsPath?: string, promptsPath?: string): Promise<{ tools: Record<string, Tool>, prompts: Record<string, StructuredPrompt> }> {
const currentDir = process.cwd();
const defaultToolsPath = path.join(currentDir, 'src', 'config', 'tools.json');
const defaultPromptsPath = path.join(currentDir, 'src', 'config', 'prompts.json');
const finalToolsPath = toolsPath || defaultToolsPath;
const finalPromptsPath = promptsPath || defaultPromptsPath;
this.logger.info(`Initializing tools from: ${finalToolsPath}`);
this.logger.info(`Initializing prompts from: ${finalPromptsPath}`);
const tools = await initializeTools(finalToolsPath);
const loadedPrompts = await loadPrompts(finalPromptsPath);
this.logger.info(`Loaded ${loadedPrompts.length} prompts`);
const prompts: Record<string, StructuredPrompt> = {};
for (const prompt of loadedPrompts) {
prompts[prompt.name] = prompt;
this.logger.debug(`Loaded prompt: ${prompt.name}`);
}
if ('executeTask' in prompts) {
this.logger.info("'executeTask' prompt successfully loaded");
} else {
this.logger.warn("'executeTask' prompt not found in loaded prompts");
}
this.logger.info(`Initialized ${Object.keys(tools).length} tools and ${Object.keys(prompts).length} prompts`);
this.logger.debug(`Loaded prompt names: ${Object.keys(prompts).join(', ')}`);
return { tools, prompts };
}
}