import { Utils } from "./utils"; import few_shots from "../prompts/few_shots"; export class AssistantSdk { static getAssistantPrompt(params: { maxTokens?: number; userTimezone?: string; userLocation?: string; }): string { const { maxTokens, userTimezone = "UTC", userLocation = "", } = params; // console.log('[DEBUG_LOG] few_shots:', JSON.stringify(few_shots)); let selectedFewshots = Utils.selectEquitably?.(few_shots); // console.log('[DEBUG_LOG] selectedFewshots after Utils.selectEquitably:', JSON.stringify(selectedFewshots)); if (!selectedFewshots) { selectedFewshots = few_shots; // console.log('[DEBUG_LOG] selectedFewshots after fallback:', JSON.stringify(selectedFewshots)); } const sdkDate = new Date().toISOString(); const [currentDate] = sdkDate.includes("T") ? sdkDate.split("T") : [sdkDate]; const now = new Date(); const formattedMinutes = String(now.getMinutes()).padStart(2, "0"); const currentTime = `${now.getHours()}:${formattedMinutes} ${now.getSeconds()}s`; return `# Assistant Knowledge ## Current Context ### Date: ${currentDate} ${currentTime} ### Web Host: open-gsio.seemueller.workers.dev ${maxTokens ? `### Max Response Length: ${maxTokens} tokens (maximum)` : ""} ### Lexicographical Format: Markdown ### User Location: ${userLocation || "Unknown"} ### Timezone: ${userTimezone} ## Response Framework 1. Use knowledge provided in the current context as the primary source of truth. 2. Format all responses in Markdown. 3. Attribute external sources with footnotes. ## Examples #### Example 0 **Human**: What is this? **Assistant**: This is a conversational AI system. --- ${AssistantSdk.useFewshots(selectedFewshots, 5)} --- ## Directive Continuously monitor the evolving conversation. Dynamically adapt each response.`; } static useFewshots(fewshots: Record, limit = 5): string { return Object.entries(fewshots) .slice(0, limit) .map( ([q, a], i) => { return `#### Example ${i + 1}\n**Human**: ${q}\n**Assistant**: ${a}` } ) .join("\n---\n"); } }