import { VoiceAgentClient, VoiceStyle } from '@lokutor/sdk';
const startBtn = document.getElementById('start') as HTMLButtonElement;
const statusEl = document.getElementById('status') as HTMLDivElement;
const transcriptEl = document.getElementById('transcript') as HTMLDivElement;
const client = new VoiceAgentClient({
apiKey: import.meta.env.VITE_LOKUTOR_API_KEY,
prompt: 'You are a helpful and friendly AI assistant. Keep your answers short and conversational.',
voice: VoiceStyle.F1,
visemes: false,
});
client.on('transcription', (text: string) => {
addMessage('user', text);
});
client.on('response', (text: string) => {
addMessage('agent', text);
});
client.on('status', (status: string) => {
statusEl.textContent = status;
statusEl.className = status;
});
client.on('error', (error: any) => {
console.error('Agent error:', error);
statusEl.textContent = 'Error';
statusEl.className = 'disconnected';
});
startBtn.addEventListener('click', async () => {
startBtn.disabled = true;
startBtn.textContent = 'Connecting...';
try {
await client.startManaged();
startBtn.textContent = 'Connected';
} catch (err) {
console.error('Failed to start:', err);
startBtn.disabled = false;
startBtn.textContent = 'Start Conversation';
}
});
function addMessage(role: 'user' | 'agent', text: string) {
const div = document.createElement('div');
div.className = `message ${role}`;
div.textContent = role === 'user' ? `You: ${text}` : `Agent: ${text}`;
transcriptEl.appendChild(div);
transcriptEl.scrollTop = transcriptEl.scrollHeight;
}