@nomyx/assistant
Version:
A powerful assistant library and cli for your AI projects. works with Vertex AI (Claude and Gemini)
55 lines (47 loc) • 1.92 kB
text/typescript
import { promises as fs } from 'fs';
import { StructuredPrompt } from '../types';
export async function loadPrompts(filePath: string): Promise<StructuredPrompt[]> {
try {
const fileContent = await fs.readFile(filePath, 'utf-8');
const promptsData = JSON.parse(fileContent);
return Object.entries(promptsData).map(([name, data]: [string, any]) =>
loadPromptFromJson(name, data)
);
} catch (error) {
console.error(`Error loading prompts from ${filePath}:`, error);
throw new Error(`Failed to load prompts from ${filePath}: ${error instanceof Error ? error.message : String(error)}`);
}
}
export function loadPromptFromJson(name: string, promptData: any): StructuredPrompt {
if (!isValidPromptData(promptData)) {
throw new Error(`Invalid prompt data for ${name}`);
}
return {
name,
description: promptData.description || '',
input_schema: promptData.input_schema,
output_schema: promptData.output_schema,
system_message: promptData.system_message,
user_message: promptData.user_message,
config: promptData.config || promptData.options || {},
tools: promptData.tools || [] // Add this line to include the tools array
};
}
function isValidPromptData(promptData: any): boolean {
return (
promptData &&
typeof promptData.input_schema === 'object' &&
typeof promptData.output_schema === 'object' &&
typeof promptData.system_message === 'string' &&
typeof promptData.user_message === 'string' &&
Array.isArray(promptData.tools) // Add this line to check for the tools array
);
}
export function loadPromptFromJsonFile(promptName: string): StructuredPrompt {
const promptsJson = require('../config/prompts.json');
const promptData = promptsJson[promptName];
if (!promptData) {
throw new Error(`Prompt ${promptName} not found in prompts.json`);
}
return loadPromptFromJson(promptName, promptData);
}