// Provider-specific and model-specific tool instructions // Optimized for different LLM families to improve tool calling success rate // Base structured command format (works for most models) export const BASE_INSTRUCTIONS = { format: 'xml', commands: { write: '\ncontent here\n', read: '', bash: '\ncommand here\n' }, examples: ` Example: Create a file function hello() { console.log("Hello!"); } `, emphasis: 'IMPORTANT: Use these structured commands in your response. The system will automatically execute them.' }; // Anthropic models - Native tool calling, minimal instructions needed export const ANTHROPIC_INSTRUCTIONS = { format: 'native', commands: { write: 'Use Write tool with file_path and content parameters', read: 'Use Read tool with file_path parameter', bash: 'Use Bash tool with command parameter' }, emphasis: 'You have native access to file system tools. Use them directly.' }; // OpenAI/GPT models - Prefer function calling style export const OPENAI_INSTRUCTIONS = { format: 'xml', commands: { write: '\ncontent here\n', read: '', bash: '\ncommand here\n' }, examples: ` When you need to create a file, respond with: File content here The system will create the file for you. `, emphasis: 'CRITICAL: You must use these exact XML tag formats. Do not just describe the file - actually use the tags.' }; // Google/Gemini models - Detailed, explicit instructions export const GOOGLE_INSTRUCTIONS = { format: 'xml', commands: { write: '\ncontent here\n', read: '', bash: '\ncommand here\n' }, examples: ` Step-by-step file creation: 1. Determine the filename 2. Write the content 3. Use this exact format: Your content here The file will be automatically created. `, emphasis: 'IMPORTANT: Always use the XML tags. Just writing code blocks will NOT create files. You MUST use tags.' }; // Meta/Llama models - Clear, concise instructions export const META_INSTRUCTIONS = { format: 'xml', commands: { write: '\ncontent here\n', read: '', bash: '\ncommand here\n' }, examples: ` To create files, use: content To read files, use: To run commands, use: ls -la `, emphasis: 'Use these tags to perform actual file operations. Code blocks alone will not create files.' }; // DeepSeek models - Technical, precise instructions export const DEEPSEEK_INSTRUCTIONS = { format: 'xml', commands: { write: '\ncontent here\n', read: '', bash: '\ncommand here\n' }, examples: ` File system operations use XML-like structured commands: def main(): print("Hello") These commands are parsed and executed by the system. `, emphasis: 'Use structured commands for file I/O. Standard code blocks are for display only.' }; // Mistral models - Direct, action-oriented export const MISTRAL_INSTRUCTIONS = { format: 'xml', commands: { write: '\ncontent here\n', read: '', bash: '\ncommand here\n' }, examples: ` ACTION REQUIRED: To create actual files, you must use these tags: content Do not just show code - use the tags to create real files. `, emphasis: 'CRITICAL: File operations require XML tags. Code blocks alone will not create files on disk.' }; // X.AI/Grok models - Balanced, clear instructions export const XAI_INSTRUCTIONS = { format: 'xml', commands: { write: '\ncontent here\n', read: '', bash: '\ncommand here\n' }, examples: ` File system commands: - Create: content - Read: - Execute: command `, emphasis: 'Use structured commands to interact with the file system.' }; // Map provider/model patterns to instruction sets export function getInstructionsForModel(modelId, provider) { const normalizedModel = modelId.toLowerCase(); // Anthropic models - native tool calling if (normalizedModel.includes('claude') || provider === 'anthropic') { return ANTHROPIC_INSTRUCTIONS; } // OpenAI models if (normalizedModel.includes('gpt') || normalizedModel.includes('openai') || provider === 'openai') { return OPENAI_INSTRUCTIONS; } // Google/Gemini models if (normalizedModel.includes('gemini') || normalizedModel.includes('gemma') || provider === 'google') { return GOOGLE_INSTRUCTIONS; } // Meta/Llama models if (normalizedModel.includes('llama') || provider === 'meta-llama' || provider === 'meta') { return META_INSTRUCTIONS; } // DeepSeek models if (normalizedModel.includes('deepseek') || provider === 'deepseek') { return DEEPSEEK_INSTRUCTIONS; } // Mistral models if (normalizedModel.includes('mistral') || provider === 'mistralai') { return MISTRAL_INSTRUCTIONS; } // X.AI/Grok models if (normalizedModel.includes('grok') || provider === 'x-ai') { return XAI_INSTRUCTIONS; } // Qwen models if (normalizedModel.includes('qwen')) { return DEEPSEEK_INSTRUCTIONS; // Similar to DeepSeek } // Default to base instructions return BASE_INSTRUCTIONS; } // Check if task requires file/tool operations based on prompt content export function taskRequiresFileOps(systemPrompt, userMessages) { const combined = systemPrompt + ' ' + JSON.stringify(userMessages); // Regex patterns that suggest file operations are needed const filePatterns = [ /create\s+.*?file/i, // "create a file", "create file", "create the file" /write\s+.*?file/i, // "write a file", "write to file" /save\s+.*?file/i, // "save to file", "save as file" /save\s+.*?to/i, // "save to disk", "save code to" /write\s+to\s+disk/i, // "write to disk" /create\s+.*?script/i, // "create a script", "create script" /make\s+.*?file/i, // "make a file" /generate\s+.*?file/i, // "generate a file" /put\s+.*?in\s+.*?file/i, // "put code in a file" /store\s+.*?in\s+.*?file/i, // "store in a file" /run\s+bash/i, // "run bash command" /execute\s+command/i, // "execute command" /run\s+command/i, // "run command" /shell\s+command/i, // "shell command" /use\s+bash/i // "use bash" ]; return filePatterns.some(pattern => pattern.test(combined)); } // Generate formatted instruction string for injection // Only include XML instructions if task actually requires file operations export function formatInstructions(instructions, includeXmlInstructions = true) { if (instructions.format === 'native') { return `${instructions.emphasis}\n\n${instructions.commands.write}\n${instructions.commands.read}\n${instructions.commands.bash}`; } // For simple code generation without file ops, skip XML instructions if (!includeXmlInstructions) { return 'Provide clean, well-formatted code in your response. Use markdown code blocks for code.'; } let formatted = `${instructions.emphasis}\n\n`; formatted += `Available commands:\n`; formatted += `${instructions.commands.write}\n`; formatted += `${instructions.commands.read}\n`; formatted += `${instructions.commands.bash}\n`; if (instructions.examples) { formatted += `\n${instructions.examples}`; } return formatted; } // Parallel execution instructions for concurrent agent coordination export const PARALLEL_EXECUTION_INSTRUCTIONS = ` ═══════════════════════════════════════════════════════════════ CRITICAL: Concurrent Execution System ═══════════════════════════════════════════════════════════════ This system supports parallel agent execution via CLI subprocesses and ReasoningBank coordination. Follow these patterns for optimal performance: 1. SUBPROCESS SPAWNING When decomposing tasks, spawn subagents via CLI: \`\`\`typescript const results = await Promise.all([ exec('npx agentic-flow --agent researcher --task "analyze security"'), exec('npx agentic-flow --agent coder --task "implement features"'), exec('npx agentic-flow --agent tester --task "create tests"') ]); \`\`\` 2. REASONINGBANK COORDINATION Each subagent stores results in ReasoningBank: \`\`\`typescript // Subagent stores results await reasoningBank.storePattern({ sessionId: 'swarm/task-123/agent-1', task: 'Research security patterns', output: findings, reward: 0.95, success: true }); // Parent retrieves all results const allResults = await reasoningBank.searchPatterns('swarm/task-123'); \`\`\` 3. PERFORMANCE BENEFITS - 2.8-4.4x speedup with parallel execution - 50-70% time reduction with QUIC transport - 32.3% token reduction via batching See /agentic-flow/src/prompts/parallel-execution-guide.md for detailed examples. ═══════════════════════════════════════════════════════════════ `; // Get appropriate max_tokens for model export function getMaxTokensForModel(modelId, requestedMaxTokens) { const normalizedModel = modelId.toLowerCase(); // If user requested specific max_tokens, use it if (requestedMaxTokens) { return requestedMaxTokens; } // DeepSeek needs higher max_tokens if (normalizedModel.includes('deepseek')) { return 8000; } // Llama 3.1/3.3 - moderate if (normalizedModel.includes('llama')) { return 4096; } // GPT models - standard if (normalizedModel.includes('gpt')) { return 4096; } // Default return 4096; } // Get parallel execution capabilities for model export function getParallelCapabilities(modelId) { const normalized = modelId.toLowerCase(); // High-capability models (Claude, GPT-4) if (normalized.includes('claude') || normalized.includes('gpt-4')) { return { maxConcurrency: 10, recommendedBatchSize: 5, supportsSubprocesses: true, supportsReasoningBank: true }; } // Mid-tier models (DeepSeek, Llama 3.1) if (normalized.includes('deepseek') || normalized.includes('llama-3.1')) { return { maxConcurrency: 5, recommendedBatchSize: 3, supportsSubprocesses: true, supportsReasoningBank: true }; } // Lower-tier models return { maxConcurrency: 3, recommendedBatchSize: 2, supportsSubprocesses: true, supportsReasoningBank: false }; } // Enhanced instruction builder export function buildInstructions(modelId, provider, options = {}) { const { enableParallel = false, batchSize, enableReasoningBank = false, includeXmlInstructions = true } = options; const baseInstructions = getInstructionsForModel(modelId, provider); let formatted = formatInstructions(baseInstructions, includeXmlInstructions); // Add parallel execution instructions if enabled if (enableParallel) { const capabilities = getParallelCapabilities(modelId); const effectiveBatchSize = batchSize || capabilities.recommendedBatchSize; formatted += '\n\n' + PARALLEL_EXECUTION_INSTRUCTIONS; formatted += `\n\nRECOMMENDED BATCH SIZE: ${effectiveBatchSize} concurrent subagents`; formatted += `\nMAX CONCURRENCY: ${capabilities.maxConcurrency} agents`; } // Add ReasoningBank instructions if enabled if (enableReasoningBank) { formatted += `\n\n REASONINGBANK MEMORY COORDINATION: - Store: await reasoningBank.storePattern({ sessionId: 'swarm/TASK_ID/AGENT_ID', task, output, reward, success }) - Retrieve: await reasoningBank.retrieve('swarm/TASK_ID/AGENT_ID') - Search: await reasoningBank.searchPatterns('swarm/TASK_ID', { k: 10 }) `; } return formatted; } //# sourceMappingURL=provider-instructions.js.map