/** * Generate TypeScript/JavaScript code for Ensemble request */ export const generateRequestCode = (options: { model: string; messages: Array<{ role: string; content: string }>; temperature?: number; maxTokens?: number; tools?: boolean; stream?: boolean; language?: 'typescript' | 'javascript'; }): string => { const { model, messages, temperature, maxTokens, tools, stream = true, language = 'typescript' } = options; const imports = language === 'typescript' ? `import { ensembleRequest, type Message } from '@just-every/ensemble';` : `import { ensembleRequest } from '@just-every/ensemble';`; const messagesCode = JSON.stringify(messages, null, 2); const optionsLines = []; if (temperature !== undefined) optionsLines.push(`temperature: ${temperature}`); if (maxTokens !== undefined) optionsLines.push(`max_tokens: ${maxTokens}`); if (tools) optionsLines.push(`tools: true`); const optionsCode = optionsLines.length > 0 ? `,\n ${optionsLines.join(',\n ')}` : ''; return `${imports} const messages${language === 'typescript' ? ': Message[]' : ''} = ${messagesCode}; ${stream ? '// Stream the response' : '// Get the response'} const response = await ensembleRequest({ model: '${model}', messages${optionsCode} }); ${stream ? `// Handle streaming events for await (const event of response) { switch (event.type) { case 'message_delta': process.stdout.write(event.content); break; case 'tool_start': console.log('\\nTool called:', event.tool.function.name); break; case 'stream_end': console.log('\\nStream completed'); break; } }` : `// Process the response console.log(response.content);`}`; }; /** * Generate code for embedding creation */ export const generateEmbedCode = (options: { texts: string[]; model: string; dimensions?: number; language?: 'typescript' | 'javascript'; }): string => { const { texts, model, dimensions } = options; const imports = `import { ensembleEmbed } from '@just-every/ensemble';`; const textsCode = JSON.stringify(texts, null, 2); const dimensionsLine = dimensions ? `\n dimensions: ${dimensions},` : ''; return `${imports} const texts = ${textsCode}; const embeddings = await ensembleEmbed(texts, { model: '${model}'${dimensionsLine} }); // Process embeddings embeddings.forEach((embedding, index) => { console.log(\`Text: \${texts[index]}\`); console.log(\`Embedding dimensions: \${embedding.length}\`); console.log('---'); });`; }; /** * Generate HTML demo code */ export const generateHTMLDemo = (options: { title: string; wsUrl: string; features?: string[]; }): string => { const { title, wsUrl, features = [] } = options; const hasAudio = features.includes('audio'); const hasTools = features.includes('tools'); return `