<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Felona Voice</title>
    <description>The latest articles on DEV Community by Felona Voice (@feleona_voice).</description>
    <link>https://dev.to/feleona_voice</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4145563%2Fa148cbfc-135f-4e5c-9b71-f01c06b2e533.png</url>
      <title>DEV Community: Felona Voice</title>
      <link>https://dev.to/feleona_voice</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/feleona_voice"/>
    <language>en</language>
    <item>
      <title>The Engineering Imperative: Sustainable Voice AI at Scale with Felona Voice's JEV</title>
      <dc:creator>Felona Voice</dc:creator>
      <pubDate>Thu, 15 Oct 2026 17:36:15 +0000</pubDate>
      <link>https://dev.to/feleona_voice/the-engineering-imperative-sustainable-voice-ai-at-scale-with-felona-voices-jev-4epe</link>
      <guid>https://dev.to/feleona_voice/the-engineering-imperative-sustainable-voice-ai-at-scale-with-felona-voices-jev-4epe</guid>
      <description>&lt;p&gt;In the rapidly evolving landscape of conversational AI, voice agents are becoming non-negotiable for superior customer experience and operational efficiency. Yet, the journey from proof-of-concept to a truly production-ready, scalable, and cost-effective voice AI system is fraught with challenges. Traditional approaches, heavily reliant on large language models (LLMs) for every conversational turn, often hit critical roadblocks: prohibitive costs, unacceptable latency, and unpredictable behavior.&lt;/p&gt;

&lt;p&gt;This is where &lt;strong&gt;Felona Voice&lt;/strong&gt; (&lt;a href="https://github.com/mohitjoer/felona_voice" rel="noopener noreferrer"&gt;https://github.com/mohitjoer/felona_voice&lt;/a&gt;) emerges as a game-changer. An open-source, ultra-low-latency voice agent framework built for TypeScript, Felona Voice introduces a paradigm shift with its &lt;strong&gt;Joint Embedding Vectors (JEV)&lt;/strong&gt; and stateful conversational transition graphs (VoiceGraph). It's designed not just to work, but to scale sustainably, reliably, and economically in real-world enterprise environments.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Production Challenge of Traditional Voice AI
&lt;/h2&gt;

&lt;p&gt;Imagine deploying a voice agent that handles hundreds of thousands, or even millions, of calls per month. With traditional LLM-centric architectures, each user utterance typically triggers a cascade of events:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Speech-to-Text (STT):&lt;/strong&gt; Convert audio to text.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;LLM Inference:&lt;/strong&gt; Send text to a cloud LLM API for intent recognition and response generation.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Text-to-Speech (TTS):&lt;/strong&gt; Convert the LLM's text response back to audio.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;While powerful for generative tasks, the LLM inference step is the bottleneck. It introduces significant latency (often 500ms-1200ms+ per turn) and incurs a token-based cost. At scale, these delays degrade user experience, and the costs skyrocket, making the system unsustainable.&lt;/p&gt;

&lt;p&gt;Furthermore, LLMs, by their probabilistic nature, can "hallucinate" or deviate from expected conversational paths. For critical enterprise applications like banking, healthcare, or customer support, deterministic and predictable behavior isn't just a preference; it's a regulatory and operational imperative.&lt;/p&gt;

&lt;h2&gt;
  
  
  Felona Voice's Paradigm Shift: JEV for Sustainable Scale
&lt;/h2&gt;

&lt;p&gt;Felona Voice tackles these challenges head-on by fundamentally rethinking how intent is recognized and actions are triggered. Instead of relying on an LLM for real-time decision-making, it leverages &lt;strong&gt;Joint Embedding Vectors (JEV)&lt;/strong&gt; combined with a &lt;strong&gt;VoiceGraph&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here's the core innovation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Zero Token Latency:&lt;/strong&gt; Instead of generating tokens, Felona Voice uses pre-computed JEVs to perform similarity matching. When a user speaks, their utterance is converted into an embedding, which is then compared against a library of pre-defined JEVs associated with your agent's actions within a VoiceGraph. This matching happens in &lt;strong&gt;sub-10ms (~5ms)&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Zero Hallucinations:&lt;/strong&gt; The VoiceGraph defines explicit, deterministic paths. JEV similarity matching ensures that the agent follows these predefined paths based on the closest intent. This means predictable outcomes, every single time – crucial for compliance and reliability.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;In-Memory Efficiency:&lt;/strong&gt; JEV matching is often an in-memory operation, drastically reducing external API calls for intent resolution, especially during high-volume conversational turns.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Developer Experience: Building with Felona Voice
&lt;/h2&gt;

&lt;p&gt;Felona Voice prioritizes developer productivity with a fluent, intuitive TypeScript API. Defining a sophisticated voice agent is straightforward and expressive:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createAgent&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;felona-voice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Define a simple Felona Voice agent&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;supportAgent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;CustomerSupport&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;system&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You are a helpful customer support agent for a SaaS company. You can assist with billing, technical issues, and general inquiries.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;check_billing&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Check my billing statement or current charges&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// In a real application, you'd integrate with a billing API here&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;userId&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Example of context access&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`Sure, I can help you check your billing. What's your account number?`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;report_issue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Report a technical issue or bug&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;I understand you're having a technical issue. Could you please describe it in more detail?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;general_inquiry&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Ask a general question about the service&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;I'm happy to answer any general questions you have. How can I help?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fallback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;I'm sorry, I didn't understand that. Can you please rephrase?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Simulate an interaction&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;runAgent&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;User: Can you tell me about my latest bill?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;reply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;supportAgent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Can you tell me about my latest bill?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Agent: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;User: My dashboard is not loading.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;reply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;supportAgent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;My dashboard is not loading.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Agent: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;User: What's your favorite color?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Fallback example&lt;/span&gt;
  &lt;span class="nx"&gt;reply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;supportAgent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;What's your favorite color?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Agent: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;runAgent&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This example demonstrates how easily you can define actions with clear descriptions, allowing Felona Voice to map user utterances to the correct intent using JEVs. The &lt;code&gt;fallback&lt;/code&gt; mechanism ensures graceful handling of out-of-scope requests.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Unbeatable ROI: Cost &amp;amp; Latency Breakdown
&lt;/h2&gt;

&lt;p&gt;For enterprise-grade voice AI, the choice of architecture has profound implications for both user experience and the bottom line. Felona Voice's JEV-driven approach delivers a compelling return on investment:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Traditional Voice Agent (LLM Loop)&lt;/th&gt;
&lt;th&gt;Felona Voice (JEV + VoiceGraph)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Intent Decision Latency&lt;/td&gt;
&lt;td&gt;850ms – 1,800ms&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;~5ms&lt;/strong&gt; (Sub-10ms)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Inference Cost / Turn&lt;/td&gt;
&lt;td&gt;$0.02 – $0.06+ / turn&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;$0.00&lt;/strong&gt; / turn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hallucination Risk&lt;/td&gt;
&lt;td&gt;High (probabilistic text tokens)&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;0%&lt;/strong&gt; (deterministic transition graph)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Network Dependency&lt;/td&gt;
&lt;td&gt;Requires constant cloud LLM API&lt;/td&gt;
&lt;td&gt;Local/In-memory embedding matching&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Mathematically Cutting Costs by 90-95% (or More!)
&lt;/h3&gt;

&lt;p&gt;Let's quantify the financial impact. Consider an enterprise with a voice agent handling &lt;strong&gt;100,000 conversational turns per month&lt;/strong&gt;. Each turn with a traditional LLM incurs a cost (e.g., for &lt;code&gt;gpt-3.5-turbo&lt;/code&gt; or similar models). Let's assume a conservative average of &lt;strong&gt;$0.04 per turn&lt;/strong&gt; for LLM inference alone (this doesn't even include STT/TTS costs).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Traditional LLM Cost:&lt;/strong&gt; 100,000 turns/month * $0.04/turn = &lt;strong&gt;$4,000 per month&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, let's look at Felona Voice. For intent resolution and action triggering, Felona Voice uses &lt;strong&gt;Joint Embedding Vectors (JEV)&lt;/strong&gt;. Once these embeddings are generated (a one-time or infrequent process), the &lt;em&gt;real-time matching&lt;/em&gt; is an in-memory computation. This means the inference cost per turn for &lt;em&gt;intent decision&lt;/em&gt; is effectively &lt;strong&gt;$0.00&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Felona Voice JEV Cost:&lt;/strong&gt; 100,000 turns/month * $0.00/turn = &lt;strong&gt;$0 per month&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This represents a &lt;strong&gt;100% saving on LLM inference for intent resolution&lt;/strong&gt;. Even if you still use an LLM for &lt;em&gt;generative responses&lt;/em&gt; in specific &lt;code&gt;action&lt;/code&gt; handlers, the vast majority of turns (e.g., navigating menus, confirming details) can be handled by JEV, drastically reducing your LLM token consumption by 90-95%. For a pure deterministic flow, the savings are absolute.&lt;/p&gt;

&lt;p&gt;Scaling this to &lt;strong&gt;500,000 turns per month&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Traditional LLM Cost:&lt;/strong&gt; 500,000 turns/month * $0.04/turn = &lt;strong&gt;$20,000 per month&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Felona Voice JEV Cost:&lt;/strong&gt; &lt;strong&gt;$0 per month&lt;/strong&gt; for intent resolution.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The savings are undeniable and directly translate to a sustainable, viable business model for voice AI at scale.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reliability and Compliance: The Zero-Hallucination Advantage
&lt;/h2&gt;

&lt;p&gt;Beyond cost, the deterministic nature of Felona Voice's VoiceGraph with JEV matching is paramount for enterprise use cases. In sectors like finance or healthcare, a voice agent cannot afford to misinterpret a user's intent or generate an off-script response. Felona Voice's architecture guarantees that your agent will always follow the defined conversational logic, eliminating the risk of LLM hallucinations and ensuring compliance with strict industry regulations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Beyond the Basics: Pluggable Audio Pipelines &amp;amp; Local Testing
&lt;/h2&gt;

&lt;p&gt;Felona Voice isn't just about core logic; it's a complete framework for production environments. It offers pluggable audio pipelines, supporting WebSockets, WebRTC, and integrations with leading STT/TTS providers like Deepgram, Whisper, ElevenLabs, and Cartesia. Crucially, for development and local testing, you don't need any external API keys for deterministic routing, making the inner development loop incredibly fast and efficient.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion: Build Sustainable Voice AI Today
&lt;/h2&gt;

&lt;p&gt;The future of scalable, cost-effective, and reliable voice AI is here. Felona Voice empowers developers and enterprises to move beyond the limitations of traditional LLM-centric architectures, offering an innovative JEV-powered approach that delivers sub-10ms latency, zero hallucinations, and dramatic cost reductions. It's the engineering imperative for any organization serious about deploying high-performance voice agents at scale.&lt;/p&gt;

&lt;p&gt;Ready to build the next generation of voice experiences?&lt;/p&gt;

&lt;p&gt;🌟 Star the repository on GitHub: &lt;a href="https://github.com/mohitjoer/felona_voice" rel="noopener noreferrer"&gt;github.com/mohitjoer/felona_voice&lt;/a&gt;&lt;br&gt;
📦 Install via npm: &lt;code&gt;npm install felona-voice&lt;/code&gt;&lt;br&gt;
📖 Explore full documentation: &lt;a href="https://felona-voice.mohitjoe.tech/docs" rel="noopener noreferrer"&gt;felona-voice.mohitjoe.tech/docs&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This article was originally published on &lt;a href="https://felona-voice.mohitjoe.tech/blog/sustainable-voice-ai-scale-felona-voice-jev" rel="noopener noreferrer"&gt;felona-voice.mohitjoe.tech&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>voiceai</category>
      <category>scalability</category>
      <category>engineering</category>
    </item>
    <item>
      <title>Mastering Enterprise Voice AI: Deterministic Flows with Felona Voice &amp; TypeScript</title>
      <dc:creator>Felona Voice</dc:creator>
      <pubDate>Mon, 12 Oct 2026 21:33:46 +0000</pubDate>
      <link>https://dev.to/feleona_voice/mastering-enterprise-voice-ai-deterministic-flows-with-felona-voice-typescript-33fi</link>
      <guid>https://dev.to/feleona_voice/mastering-enterprise-voice-ai-deterministic-flows-with-felona-voice-typescript-33fi</guid>
      <description>&lt;p&gt;Building voice AI agents for enterprise applications comes with a unique set of challenges. Organizations demand not just intelligence, but also unwavering predictability, minimal latency, and stringent cost control. Traditional approaches, often reliant on large language models (LLMs) for every conversational turn, frequently fall short, introducing unacceptable delays, unpredictable responses, and skyrocketing operational costs.&lt;/p&gt;

&lt;p&gt;This is where &lt;strong&gt;Felona Voice&lt;/strong&gt; steps in. As an open-source, ultra-low-latency voice agent framework for TypeScript, Felona Voice is engineered from the ground up to address these enterprise imperatives. It offers a revolutionary approach to voice AI, prioritizing deterministic control, sub-10ms intent resolution, and a developer experience that is both powerful and intuitive.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Enterprise Voice AI Dilemma: Latency, Cost, and Hallucinations
&lt;/h2&gt;

&lt;p&gt;Imagine a customer support agent, a banking assistant, or a healthcare concierge. These systems cannot afford to be slow, expensive, or, worst of all, make up information. Yet, this is the reality for many LLM-centric voice solutions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;High Latency&lt;/strong&gt;: Each conversational turn requires sending user speech to an ASR (Automatic Speech Recognition) service, then to an LLM for processing, and finally to a TTS (Text-to-Speech) service. This round trip often incurs 800ms to 1800ms or more of delay, making natural, rapid-fire conversations impossible and hindering barge-in capabilities.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Unpredictable Costs&lt;/strong&gt;: Every LLM interaction translates to token usage, which accumulates rapidly. For businesses handling thousands or hundreds of thousands of calls monthly, these costs can quickly spiral into five or even six figures.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Hallucination Risk&lt;/strong&gt;: LLMs are designed for creative, probabilistic text generation. While powerful, this makes them inherently unreliable for structured, compliance-critical conversations where factual accuracy and deterministic outcomes are paramount.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These challenges highlight a fundamental mismatch: generative LLMs excel at open-ended creativity, but enterprise voice agents often require precise, stateful, and predictable execution of predefined tasks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Felona Voice: A Paradigm Shift with JEV and VoiceGraph
&lt;/h2&gt;

&lt;p&gt;Felona Voice redefines voice AI architecture by moving beyond the limitations of auto-regressive LLM loops for core intent resolution. Its innovation lies in the powerful combination of &lt;strong&gt;Joint Embedding Vectors (JEV)&lt;/strong&gt; and stateful conversational transition graphs, known as &lt;strong&gt;VoiceGraph&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Joint Embedding Vectors (JEV) for Sub-10ms Intent Resolution
&lt;/h3&gt;

&lt;p&gt;Instead of sending every user utterance to an LLM for natural language understanding (NLU), Felona Voice leverages JEV. Here's how it works:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Pre-computation&lt;/strong&gt;: During agent definition, all possible user intents, actions, and fallback phrases are converted into numerical embedding vectors (JEVs).&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Runtime Matching&lt;/strong&gt;: When a user speaks, their utterance is quickly converted into an embedding vector. Felona Voice then performs a highly efficient similarity matching against the pre-computed JEVs.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Instant Decision&lt;/strong&gt;: This vector similarity matching process happens in &lt;strong&gt;sub-10ms, typically around 5ms&lt;/strong&gt;. Because it's an in-memory operation, it completely bypasses the network latency and processing time associated with external LLM APIs.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This approach eliminates token latency and the associated costs for intent resolution, making Felona Voice agents incredibly fast and efficient.&lt;/p&gt;

&lt;h3&gt;
  
  
  VoiceGraph for Deterministic Conversational Flows
&lt;/h3&gt;

&lt;p&gt;While JEV handles rapid intent recognition, &lt;strong&gt;VoiceGraph&lt;/strong&gt; provides the structure and predictability. It's a stateful conversational transition graph that dictates how your agent should respond based on the detected intent and the current conversational context.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Predictability&lt;/strong&gt;: Unlike the probabilistic nature of LLMs, VoiceGraph ensures deterministic outcomes. If a specific intent is matched, a predefined action is triggered, guaranteeing compliance and consistent user experiences.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Flexibility&lt;/strong&gt;: Despite being deterministic, VoiceGraph is not rigid like hardcoded static graphs. The dynamic nature of JEV similarity matching allows for natural variations in human speech to be correctly mapped to the appropriate state transition.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Zero Hallucinations&lt;/strong&gt;: Since responses and actions are tied to explicit definitions within the VoiceGraph, there's no risk of the agent generating irrelevant or incorrect information.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Building Predictable Agents with Felona Voice: A Developer's Perspective
&lt;/h2&gt;

&lt;p&gt;Felona Voice offers a fluent, TypeScript-native builder API that makes defining complex conversational flows surprisingly simple. Let's look at a practical example of a concierge agent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createAgent&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;felona-voice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;conciergeAgent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ConciergeService&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;system&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You are an intelligent voice concierge, ready to assist with hotel amenities and bookings.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;book_table&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Book a restaurant reservation for the guest. The user might say 'I want to book a table' or 'Reserve a spot at the restaurant'.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// In a real application, you'd integrate with a booking API here.&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`User requested to book a table. Context: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slots&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Certainly, I can help with that. What's your preferred time and number of guests?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;request_room_service&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Order room service, for example 'Can I get some food delivered to my room?' or 'I'd like to order breakfast'.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`User requested room service. Context: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slots&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Of course. What would you like to order, and what's your room number?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;check_in_status&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Inquire about check-in status, e.g., 'What's my check-in status?' or 'Is my room ready?'.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`User checking in. Context: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slots&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Please provide your reservation number or last name to check your status.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fallback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;I'm sorry, I didn't quite catch that. Can you please rephrase your request?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Simulate user interactions&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;runConversation&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;User: Can I book a table?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;reply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;conciergeAgent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Can I book a table?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Agent: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;User: I want to order some food.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;reply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;conciergeAgent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;I want to order some food.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Agent: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;User: Is my room ready?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;reply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;conciergeAgent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Is my room ready?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Agent: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;User: Tell me a joke.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Unhandled intent&lt;/span&gt;
  &lt;span class="nx"&gt;reply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;conciergeAgent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Tell me a joke.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Agent: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;runConversation&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, the &lt;code&gt;system&lt;/code&gt; prompt sets the agent's persona. Each &lt;code&gt;action&lt;/code&gt; defines a specific capability, complete with a descriptive phrase that helps the JEV model understand user intent and an asynchronous function to execute the action. The &lt;code&gt;fallback&lt;/code&gt; handles anything the agent doesn't understand. This clear, declarative structure ensures predictable behavior.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Unbeatable ROI: Cost Savings and Hyper-Responsiveness
&lt;/h2&gt;

&lt;p&gt;The architectural choice of JEV and VoiceGraph over a continuous LLM loop for intent resolution translates directly into significant business advantages:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Traditional Voice Agent (LLM Loop)&lt;/th&gt;
&lt;th&gt;Felona Voice (JEV + VoiceGraph)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Intent Decision Latency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;850ms – 1,800ms&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;~5ms&lt;/strong&gt; (Sub-10ms)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Inference Cost / Turn&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$0.02 – $0.06+ / turn&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;$0.00&lt;/strong&gt; / turn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hallucination Risk&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;High (probabilistic text tokens)&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;0%&lt;/strong&gt; (deterministic transition graph)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Network Dependency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Requires constant cloud LLM API&lt;/td&gt;
&lt;td&gt;Local/In-memory embedding matching&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Let's quantify the cost savings. Consider an enterprise handling &lt;strong&gt;50,000 customer calls per month&lt;/strong&gt;, with each call averaging &lt;strong&gt;5 conversational turns&lt;/strong&gt;. This amounts to 250,000 conversational turns monthly.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Traditional LLM-based Agent&lt;/strong&gt;: At an average cost of $0.04 per turn for LLM inference, the monthly cost for intent resolution alone would be 250,000 turns * $0.04/turn = &lt;strong&gt;$10,000&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Felona Voice Agent&lt;/strong&gt;: With JEV-powered in-memory intent matching, the cost per turn for intent resolution is effectively &lt;strong&gt;$0.00&lt;/strong&gt;. This completely eliminates the token-based LLM billing for the core decision-making process.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This represents a &lt;strong&gt;100% saving&lt;/strong&gt; on the most frequent and costly part of conversational AI – intent resolution. While you might still use specialized LLMs for complex generative responses in certain &lt;code&gt;action&lt;/code&gt; contexts, the foundational routing and decision-making are free and instant. This dramatically cuts infrastructure bills, especially at scale, leading to a 90-95% reduction in overall operating costs for voice agent interactions.&lt;/p&gt;

&lt;p&gt;Beyond cost, the sub-10ms latency is transformative. It allows for truly fluid, human-like conversations, where users can barge in seamlessly without frustrating delays. This responsiveness is critical for customer satisfaction and operational efficiency.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pluggable Audio Pipelines and Local Development
&lt;/h2&gt;

&lt;p&gt;Felona Voice isn't just about the core logic; it's a complete framework. It offers pluggable audio pipelines supporting WebSockets, WebRTC, and integrations with services like Deepgram, Whisper, ElevenLabs, and Cartesia. This flexibility means you can choose the best-of-breed ASR and TTS providers for your needs.&lt;/p&gt;

&lt;p&gt;Crucially, for local development and testing, Felona Voice requires &lt;strong&gt;zero external API keys&lt;/strong&gt; for deterministic routing. This significantly speeds up the development cycle, allowing engineers to iterate rapidly without incurring cloud costs or being dependent on external services until deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion: Embrace Deterministic Voice AI
&lt;/h2&gt;

&lt;p&gt;The future of enterprise voice AI is deterministic, hyper-responsive, and cost-efficient. Felona Voice, with its innovative JEV and VoiceGraph architecture, provides the TypeScript toolkit needed to build agents that meet these stringent demands.&lt;/p&gt;

&lt;p&gt;Move beyond the limitations of slow, expensive, and unpredictable LLM-only solutions. Empower your applications with voice agents that are fast, reliable, and truly enterprise-grade.&lt;/p&gt;




&lt;h3&gt;
  
  
  Ready to Build the Next Generation of Voice Agents?
&lt;/h3&gt;

&lt;p&gt;🌟 Star the repository on GitHub: &lt;a href="https://github.com/mohitjoer/felona_voice" rel="noopener noreferrer"&gt;github.com/mohitjoer/felona_voice&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📦 Install via npm: &lt;code&gt;npm install felona-voice&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;📖 Explore full documentation: &lt;a href="https://felona-voice.mohitjoe.tech/docs" rel="noopener noreferrer"&gt;felona-voice.mohitjoe.tech/docs&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This article was originally published on &lt;a href="https://felona-voice.mohitjoe.tech/blog/mastering-enterprise-voice-ai-deterministic-flows-felona-typescript" rel="noopener noreferrer"&gt;felona-voice.mohitjoe.tech&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>voiceai</category>
      <category>enterprise</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Mastering Predictable Voice AI: Building Enterprise Agents with Felona Voice &amp; TypeScript</title>
      <dc:creator>Felona Voice</dc:creator>
      <pubDate>Thu, 08 Oct 2026 19:09:26 +0000</pubDate>
      <link>https://dev.to/feleona_voice/mastering-predictable-voice-ai-building-enterprise-agents-with-felona-voice-typescript-4687</link>
      <guid>https://dev.to/feleona_voice/mastering-predictable-voice-ai-building-enterprise-agents-with-felona-voice-typescript-4687</guid>
      <description>&lt;p&gt;In the rapidly evolving landscape of artificial intelligence, voice agents have emerged as a critical interface for customer interactions, support, and automation. Yet, the promise of seamless, intelligent voice experiences often collides with the harsh realities of latency, cost, and unpredictability when relying solely on large language models (LLMs) for core conversational logic.&lt;/p&gt;

&lt;p&gt;Traditional LLM-driven voice agents, while powerful for open-ended conversations, frequently struggle with the demands of structured, intent-driven interactions. Imagine a banking bot needing to confirm a transaction, or a healthcare assistant scheduling an appointment. In these scenarios, milliseconds matter, accuracy is paramount, and hallucinations are unacceptable. This is precisely where &lt;strong&gt;Felona Voice&lt;/strong&gt; (&lt;a href="https://github.com/mohitjoer/felona_voice" rel="noopener noreferrer"&gt;https://github.com/mohitjoer/felona_voice&lt;/a&gt;) steps in, offering a revolutionary, open-source framework for building ultra-low-latency, deterministic voice agents in TypeScript.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Unpredictable Nature of LLM-Centric Voice AI
&lt;/h2&gt;

&lt;p&gt;Before diving into Felona Voice's innovation, let's understand the pain points of current voice AI architectures that lean heavily on LLMs for every conversational turn:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Crippling Latency:&lt;/strong&gt; Each turn requires audio transcription, sending a prompt to an LLM API, waiting for token generation (Time To First Token + subsequent tokens), and then text-to-speech synthesis. This entire loop often takes 800ms to 1800ms or more. For natural human conversation, anything above 300ms feels unnatural and disruptive, leading to awkward pauses and frustrated users.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Soaring Costs:&lt;/strong&gt; LLM APIs are typically billed per token. For high-volume applications, a few cents per turn quickly escalates into tens of thousands or even hundreds of thousands of dollars monthly, just for intent resolution and response generation.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Hallucinations and Unpredictability:&lt;/strong&gt; LLMs are probabilistic by nature. While fantastic for creative text generation, this inherent probabilistic behavior means they can sometimes 'hallucinate' or deviate from expected responses, leading to compliance risks and inconsistent user experiences, especially in regulated industries like banking or healthcare.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Complex Developer Experience:&lt;/strong&gt; Building robust, error-proof conversational flows with LLMs often devolves into intricate prompt engineering, guardrails, and retries, making the development process cumbersome and the outcomes hard to guarantee.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Felona Voice: A Paradigm Shift with JEV and VoiceGraph
&lt;/h2&gt;

&lt;p&gt;Felona Voice rethinks the core architecture of voice agents, moving beyond the limitations of auto-regressive LLM token generation for structured interactions. Its core innovation lies in the combination of &lt;strong&gt;Joint Embedding Vectors (JEV)&lt;/strong&gt; and stateful conversational transition graphs, dubbed &lt;strong&gt;VoiceGraph&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of sending an entire prompt to an LLM for every decision, Felona Voice leverages pre-computed Joint Embedding Vectors. When a user speaks, their utterance is transcribed and immediately converted into an embedding. This embedding is then compared against a set of action-specific JEVs in &lt;strong&gt;sub-10ms (~5ms)&lt;/strong&gt;, directly within memory. This similarity matching instantly determines the user's intent and triggers the appropriate action defined in your VoiceGraph.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Advantages of this approach:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Ultra-Low Latency:&lt;/strong&gt; Intent resolution happens in milliseconds, eliminating the multi-second lag of LLM inference. This enables instant barge-in and fluid, natural conversations.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Zero Hallucinations:&lt;/strong&gt; Decisions are based on deterministic similarity matching against predefined JEVs and graph transitions, not probabilistic token generation. This ensures 0% hallucination risk, vital for compliance and reliability.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Zero Token Cost for Intent Resolution:&lt;/strong&gt; Since intent matching is an in-memory operation, it incurs no per-token API costs, dramatically reducing operational expenses.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Robust State Management:&lt;/strong&gt; VoiceGraph provides a clear, auditable flow for your agent's behavior, making it easy to design, debug, and maintain complex conversational logic.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Developer Empowerment with a Fluent TypeScript API
&lt;/h2&gt;

&lt;p&gt;Felona Voice is built for developers, by developers. Its fluent TypeScript builder API makes crafting sophisticated voice agents intuitive and powerful. You define your agent's personality, available actions, and fallback behaviors with clear, concise code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createAgent&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;felona-voice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Define a simple voice agent for a concierge service&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;conciergeAgent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ConciergeBot&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;system&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You are an intelligent voice concierge for a luxury hotel. Your goal is to assist guests with bookings and information.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;book_table&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Book a restaurant reservation for a guest&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// In a real application, this would interact with a booking system&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Booking request received for: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;utterance&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Certainly, I can help with that. For what time and how many people?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;check_in&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Assist with guest check-in process&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Check-in request received for: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;utterance&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Welcome! Do you have a reservation name or number?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ask_weather&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Provide local weather information&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Simulate fetching weather data&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Weather inquiry: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;utterance&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;The current weather in our location is sunny with a temperature of 25 degrees Celsius.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fallback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;I'm sorry, I didn't quite catch that. Could you please rephrase or tell me how I can assist you today?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Simulate an interaction&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;runInteraction&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;User: Can I book a table for dinner?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;reply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;conciergeAgent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Can I book a table for dinner?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Agent: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Output: Certainly, I can help with that. For what time and how many people?&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;User: What's the weather like?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;reply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;conciergeAgent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;What's the weather like?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Agent: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Output: The current weather in our location is sunny with a temperature of 25 degrees Celsius.&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;User: Tell me a joke.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;reply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;conciergeAgent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Tell me a joke.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Agent: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Output: I'm sorry, I didn't quite catch that. Could you please rephrase or tell me how I can assist you today?&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;runInteraction&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This example demonstrates how easily you can define intents (&lt;code&gt;book_table&lt;/code&gt;, &lt;code&gt;check_in&lt;/code&gt;, &lt;code&gt;ask_weather&lt;/code&gt;) and their corresponding actions. The &lt;code&gt;fallback&lt;/code&gt; mechanism ensures graceful handling of out-of-scope requests. Furthermore, Felona Voice offers pluggable audio pipelines for seamless integration with services like WebSockets, WebRTC, Deepgram, Whisper, ElevenLabs, and Cartesia, giving you full control over your audio stack.&lt;/p&gt;

&lt;p&gt;Crucially, for local development and testing, Felona Voice allows for deterministic routing without needing any external API keys, making the development loop incredibly fast and efficient.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quantifying the Impact: Cost &amp;amp; Latency Breakdown
&lt;/h2&gt;

&lt;p&gt;Let's put the benefits into perspective with a direct comparison:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Traditional Voice Agent (LLM Loop)&lt;/th&gt;
&lt;th&gt;Felona Voice (JEV + VoiceGraph)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Intent Decision Latency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;850ms – 1,800ms&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;~5ms&lt;/strong&gt; (Sub-10ms)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Inference Cost / Turn&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$0.02 – $0.06+ / turn&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;$0.00&lt;/strong&gt; / turn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hallucination Risk&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;High (probabilistic text tokens)&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;0%&lt;/strong&gt; (deterministic transition graph)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Network Dependency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Requires constant cloud LLM API&lt;/td&gt;
&lt;td&gt;Local/In-memory embedding matching&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  The Mathematical Impact on Your Infrastructure Bill
&lt;/h3&gt;

&lt;p&gt;Consider an enterprise handling 500,000 customer calls per month, with each call averaging 5 conversational turns. This translates to 2.5 million conversational turns monthly.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Traditional LLM Approach:&lt;/strong&gt; At an average cost of $0.04 per LLM inference turn, your monthly bill for just the LLM reasoning would be $0.04 * 2,500,000 = &lt;strong&gt;$100,000&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Felona Voice Approach:&lt;/strong&gt; By leveraging in-memory JEV matching for intent resolution, Felona Voice incurs &lt;strong&gt;zero token cost&lt;/strong&gt; for these critical decision points. The primary costs shift to transcription and text-to-speech (TTS), which are necessary for &lt;em&gt;any&lt;/em&gt; voice agent. By removing the per-turn LLM inference cost, Felona Voice effectively slashes the variable operational expenditure for intent resolution by 95% or more, transforming a six-figure monthly bill into virtually nothing for the core logic.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This isn't just an optimization; it's a fundamental shift that enables massive scalability without proportional increases in operational costs for your core conversational intelligence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Predictability Matters for Enterprise Voice AI
&lt;/h2&gt;

&lt;p&gt;For enterprise applications, predictability isn't a luxury; it's a necessity. In sectors like finance, healthcare, or critical customer support, every interaction must be reliable, compliant, and consistent. The deterministic nature of Felona Voice's JEV and VoiceGraph architecture provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Compliance &amp;amp; Auditing:&lt;/strong&gt; Clear, auditable conversational paths ensure adherence to regulatory requirements.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Consistent CX:&lt;/strong&gt; Every customer receives the same high-quality, reliable experience, building trust and satisfaction.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Reduced Operational Overhead:&lt;/strong&gt; Less time spent debugging LLM prompts or dealing with unexpected responses means your team can focus on innovation, not mitigation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Get Started with Felona Voice Today!
&lt;/h2&gt;

&lt;p&gt;Felona Voice empowers you to build the next generation of voice agents: fast, reliable, cost-effective, and entirely predictable. Move beyond the chaos of LLM-centric voice AI and embrace a framework designed for enterprise-grade performance and developer satisfaction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ready to build your ultra-low-latency voice agent?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🌟 Star the repository on GitHub: &lt;a href="https://github.com/mohitjoer/felona_voice" rel="noopener noreferrer"&gt;github.com/mohitjoer/felona_voice&lt;/a&gt;&lt;br&gt;
📦 Install via npm: &lt;code&gt;npm install felona-voice&lt;/code&gt;&lt;br&gt;
📖 Explore full documentation: &lt;a href="https://felona-voice.mohitjoe.tech/docs" rel="noopener noreferrer"&gt;felona-voice.mohitjoe.tech/docs&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This article was originally published on &lt;a href="https://felona-voice.mohitjoe.tech/blog/predictable-voice-ai-enterprise-agents-felona-typescript" rel="noopener noreferrer"&gt;felona-voice.mohitjoe.tech&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>voiceai</category>
      <category>opensource</category>
      <category>ai</category>
    </item>
    <item>
      <title>Mastering Stateful Voice AI: Dynamic Graphs with Felona Voice's JEV</title>
      <dc:creator>Felona Voice</dc:creator>
      <pubDate>Tue, 06 Oct 2026 14:54:04 +0000</pubDate>
      <link>https://dev.to/feleona_voice/mastering-stateful-voice-ai-dynamic-graphs-with-felona-voices-jev-3aci</link>
      <guid>https://dev.to/feleona_voice/mastering-stateful-voice-ai-dynamic-graphs-with-felona-voices-jev-3aci</guid>
      <description>&lt;p&gt;The promise of intelligent voice agents has long captivated developers and businesses alike. Imagine a customer support bot that understands nuance, a concierge that books services instantly, or an assistant that guides users through complex processes without frustrating delays. Yet, the reality often falls short: sluggish responses, unpredictable behavior, and escalating cloud bills plague traditional voice AI solutions.&lt;/p&gt;

&lt;p&gt;Today, we're diving deep into &lt;strong&gt;Felona Voice&lt;/strong&gt;, an open-source TypeScript framework that redefines what's possible in real-time conversational AI. At its core, Felona Voice introduces a groundbreaking approach: &lt;strong&gt;VoiceGraph&lt;/strong&gt;, a stateful conversational transition graph powered by &lt;strong&gt;Joint Embedding Vectors (JEV)&lt;/strong&gt;. This powerful combination delivers sub-10ms intent resolution, zero hallucinations, and unprecedented cost savings, making truly dynamic and deterministic voice AI a reality.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Dilemma: LLMs vs. Static Graphs in Voice AI
&lt;/h2&gt;

&lt;p&gt;Traditional voice AI architectures often find themselves at a crossroads, forced to choose between two imperfect paradigms:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Pure Large Language Models (LLMs) in a Loop&lt;/strong&gt;: These offer incredible flexibility and natural language understanding. However, they come with significant drawbacks for real-time voice applications:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;High Latency&lt;/strong&gt;: Each conversational turn requires a new API call, leading to 500ms-1200ms+ per response. This breaks natural human conversation flow, leading to awkward silences and user frustration.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;High Cost&lt;/strong&gt;: Every token generated by an LLM incurs a cost. At scale (thousands to millions of calls), these costs skyrocket, turning a promising solution into a budget nightmare.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Hallucinations&lt;/strong&gt;: LLMs are probabilistic text generators. While powerful, this means they can generate factually incorrect or off-script responses, which is unacceptable for enterprise applications requiring precision and compliance (e.g., banking, healthcare).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Hardcoded, Static Conversational Graphs (IVRs)&lt;/strong&gt;: These systems are deterministic and cost-effective. They define rigid paths and expected user inputs. While reliable, they are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Inflexible&lt;/strong&gt;: Any deviation from the script, natural language variations, or barge-in attempts can break the flow, leading to a frustrating experience.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Difficult to Scale&lt;/strong&gt;: Managing complex, branching logic in static graphs quickly becomes a maintenance nightmare.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Felona Voice elegantly solves this dilemma by introducing &lt;strong&gt;VoiceGraph&lt;/strong&gt; and leveraging &lt;strong&gt;Joint Embedding Vectors (JEV)&lt;/strong&gt;, offering the best of both worlds: the flexibility of natural language understanding within a deterministic, high-performance, and cost-efficient structure.&lt;/p&gt;

&lt;h2&gt;
  
  
  VoiceGraph + JEV: The Secret Sauce for Dynamic, Stateful Voice AI
&lt;/h2&gt;

&lt;p&gt;Imagine a conversational agent that can understand the &lt;em&gt;intent&lt;/em&gt; behind a user's words with lightning speed, then use that understanding to navigate a predefined, yet flexible, conversational flow. That's the power of Felona Voice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;VoiceGraph&lt;/strong&gt; provides the structured backbone. It's a stateful conversational transition graph where each node represents a specific conversational state or action, and edges define valid transitions. This ensures deterministic behavior and prevents hallucinations, as the agent always operates within a known, controlled domain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Joint Embedding Vectors (JEV)&lt;/strong&gt; are the game-changer for dynamic traversal within this graph. Instead of sending user input to an LLM for interpretation, Felona Voice transforms both user utterances and predefined action descriptions into JEVs. When a user speaks, their utterance's JEV is compared against the JEVs of all valid actions/intents within the current VoiceGraph state using ultra-fast similarity matching. This entire process happens in &lt;strong&gt;sub-10ms (~5ms)&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  How it works:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Semantic Encoding&lt;/strong&gt;: Each action within your &lt;code&gt;VoiceGraph&lt;/code&gt; (e.g., &lt;code&gt;book_table&lt;/code&gt;, &lt;code&gt;check_status&lt;/code&gt;) is semantically encoded into a JEV.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;User Utterance&lt;/strong&gt;: When a user speaks, their speech is transcribed, and the text is also encoded into a JEV.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Ultra-Fast Matching&lt;/strong&gt;: Felona Voice performs an in-memory cosine similarity comparison between the user's utterance JEV and the JEVs of all available actions/intents at that specific point in the conversation.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Deterministic Transition&lt;/strong&gt;: Based on the highest similarity score, the agent deterministically triggers the corresponding action and transitions to the next state in the &lt;code&gt;VoiceGraph&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This synergy means your agent is both &lt;strong&gt;dynamic&lt;/strong&gt; (interpreting natural language via JEV) and &lt;strong&gt;deterministic&lt;/strong&gt; (operating within the defined &lt;code&gt;VoiceGraph&lt;/code&gt; structure). It can handle barge-in, context switching, and complex multi-turn conversations with unparalleled speed and accuracy, without ever generating an off-script response.&lt;/p&gt;

&lt;h2&gt;
  
  
  Developer Experience: Fluent &amp;amp; Powerful
&lt;/h2&gt;

&lt;p&gt;Felona Voice is designed for developers, offering a fluent builder API in TypeScript that makes agent creation intuitive and powerful.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createAgent&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;felona-voice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Define your agent&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Concierge&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;system&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You are an intelligent voice concierge for a luxury hotel.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;book_table&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Book a restaurant reservation&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// In a real app, you'd integrate with a booking system&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Booking table for: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;utterance&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Certainly, I've noted your request to book a table. What time and for how many people?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;check_in&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Check into your room&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Checking in: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;utterance&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Welcome! Do you have a reservation number or a last name?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;request_valet&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Request valet service for your car&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Valet requested: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;utterance&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Valet service has been dispatched to your location. Please wait outside.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fallback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;I'm sorry, I didn't understand that. How can I assist you with hotel services?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Interact with the agent&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;reply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Can I book a table?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Agent: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Agent: Certainly, I've noted your request to book a table. What time and for how many people?&lt;/span&gt;

  &lt;span class="nx"&gt;reply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;I'd like to check in.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Agent: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Agent: Welcome! Do you have a reservation number or a last name?&lt;/span&gt;

  &lt;span class="nx"&gt;reply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;I need my car from the valet.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Agent: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Agent: Valet service has been dispatched to your location. Please wait outside.&lt;/span&gt;

  &lt;span class="nx"&gt;reply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Tell me a joke.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Agent: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Agent: I'm sorry, I didn't understand that. How can I assist you with hotel services?&lt;/span&gt;
&lt;span class="p"&gt;})();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Felona Voice also boasts pluggable audio pipelines, supporting WebSockets, WebRTC, Deepgram, Whisper, ElevenLabs, and Cartesia, ensuring flexibility for any deployment scenario. Crucially, for local development and deterministic routing, &lt;strong&gt;zero external API keys are needed&lt;/strong&gt;, allowing for rapid prototyping and testing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Cost &amp;amp; Latency Revolution: Why JEV Trumps LLMs
&lt;/h2&gt;

&lt;p&gt;This is where Felona Voice delivers truly transformative value for businesses. The architectural shift from auto-regressive LLM token generation to in-memory JEV similarity matching fundamentally alters the cost and performance profile of voice agents at scale.&lt;/p&gt;

&lt;p&gt;Let's break down the numbers:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Traditional Voice Agent (LLM Loop)&lt;/th&gt;
&lt;th&gt;Felona Voice (JEV + VoiceGraph)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Intent Decision Latency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;850ms – 1,800ms&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;~5ms&lt;/strong&gt; (Sub-10ms)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Inference Cost / Turn&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$0.02 – $0.06+ / turn&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;$0.00&lt;/strong&gt; / turn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hallucination Risk&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;High (probabilistic text tokens)&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;0%&lt;/strong&gt; (deterministic transition graph)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Network Dependency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Requires constant cloud LLM API&lt;/td&gt;
&lt;td&gt;Local/In-memory embedding matching&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  The Mathematical Advantage:
&lt;/h3&gt;

&lt;p&gt;Consider an enterprise handling &lt;strong&gt;100,000 conversational turns per month&lt;/strong&gt;. With a traditional LLM-based agent, even at a conservative $0.03 per turn, your monthly inference bill would be $3,000.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Traditional LLM Cost&lt;/strong&gt;: 100,000 turns * $0.03/turn = &lt;strong&gt;$3,000 / month&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With Felona Voice, the JEV similarity matching occurs entirely in-memory or on a local vector database. Once the embeddings are generated (a one-time or infrequent cost), the subsequent matching operations incur &lt;strong&gt;zero per-turn inference cost&lt;/strong&gt;. The only costs are for the underlying compute (which is minimal for ~5ms operations) and any external ASR/TTS services, which you'd pay for regardless. For the intent resolution itself, the cost is effectively &lt;strong&gt;$0.00 per turn&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Felona Voice JEV Cost&lt;/strong&gt;: 100,000 turns * $0.00/turn = &lt;strong&gt;$0.00 / month&lt;/strong&gt; (for intent resolution)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This translates to a &lt;strong&gt;90-95% reduction in infrastructure bills&lt;/strong&gt; specifically for the core intelligence of your voice agent when scaling to thousands or even millions of calls. The savings are massive and directly impact your bottom line, transforming voice AI from a cost center into a powerful, efficient tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-World Impact: Enterprise-Grade Control
&lt;/h2&gt;

&lt;p&gt;For industries like banking, healthcare, and high-volume customer support, the benefits of Felona Voice are immense:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Compliance &amp;amp; Accuracy&lt;/strong&gt;: Zero hallucination risk ensures that agents always adhere to predefined scripts and never provide incorrect information, crucial for regulated environments.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Superior User Experience&lt;/strong&gt;: Sub-10ms latency eliminates awkward pauses, allowing for fluid, natural conversations, even with complex requests or barge-ins.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Scalability &amp;amp; Cost-Efficiency&lt;/strong&gt;: Drastically reduced per-turn costs mean you can scale your voice operations without fear of ballooning cloud bills.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Dynamic, Yet Controlled&lt;/strong&gt;: VoiceGraph provides the necessary structure and control, while JEV allows for the dynamic interpretation of natural language, striking the perfect balance for complex enterprise workflows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Felona Voice empowers you to build sophisticated voice agents that are not only intelligent and responsive but also predictable, compliant, and incredibly cost-effective. It's time to move beyond the limitations of legacy systems and embrace the future of conversational AI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Started with Felona Voice Today!
&lt;/h2&gt;

&lt;p&gt;Ready to build ultra-low-latency, deterministic, and cost-efficient voice agents? Felona Voice is your answer.&lt;/p&gt;

&lt;p&gt;🌟 &lt;strong&gt;Star the repository on GitHub&lt;/strong&gt;: &lt;a href="https://github.com/mohitjoer/felona_voice" rel="noopener noreferrer"&gt;github.com/mohitjoer/felona_voice&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📦 &lt;strong&gt;Install via npm&lt;/strong&gt;: &lt;code&gt;npm install felona-voice&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;📖 &lt;strong&gt;Explore full documentation&lt;/strong&gt;: &lt;a href="https://felona-voice.mohitjoe.tech/docs" rel="noopener noreferrer"&gt;felona-voice.mohitjoe.tech/docs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Join the open-source movement and revolutionize your voice AI applications with Felona Voice!&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This article was originally published on &lt;a href="https://felona-voice.mohitjoe.tech/blog/stateful-voice-ai-dynamic-graphs-felona-voice-jev" rel="noopener noreferrer"&gt;felona-voice.mohitjoe.tech&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>voiceai</category>
      <category>typescript</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Beyond Generative AI: Why Streaming LLMs Fail Structured Voice, and JEV Wins</title>
      <dc:creator>Felona Voice</dc:creator>
      <pubDate>Thu, 01 Oct 2026 18:42:13 +0000</pubDate>
      <link>https://dev.to/feleona_voice/beyond-generative-ai-why-streaming-llms-fail-structured-voice-and-jev-wins-4h1</link>
      <guid>https://dev.to/feleona_voice/beyond-generative-ai-why-streaming-llms-fail-structured-voice-and-jev-wins-4h1</guid>
      <description>&lt;p&gt;The promise of conversational AI has always been grand: natural, fluid interactions that feel human. Yet, for all the advancements in large language models (LLMs), a glaring gap persists in real-time, structured voice AI. We've been trying to fit a square peg in a round hole, using auto-regressive, token-generating LLMs for tasks that demand precision, speed, and determinism. It's time to acknowledge the fundamental mismatch and embrace a new paradigm: &lt;strong&gt;Felona Voice&lt;/strong&gt;, powered by Joint Embedding Vectors (JEV) and stateful conversational transition graphs (VoiceGraph).&lt;/p&gt;

&lt;h2&gt;
  
  
  The LLM Paradigm: A Costly Latency Trap for Structured Voice
&lt;/h2&gt;

&lt;p&gt;Traditional voice agents, often built around a loop of ASR -&amp;gt; LLM -&amp;gt; TTS, face inherent limitations when applied to structured conversational flows like booking a table, checking an account balance, or routing a customer service call. Here's why the streaming LLM approach fundamentally struggles:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Crippling Latency&lt;/strong&gt;: LLMs are auto-regressive, meaning they generate responses token by token. This process involves: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Time To First Token (TTFT)&lt;/strong&gt;: The initial delay before any output begins (often 200-500ms).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Token Generation Time&lt;/strong&gt;: Subsequent tokens are generated sequentially. 
For a typical conversational turn, this translates to an &lt;strong&gt;850ms to 1,800ms+&lt;/strong&gt; delay for the LLM to process input and formulate a response (even if it's just a decision for the next action). This latency breaks natural human conversation, making barge-in difficult and creating awkward silences.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Astronomical Costs at Scale&lt;/strong&gt;: Every interaction with an LLM, no matter how simple the intent resolution, consumes tokens. At scale, this becomes a significant infrastructure cost. Imagine a contact center handling tens of thousands or hundreds of thousands of calls a month, each with multiple conversational turns. Every turn means paying for input and output tokens, even for simple 'yes/no' or intent confirmation. These costs quickly escalate into tens of thousands of dollars monthly for intent resolution alone, let alone full generative responses.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Hallucinations and Lack of Determinism&lt;/strong&gt;: LLMs are probabilistic by nature. While fantastic for creative generation, this probabilistic approach leads to 'hallucinations' – generating plausible but incorrect or off-script responses. For enterprise applications in banking, healthcare, or critical customer support, non-deterministic behavior and the risk of generating inaccurate information are simply unacceptable. Compliance and user trust demand predictable outcomes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Heavy Network Dependency&lt;/strong&gt;: Relying on external cloud LLM APIs means constant network round-trips for every decision. This adds to latency and introduces points of failure, making local testing and development cumbersome without API keys.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Felona Voice Revolution: Precision with Joint Embedding Vectors (JEV)
&lt;/h2&gt;

&lt;p&gt;Felona Voice (&lt;a href="https://github.com/mohitjoer/felona_voice" rel="noopener noreferrer"&gt;https://github.com/mohitjoer/felona_voice&lt;/a&gt;) introduces a paradigm shift by recognizing that &lt;em&gt;structured voice AI doesn't need generative reasoning for intent resolution&lt;/em&gt;. Instead, it leverages &lt;strong&gt;Joint Embedding Vectors (JEV)&lt;/strong&gt; and &lt;strong&gt;VoiceGraph&lt;/strong&gt; to deliver unparalleled performance:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Joint Embedding Vectors (JEV)&lt;/strong&gt;: Instead of generating text, Felona Voice embeds both the user's spoken input and the predefined actions/intents of your agent into a shared vector space. When a user speaks, their utterance is embedded, and a lightning-fast similarity search determines the closest matching action. This completely bypasses the slow, token-by-token generation process of LLMs for intent resolution.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;VoiceGraph: Stateful Conversational Transition Graphs&lt;/strong&gt;: Felona Voice uses a &lt;code&gt;VoiceGraph&lt;/code&gt; – a deterministic, stateful graph that defines the conversational flow. JEV similarity matching then guides the agent through this graph, ensuring predictable and precise transitions. This eliminates hallucinations entirely because the agent's actions are explicitly defined and matched, not probabilistically generated.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Result: Unprecedented Speed and Efficiency
&lt;/h3&gt;

&lt;p&gt;By leveraging JEV for intent resolution, Felona Voice achieves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Ultra-low Latency&lt;/strong&gt;: Intent decisions are made in &lt;strong&gt;sub-10ms (~5ms)&lt;/strong&gt;. This is an order of magnitude faster than LLMs, enabling instant barge-in and truly natural, real-time conversational turns.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Zero Cost for Intent Resolution&lt;/strong&gt;: JEV matching is an in-memory operation. There are no tokens to generate, no external API calls for intent. This means &lt;strong&gt;$0.00 per conversational turn&lt;/strong&gt; for intent resolution.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Zero Hallucinations&lt;/strong&gt;: With a deterministic &lt;code&gt;VoiceGraph&lt;/code&gt; guided by precise JEV matching, your agent will always follow defined paths, ensuring compliance and reliability.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Local-First Development&lt;/strong&gt;: Test and develop your voice agents locally without needing any external API keys for deterministic routing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Felona Voice in Action: TypeScript Simplicity
&lt;/h2&gt;

&lt;p&gt;Felona Voice is built for developers, offering a fluent TypeScript API that makes building sophisticated voice agents intuitive. Let's see how simple it is to define an agent with precise actions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createAgent&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;felona-voice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;MyAgentContext&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;userName&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;tableSize&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;createAgent&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;MyAgentContext&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;RestaurantConcierge&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;system&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You are an intelligent voice concierge for 'The Golden Spoon' restaurant. Your primary goal is to book tables and answer FAQs.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;book_table&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Book a restaurant reservation. I want to reserve a table. Can I get a booking?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// In a real app, you'd extract parameters from 'input' or prompt for them&lt;/span&gt;
      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tableSize&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Certainly! For how many people would you like to book a table?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="c1"&gt;// Simulate booking logic&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Booking a table for &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tableSize&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; people.`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`Okay, I've booked a table for &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tableSize&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; people. Is there anything else?`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;check_hours&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;What are your operating hours? When are you open?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;The Golden Spoon is open Monday to Saturday, from 5 PM to 11 PM.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;greet_user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello. Hi there. Good morning. Good afternoon. Good evening.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;userName&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`Welcome back, &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;userName&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;! How can I assist you today?`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello! Welcome to The Golden Spoon. How may I help you?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fallback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;I'm sorry, I didn't quite catch that. How can I assist you today?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Example interaction&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;runConversation&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;currentContext&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;MyAgentContext&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;

  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;reply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hi&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;currentContext&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Agent: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Agent: Hello! Welcome to The Golden Spoon. How may I help you?&lt;/span&gt;

  &lt;span class="nx"&gt;currentContext&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;currentContext&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="nx"&gt;reply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;I'd like to book a table&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;currentContext&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Agent: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Agent: Certainly! For how many people would you like to book a table?&lt;/span&gt;

  &lt;span class="nx"&gt;currentContext&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;currentContext&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="nx"&gt;reply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;For four people&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;currentContext&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;currentContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tableSize&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Manually update context for this example&lt;/span&gt;
  &lt;span class="nx"&gt;reply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;currentContext&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Re-interact to trigger action with updated context&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Agent: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Agent: Okay, I've booked a table for 4 people. Is there anything else?&lt;/span&gt;

  &lt;span class="nx"&gt;currentContext&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;currentContext&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;context&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="nx"&gt;reply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;What are your hours?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;currentContext&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Agent: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Agent: The Golden Spoon is open Monday to Saturday, from 5 PM to 11 PM.&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;runConversation&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Felona Voice also offers pluggable audio pipelines for WebSockets, WebRTC, Deepgram, Whisper, ElevenLabs, and Cartesia, ensuring flexibility for your production environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Stark Reality: Traditional Voice Agent (LLM Loop) vs. Felona Voice (JEV + VoiceGraph)
&lt;/h2&gt;

&lt;p&gt;Let's put the architectural differences into perspective:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Traditional Voice Agent (LLM Loop)&lt;/th&gt;
&lt;th&gt;Felona Voice (JEV + VoiceGraph)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Intent Decision Latency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;850ms – 1,800ms&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;~5ms&lt;/strong&gt; (Sub-10ms)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Inference Cost / Turn&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$0.02 – $0.06+ / turn&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;$0.00&lt;/strong&gt; / turn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hallucination Risk&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;High (probabilistic text tokens)&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;0%&lt;/strong&gt; (deterministic transition graph)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Network Dependency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Requires constant cloud LLM API&lt;/td&gt;
&lt;td&gt;Local/In-memory embedding matching&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Developer Experience&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Complex prompt engineering, slow iteration&lt;/td&gt;
&lt;td&gt;Fluent builder API, fast local testing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  The Mathematical Truth: 90-95% Cost Reduction
&lt;/h3&gt;

&lt;p&gt;Let's quantify the cost savings. Consider an enterprise-level voice agent handling &lt;strong&gt;50,000 calls per month&lt;/strong&gt;, with an average of &lt;strong&gt;5 conversational turns per call&lt;/strong&gt; for intent resolution. This amounts to &lt;strong&gt;250,000 intent decisions per month&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Traditional LLM Approach&lt;/strong&gt;: At an average cost of $0.04 per turn (a conservative estimate for a mix of input/output tokens), your monthly bill for &lt;em&gt;intent resolution alone&lt;/em&gt; would be: &lt;br&gt;
&lt;code&gt;250,000 turns * $0.04/turn = $10,000 per month&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Felona Voice Approach&lt;/strong&gt;: With JEV-powered intent resolution, the cost per turn is &lt;strong&gt;$0.00&lt;/strong&gt;. This means your monthly bill for intent resolution is:&lt;br&gt;
&lt;code&gt;250,000 turns * $0.00/turn = $0 per month&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This represents a &lt;strong&gt;100% saving&lt;/strong&gt; on the intent resolution component of your voice agent's operation. When you factor in the additional costs of LLM inference for &lt;em&gt;generative responses&lt;/em&gt; (which Felona Voice can still integrate for, but only when truly needed), the overall savings on infrastructure bills can easily exceed &lt;strong&gt;90-95%&lt;/strong&gt; for systems that primarily rely on structured interactions.&lt;/p&gt;

&lt;p&gt;This isn't just an optimization; it's a fundamental shift that makes high-volume, real-time voice AI economically viable and technically superior for structured use cases.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Future of Structured Voice AI is Here
&lt;/h2&gt;

&lt;p&gt;The era of forcing generative LLMs into every voice AI problem, regardless of suitability, is coming to an end. For structured, real-time, and mission-critical voice interactions, the architectural shortcomings of streaming LLMs are simply too great. Felona Voice offers a purpose-built, highly performant, and cost-effective alternative by leveraging Joint Embedding Vectors and VoiceGraph.&lt;/p&gt;

&lt;p&gt;It's time to build voice agents that truly feel real-time, are reliably deterministic, and won't break the bank. Embrace the future of voice AI with Felona Voice.&lt;/p&gt;




&lt;p&gt;🌟 &lt;strong&gt;Star the repository on GitHub:&lt;/strong&gt; &lt;a href="https://github.com/mohitjoer/felona_voice" rel="noopener noreferrer"&gt;github.com/mohitjoer/felona_voice&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📦 &lt;strong&gt;Install via npm:&lt;/strong&gt; &lt;code&gt;npm install felona-voice&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;📖 &lt;strong&gt;Explore full documentation:&lt;/strong&gt; &lt;a href="https://felona-voice.mohitjoe.tech/docs" rel="noopener noreferrer"&gt;felona-voice.mohitjoe.tech/docs&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This article was originally published on &lt;a href="https://felona-voice.mohitjoe.tech/blog/streaming-llms-vs-jev-structured-voice-ai-felona" rel="noopener noreferrer"&gt;felona-voice.mohitjoe.tech&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>voiceai</category>
      <category>llms</category>
      <category>embeddings</category>
    </item>
    <item>
      <title>Beyond Generative LLMs: Architecting Sub-10ms Voice AI with Felona Voice</title>
      <dc:creator>Felona Voice</dc:creator>
      <pubDate>Mon, 28 Sep 2026 20:03:21 +0000</pubDate>
      <link>https://dev.to/feleona_voice/beyond-generative-llms-architecting-sub-10ms-voice-ai-with-felona-voice-37dp</link>
      <guid>https://dev.to/feleona_voice/beyond-generative-llms-architecting-sub-10ms-voice-ai-with-felona-voice-37dp</guid>
      <description>&lt;p&gt;The promise of conversational AI has always been a natural, instantaneous interaction. Yet, for many developers building voice agents, the reality has often been a frustrating battle against latency, unpredictable responses, and escalating cloud costs. We've largely relied on large language models (LLMs) to power these interactions, leveraging their incredible generative capabilities. But what if the very architecture of generative LLMs is fundamentally misaligned with the requirements of real-time, structured voice interactions?&lt;/p&gt;

&lt;p&gt;Enter &lt;strong&gt;Felona Voice&lt;/strong&gt;, an open-source, ultra-low-latency voice agent framework for TypeScript that dares to challenge this paradigm. It redefines how we build voice AI by moving beyond the auto-regressive token generation of LLMs, introducing a groundbreaking architecture powered by Joint Embedding Vectors (JEV) and stateful conversational transition graphs (VoiceGraph).&lt;/p&gt;

&lt;h2&gt;
  
  
  The LLM Bottleneck: Why Generative Models Falter in Voice AI
&lt;/h2&gt;

&lt;p&gt;Traditional voice agents often follow a simple, yet costly and slow, loop:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Speech-to-Text (ASR):&lt;/strong&gt; User speaks, audio is converted to text.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;LLM Inference:&lt;/strong&gt; The text prompt is sent to an LLM, which generates a response.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Text-to-Speech (TTS):&lt;/strong&gt; The LLM's text response is converted back to audio and played to the user.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;While LLMs excel at open-ended conversations and creative text generation, this architecture introduces several critical challenges for structured voice agents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Crippling Latency:&lt;/strong&gt; The LLM inference step is a major bottleneck. There's the "Time To First Token" (TTFT) and then the subsequent token generation. For a typical conversational turn, this can easily add &lt;strong&gt;500ms to 1200ms or more&lt;/strong&gt; &lt;em&gt;per turn&lt;/em&gt; to the interaction. This often leads to awkward pauses, broken conversational flow, and prevents natural barge-in capabilities.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Exploding Costs:&lt;/strong&gt; Every interaction with an LLM incurs token costs. For applications scaling to thousands or hundreds of thousands of calls per month, these micro-transactions quickly accumulate into significant cloud bills. Even small context windows add up.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Hallucinations and Undeterministic Behavior:&lt;/strong&gt; LLMs are probabilistic by nature. While powerful, this means they can sometimes generate irrelevant, incorrect, or "hallucinated" responses. For enterprise applications in banking, healthcare, or critical customer support, this lack of deterministic control is a non-starter.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Network Dependency:&lt;/strong&gt; Constant API calls to remote LLMs introduce network overhead and potential points of failure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These issues highlight an architectural mismatch: we're using a powerful, general-purpose text generator for a task that often requires precise intent recognition and deterministic action execution.&lt;/p&gt;

&lt;h2&gt;
  
  
  Felona Voice's Paradigm Shift: JEV and VoiceGraph
&lt;/h2&gt;

&lt;p&gt;Felona Voice tackles these challenges head-on by fundamentally re-thinking the core of voice agent intelligence. Instead of &lt;em&gt;generating&lt;/em&gt; a response from scratch, Felona Voice focuses on &lt;em&gt;matching&lt;/em&gt; user intent to predefined actions using &lt;strong&gt;Joint Embedding Vectors (JEV)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here's how it works:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Intent Embedding:&lt;/strong&gt; When you define an action in Felona Voice, you provide a description. This description (and potentially other examples) is converted into a numerical vector (an embedding). User utterances are also converted into embeddings.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;JEV Similarity Matching:&lt;/strong&gt; Instead of sending a prompt to an LLM, Felona Voice takes the user's utterance embedding and compares it against the embeddings of all available actions/intents in your &lt;strong&gt;VoiceGraph&lt;/strong&gt;. This similarity matching is an incredibly fast, in-memory operation.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;VoiceGraph for Stateful Transitions:&lt;/strong&gt; The &lt;code&gt;VoiceGraph&lt;/code&gt; provides the crucial context. It's a stateful conversational transition graph that guides the agent. Based on the current state and the highest JEV similarity match, Felona Voice deterministically decides the next action.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This architecture delivers mind-blowing performance:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Sub-10ms Intent Resolution:&lt;/strong&gt; Because it's an in-memory vector similarity lookup, Felona Voice resolves user intent in &lt;strong&gt;~5ms&lt;/strong&gt;. This is orders of magnitude faster than any LLM-based approach, enabling instant barge-in and truly fluid conversations.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Zero Hallucinations:&lt;/strong&gt; The decision-making is deterministic. If an intent matches, the defined action is executed. If not, the fallback is triggered. There's no probabilistic text generation to introduce errors.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Massive Cost Reduction:&lt;/strong&gt; Since the core intent resolution doesn't require constant LLM API calls, the operational cost for this crucial step drops to virtually zero.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Developer Experience: Fluent and Powerful
&lt;/h2&gt;

&lt;p&gt;Felona Voice is designed with developers in mind, offering a fluent builder API in TypeScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createAgent&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;felona-voice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Define your voice agent&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Concierge&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;system&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You are an intelligent voice concierge. Your goal is to assist users with hotel-related requests.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;book_table&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Book a restaurant reservation; I want to reserve a table; Can I get a booking?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;User wants to book a table.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="c1"&gt;// In a real app, you'd integrate with a booking system&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Certainly, I can help you book a table. What time and for how many people?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;request_room_service&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Order room service; I need food delivered to my room; Can I get something to eat?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;User wants room service.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Of course, what would you like to order from room service?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fallback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;I'm sorry, I didn't quite catch that. How can I assist you with your hotel stay?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Simulate user interaction&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;runInteraction&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Agent: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello, I'd like to reserve a table for dinner.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Agent: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;I need some food delivered to my room.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Agent: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Tell me a joke.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt; &lt;span class="c1"&gt;// This should hit fallback&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;runInteraction&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This API allows you to define actions, their descriptions (which form the basis for JEV matching), and their associated logic. Felona Voice also offers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Pluggable Audio Pipelines:&lt;/strong&gt; Easily integrate with WebSockets, WebRTC, Deepgram, Whisper, ElevenLabs, and Cartesia for end-to-end audio handling.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Zero External API Keys for Local Testing:&lt;/strong&gt; For deterministic routing and local development, you don't need any external LLM API keys, streamlining your development workflow.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Numbers Don't Lie: Cost and Latency Breakdown
&lt;/h2&gt;

&lt;p&gt;This architectural shift translates directly into tangible benefits for your bottom line and user experience:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Traditional Voice Agent (LLM Loop)&lt;/th&gt;
&lt;th&gt;Felona Voice (JEV + VoiceGraph)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Intent Decision Latency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;850ms – 1,800ms&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~5ms (Sub-10ms)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Inference Cost / Turn&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$0.02 – $0.06+ / turn&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$0.00 / turn&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hallucination Risk&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;High (probabilistic text tokens)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0% (deterministic graph)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Network Dependency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Requires constant cloud LLM API&lt;/td&gt;
&lt;td&gt;Local/In-memory embedding matching&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  The Math Behind 90-95% Cost Reduction
&lt;/h3&gt;

&lt;p&gt;Let's consider an enterprise-scale voice agent handling 100,000 conversational turns per month. If each LLM inference for intent resolution costs, conservatively, $0.04:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Traditional LLM Cost:&lt;/strong&gt; 100,000 turns * $0.04/turn = &lt;strong&gt;$4,000 per month&lt;/strong&gt; (just for LLM inference, excluding ASR/TTS).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With Felona Voice, the core intent resolution using JEV is an in-memory operation, incurring &lt;strong&gt;$0.00&lt;/strong&gt; in API fees. While you still pay for ASR and TTS services (which Felona Voice integrates with), the most expensive and slowest part of the LLM loop—the generative inference—is eliminated for structured intent handling.&lt;/p&gt;

&lt;p&gt;This means that for the &lt;em&gt;intent resolution component&lt;/em&gt;, you achieve a &lt;strong&gt;100% cost saving&lt;/strong&gt;. When factoring in the overall cost of ASR, TTS, and intent resolution, Felona Voice can easily reduce your monthly infrastructure bills by &lt;strong&gt;90-95%&lt;/strong&gt; compared to a heavily LLM-dependent architecture, especially for high-volume, structured interactions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-World Impact: Where Felona Voice Shines
&lt;/h2&gt;

&lt;p&gt;This architecture is a game-changer for applications requiring:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;High-Volume Customer Support:&lt;/strong&gt; Instantly route calls, answer FAQs, and complete transactions without frustrating delays.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Interactive IVRs:&lt;/strong&gt; Replace rigid, number-based IVRs with natural language interfaces that are fast and intuitive.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Transactional Voice Agents:&lt;/strong&gt; Securely guide users through purchases, bookings, or data entry with deterministic outcomes.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Voice Control for Devices:&lt;/strong&gt; Offer snappy, reliable voice commands for smart homes, industrial interfaces, or automotive systems.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion: The Future of Voice AI is Fast, Deterministic, and Open Source
&lt;/h2&gt;

&lt;p&gt;Felona Voice represents a significant leap forward in voice AI. By recognizing the architectural limitations of generative LLMs for structured, real-time interactions and instead leveraging the power of Joint Embedding Vectors and deterministic VoiceGraphs, it delivers unparalleled speed, cost efficiency, and reliability.&lt;/p&gt;

&lt;p&gt;It's time to build voice agents that truly feel natural and responsive, without breaking the bank or sacrificing control. Join the movement towards a more efficient and effective voice AI future.&lt;/p&gt;

&lt;h3&gt;
  
  
  Get Started with Felona Voice Today!
&lt;/h3&gt;

&lt;p&gt;🌟 Star the repository on GitHub: &lt;a href="https://github.com/mohitjoer/felona_voice" rel="noopener noreferrer"&gt;github.com/mohitjoer/felona_voice&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📦 Install via npm: &lt;code&gt;npm install felona-voice&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;📖 Explore full documentation: &lt;a href="https://felona-voice.mohitjoe.tech/docs" rel="noopener noreferrer"&gt;felona-voice.mohitjoe.tech/docs&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This article was originally published on &lt;a href="https://felona-voice.mohitjoe.tech/blog/beyond-generative-llms-felona-voice-architecture" rel="noopener noreferrer"&gt;felona-voice.mohitjoe.tech&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>voiceai</category>
      <category>llm</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Voice AI Latency &amp; Cost: Felona Voice Cuts LLM Inference by 95% with JEV</title>
      <dc:creator>Felona Voice</dc:creator>
      <pubDate>Sun, 27 Sep 2026 15:34:59 +0000</pubDate>
      <link>https://dev.to/feleona_voice/voice-ai-latency-cost-felona-voice-cuts-llm-inference-by-95-with-jev-3nfd</link>
      <guid>https://dev.to/feleona_voice/voice-ai-latency-cost-felona-voice-cuts-llm-inference-by-95-with-jev-3nfd</guid>
      <description>&lt;p&gt;The promise of natural, low-latency voice AI has long been tantalizing, yet often constrained by the realities of cost and performance. Traditional voice agents, relying heavily on large language models (LLMs) for conversational intelligence, frequently fall short of real-time expectations and rack up significant infrastructure bills. But what if there was a better way? An open-source, TypeScript-native framework that delivers sub-10ms intent routing with zero token cost and zero hallucinations?&lt;/p&gt;

&lt;p&gt;Enter &lt;strong&gt;Felona Voice&lt;/strong&gt;, a groundbreaking open-source project that’s redefining the economics and performance of voice AI. At its core, Felona Voice leverages &lt;strong&gt;Joint Embedding Vectors (JEV)&lt;/strong&gt; to achieve neural routing that’s not just fast, but virtually free for structured conversational turns. Let's dive deep into why this innovation is a game-changer for your next voice AI project.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Latency &amp;amp; Cost Conundrum of Traditional LLM-First Voice Agents
&lt;/h3&gt;

&lt;p&gt;Most modern voice agents follow a similar, expensive, and slow pipeline:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Speech-to-Text (STT)&lt;/strong&gt;: User's speech is converted to text (e.g., Deepgram, Whisper).&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;LLM Inference&lt;/strong&gt;: The transcribed text is sent to an LLM (e.g., GPT-4o, Claude 3 Opus) to understand intent, generate a response, or decide the next action.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Text-to-Speech (TTS)&lt;/strong&gt;: The LLM's text output is converted back into natural-sounding speech (e.g., ElevenLabs, Cartesia).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;While powerful for open-ended dialog, this LLM-centric approach introduces several critical bottlenecks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;High Latency&lt;/strong&gt;: Each step involves network round-trips and significant processing time. STT, LLM inference (especially for larger models or longer responses), and TTS can easily accumulate to 500ms, 800ms, or even 1200ms+ per conversational turn. This makes for a frustrating, unnatural user experience.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Exorbitant Costs&lt;/strong&gt;: LLM API calls are priced per token. A single conversational turn, including input and output tokens, can cost anywhere from $0.02 to $0.06 or more, depending on the model and token count. These costs scale linearly and rapidly become prohibitive for high-volume applications.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Hallucination Risk&lt;/strong&gt;: LLMs are probabilistic text generators. While incredibly capable, they can &lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;This article was originally published on &lt;a href="https://felona-voice.mohitjoe.tech/blog/voice-ai-cost-latency-felona-voice-jev" rel="noopener noreferrer"&gt;felona-voice.mohitjoe.tech&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
    </item>
    <item>
      <title>Unlock Sub-10ms Voice AI: Real-time Agents with TypeScript &amp; Felona Voice</title>
      <dc:creator>Felona Voice</dc:creator>
      <pubDate>Sun, 27 Sep 2026 15:32:24 +0000</pubDate>
      <link>https://dev.to/feleona_voice/unlock-sub-10ms-voice-ai-real-time-agents-with-typescript-felona-voice-356</link>
      <guid>https://dev.to/feleona_voice/unlock-sub-10ms-voice-ai-real-time-agents-with-typescript-felona-voice-356</guid>
      <description>&lt;p&gt;The dream of truly real-time, human-like voice agents has long been hampered by one critical bottleneck: latency. Traditional voice AI systems, heavily reliant on large language models (LLMs) for conversational understanding and response generation, introduce significant delays. We're talking 500ms to 1200ms or more per conversational turn, creating an awkward, unnatural experience that frustrates users and limits adoption.&lt;/p&gt;

&lt;p&gt;But what if you could eliminate that latency? What if your voice agent could understand intent and react in mere milliseconds, without sacrificing accuracy or breaking the bank? Enter &lt;strong&gt;Felona Voice&lt;/strong&gt; – an innovative, open-source TypeScript framework designed to build ultra-low-latency voice agents that feel genuinely real-time.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Latency &amp;amp; Cost Problem with Traditional LLM Voice Agents
&lt;/h2&gt;

&lt;p&gt;Let's face it: LLMs are powerful, but they're not built for instant, sub-10ms decision-making in high-volume voice interactions. Here's why traditional approaches struggle:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;High Latency:&lt;/strong&gt; Every conversational turn often involves an API call to a remote LLM. This introduces network latency, processing time on the LLM server, and token generation time. The combined effect easily pushes response times into the hundreds of milliseconds, creating noticeable pauses.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Exorbitant Costs:&lt;/strong&gt; Each LLM API call costs money, typically per token. At scale, with thousands or millions of interactions, these costs quickly skyrocket, making real-time voice AI a luxury few can afford.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Hallucination Risk:&lt;/strong&gt; LLMs are probabilistic by nature. While incredibly creative, they can sometimes generate inaccurate or off-topic responses, leading to frustrating user experiences and a lack of control for developers.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Rigid Static Graphs:&lt;/strong&gt; On the other end of the spectrum, hardcoded decision trees are fast and deterministic but too brittle. They break down the moment a user deviates slightly from the expected script, leading to dead ends and frustrated users.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Felona Voice: The Sub-10ms Revolution Powered by JEVs and VoiceGraph
&lt;/h2&gt;

&lt;p&gt;Felona Voice tackles these challenges head-on with a revolutionary approach: &lt;strong&gt;Joint Embedding Vectors (JEV)&lt;/strong&gt; combined with intelligent, stateful conversational transition graphs, which we call &lt;strong&gt;VoiceGraph&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of sending every user utterance to an LLM for interpretation, Felona Voice leverages JEV similarity matching. Here's the magic:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Intent Mapping:&lt;/strong&gt; Your agent's defined actions and their descriptions are transformed into high-dimensional embedding vectors (JEVs).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Real-time Matching:&lt;/strong&gt; When a user speaks, their transcribed utterance is also converted into a JEV. Felona Voice then performs ultra-fast similarity matching between the user's utterance JEV and your agent's action JEVs.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Sub-10ms Decisions:&lt;/strong&gt; This similarity matching operation is incredibly efficient, happening in &lt;strong&gt;sub-10ms (typically ~5ms)&lt;/strong&gt;. It's an in-memory, local computation that requires zero external API calls for intent decision-making.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Zero Hallucinations:&lt;/strong&gt; Because decisions are based on deterministic similarity matching against predefined actions, there's no room for LLM hallucinations. Your agent will always follow the intended conversational flow.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Dynamic VoiceGraph:&lt;/strong&gt; The VoiceGraph isn't a rigid, static decision tree. It's a stateful graph that uses JEV similarity to dynamically decide the next best action, allowing for natural transitions and graceful handling of off-script speech, far beyond what traditional static graphs can offer.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Stark Reality: Traditional vs. Felona Voice
&lt;/h3&gt;

&lt;p&gt;Let's put it into perspective with a direct comparison:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Traditional Voice Agent (LLM Loop)&lt;/th&gt;
&lt;th&gt;Felona Voice (JEV + VoiceGraph)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Intent Decision Latency&lt;/td&gt;
&lt;td&gt;850ms – 1,800ms&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;~5ms&lt;/strong&gt; (Sub-10ms)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Inference Cost / Turn&lt;/td&gt;
&lt;td&gt;$0.02 – $0.06+ / turn&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;$0.00&lt;/strong&gt; / turn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hallucination Risk&lt;/td&gt;
&lt;td&gt;High (probabilistic text tokens)&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;0%&lt;/strong&gt; (deterministic transition graph)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Network Dependency&lt;/td&gt;
&lt;td&gt;Requires constant cloud LLM API&lt;/td&gt;
&lt;td&gt;Local/In-memory embedding matching&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Cutting Infrastructure Bills by 90-95%
&lt;/h3&gt;

&lt;p&gt;The cost savings with Felona Voice are not just significant; they're transformative. Let's do the math for the intent decision component alone:&lt;/p&gt;

&lt;p&gt;Consider an application scaling to 1,000,000 conversational turns per month. If each turn involves an LLM call for intent detection at a conservative average of $0.02 per turn:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Traditional LLM Agent:&lt;/strong&gt; 1,000,000 turns * $0.02/turn = &lt;strong&gt;$20,000 per month&lt;/strong&gt; for intent decision alone.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Felona Voice Agent:&lt;/strong&gt; 1,000,000 turns * $0.00/turn = &lt;strong&gt;$0 per month&lt;/strong&gt; for intent decision.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This translates to a &lt;strong&gt;100% reduction&lt;/strong&gt; in LLM costs specifically for intent detection. While you still need ASR (Speech-to-Text) and TTS (Text-to-Speech) services (which Felona Voice integrates seamlessly), by eliminating the most expensive and slowest part of the conversational loop – the LLM-based intent inference – you can realistically cut your overall voice AI infrastructure bills by 90-95% when scaling to thousands or millions of calls. This is a game-changer for businesses looking to deploy cost-effective, high-performance voice agents.&lt;/p&gt;

&lt;h2&gt;
  
  
  Developer Experience: Fluent and Powerful in TypeScript
&lt;/h2&gt;

&lt;p&gt;Felona Voice is built with developers in mind, offering an incredibly fluent and intuitive API in TypeScript. You can define complex conversational flows with ease:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createAgent&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;felona-voice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ConciergeBot&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;system&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You are an intelligent voice concierge for a luxury hotel.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;book_room&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Book a hotel room&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;roomType&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;roomType&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;roomType&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`Booking a &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;roomType&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; for you.`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;What type of room are you looking for?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;check_inquiry&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Check reservation status or details&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;reservationId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;reservationId&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;reservationId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`Checking details for reservation &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;reservationId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Please provide your reservation ID.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fallback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;I'm sorry, I couldn't understand that. Can you please rephrase or ask about booking a room or checking a reservation?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;runAgent&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;User: I want to book a suite.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;reply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;I want to book a suite.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Bot: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Expected: "Booking a suite for you."&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;User: What's my reservation status?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;reply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;What's my reservation status?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Bot: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Expected: "Please provide your reservation ID."&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;User: My reservation ID is 12345.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;reply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;My reservation ID is 12345.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Bot: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Expected: "Checking details for reservation 12345."&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;User: Tell me a joke.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;reply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Tell me a joke.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Bot: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Expected: "I'm sorry, I couldn't understand that. Can you please rephrase or ask about booking a room or checking a reservation?"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;runAgent&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Key developer benefits include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Pluggable Audio Pipelines:&lt;/strong&gt; Felona Voice is designed for flexibility, allowing you to integrate with various audio processing services like WebSockets, WebRTC, Deepgram, Whisper, ElevenLabs, and Cartesia, ensuring you can use your preferred ASR/TTS providers.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Zero External API Keys for Local Testing:&lt;/strong&gt; Develop and test your agent locally without needing to hit costly external LLM APIs. Intent routing is deterministic and works entirely in-memory.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;TypeScript Native:&lt;/strong&gt; Leverage the power of TypeScript for type safety, better tooling, and improved maintainability.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Getting Started with Felona Voice
&lt;/h2&gt;

&lt;p&gt;Ready to build your own ultra-low-latency voice agent? Getting started is incredibly simple:&lt;/p&gt;

&lt;p&gt;First, install the package via npm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;felona-voice
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, create your first agent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createAgent&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;felona-voice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;simpleAgent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;GreetingBot&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;system&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You are a friendly bot that greets users.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;greet_user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Say hello to the user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;there&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`Hello &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;! How can I help you today?`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fallback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;I didn't quite catch that. Could you say hello?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;testSimpleAgent&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;User: Hi, my name is Alice.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;reply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;simpleAgent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hi, my name is Alice.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Bot: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Expected: "Hello Alice! How can I help you today?"&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;User: Just saying hi.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;reply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;simpleAgent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Just saying hi.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Bot: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Expected: "Hello there! How can I help you today?"&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;User: What's the weather?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;reply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;simpleAgent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;What's the weather?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Bot: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Expected: "I didn't quite catch that. Could you say hello?"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;testSimpleAgent&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This basic example demonstrates how quickly you can define actions and their corresponding responses, setting up a robust conversational flow without the typical LLM overhead.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Future of Real-Time Voice AI is Here
&lt;/h2&gt;

&lt;p&gt;Felona Voice isn't just another framework; it's a paradigm shift. By moving intent decision-making from slow, expensive, and probabilistic LLM calls to ultra-fast, deterministic, in-memory JEV similarity matching, Felona Voice unlocks true real-time voice AI.&lt;/p&gt;

&lt;p&gt;Imagine customer service bots that respond instantly, gaming NPCs that react without delay, or smart assistants that feel genuinely present. This is the future Felona Voice enables, today. It's about building production-ready voice AI that is not only performant and reliable but also incredibly cost-effective at scale.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Involved and Start Building!
&lt;/h2&gt;

&lt;p&gt;Join the revolution in real-time voice AI. Felona Voice is open-source, community-driven, and ready for your contributions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  🌟 &lt;strong&gt;Star the repository on GitHub:&lt;/strong&gt; &lt;a href="https://github.com/mohitjoer/felona_voice" rel="noopener noreferrer"&gt;https://github.com/mohitjoer/felona_voice&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  📦 &lt;strong&gt;Install via npm:&lt;/strong&gt; &lt;code&gt;npm install felona-voice&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  📖 &lt;strong&gt;Explore full documentation:&lt;/strong&gt; &lt;a href="https://felona-voice.mohitjoe.tech/docs" rel="noopener noreferrer"&gt;https://felona-voice.mohitjoe.tech/docs&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Start building your sub-10ms voice agent today and experience the difference true real-time AI makes!&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This article was originally published on &lt;a href="https://felona-voice.mohitjoe.tech/blog/unlock-sub-10ms-voice-ai-typescript-felona-voice" rel="noopener noreferrer"&gt;felona-voice.mohitjoe.tech&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
    </item>
    <item>
      <title>Deterministic Voice AI: Sub-10ms &amp; Hallucination-Free with Felona Voice</title>
      <dc:creator>Felona Voice</dc:creator>
      <pubDate>Sun, 27 Sep 2026 15:28:38 +0000</pubDate>
      <link>https://dev.to/feleona_voice/deterministic-voice-ai-sub-10ms-hallucination-free-with-felona-voice-509h</link>
      <guid>https://dev.to/feleona_voice/deterministic-voice-ai-sub-10ms-hallucination-free-with-felona-voice-509h</guid>
      <description>&lt;p&gt;The promise of natural, real-time conversational AI has long been tempered by the realities of latency and unpredictable responses. Traditional voice bots, often reliant on large language models (LLMs) for decision-making, grapple with response times upwards of 500ms and the notorious issue of 'hallucinations' – generating plausible but incorrect information. Hardcoded conversational flows, while deterministic, are too rigid for the organic nature of human speech, breaking down at the slightest deviation. This is where Felona Voice steps in, offering a revolutionary approach to building ultra-low-latency, hallucination-free voice agents.&lt;/p&gt;

&lt;p&gt;Felona Voice, an open-source TypeScript framework, redefines the landscape of voice AI by introducing &lt;strong&gt;VoiceGraph&lt;/strong&gt;, a stateful conversational transition graph powered by &lt;strong&gt;Joint Embedding Vectors (JEV)&lt;/strong&gt;. This innovative combination allows for neural, yet deterministic, routing of conversational turns in &lt;strong&gt;sub-10ms&lt;/strong&gt;, effectively eliminating the trade-off between flexibility and reliability.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Unpredictability of Pure Prompt-Based Voice Bots
&lt;/h2&gt;

&lt;p&gt;Before diving into Felona Voice's solution, let's understand the challenges with existing paradigms:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Pure LLM-Based Routing&lt;/strong&gt;: While powerful for understanding context and generating nuanced responses, LLMs introduce significant latency. Each conversational turn requires processing, which can take 500ms to 1200ms or more. This delay creates an unnatural, disjointed user experience. Furthermore, LLMs are known to 'hallucinate,' fabricating answers or taking unexpected conversational paths, making them unsuitable for mission-critical applications requiring precision.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Hardcoded Static Graphs&lt;/strong&gt;: These offer determinism and low latency, as every path is explicitly defined. However, they are inherently inflexible. Any deviation from the script, a common occurrence in natural human conversation, can break the flow, leading to frustrating dead ends or generic fallback responses. They lack the intelligence to interpret intent beyond exact keyword matches.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Both approaches fall short of delivering the seamless, reliable, and real-time voice interactions users expect.&lt;/p&gt;

&lt;h2&gt;
  
  
  Felona Voice's Innovation: VoiceGraph with Neural Transitions
&lt;/h2&gt;

&lt;p&gt;Felona Voice addresses these limitations head-on with its core innovation: &lt;strong&gt;VoiceGraph&lt;/strong&gt; driven by &lt;strong&gt;Joint Embedding Vectors (JEV)&lt;/strong&gt;. Imagine a sophisticated state machine where transitions between states aren't just hardcoded rules, but intelligent, neural decisions made in milliseconds.&lt;/p&gt;

&lt;h3&gt;
  
  
  Joint Embedding Vectors (JEV): The Brain Behind the Speed
&lt;/h3&gt;

&lt;p&gt;At the heart of Felona Voice's ultra-low latency is the concept of Joint Embedding Vectors. Instead of relying on token-by-token LLM inference for every decision, Felona Voice pre-computes semantic embeddings for all possible actions and user intents defined within your agent. When a user speaks, their utterance is quickly embedded into the same vector space. Felona Voice then performs a lightning-fast &lt;strong&gt;similarity match&lt;/strong&gt; between the user's intent embedding and the embeddings of all available actions.&lt;/p&gt;

&lt;p&gt;This similarity matching allows Felona Voice to decide the next action in &lt;strong&gt;approximately 5ms&lt;/strong&gt;. This is not just faster; it's a paradigm shift. Zero token latency means no waiting for LLMs to generate text or process complex prompts for routing decisions.&lt;/p&gt;

&lt;h3&gt;
  
  
  VoiceGraph: Stateful and Deterministic Conversations
&lt;/h3&gt;

&lt;p&gt;VoiceGraph acts as the architectural blueprint for your conversational flow. It's a state machine where each state represents a point in the conversation, and transitions are governed by the JEV similarity matching. This provides the best of both worlds:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Determinism&lt;/strong&gt;: By mapping user intent directly to predefined actions via JEV, Felona Voice ensures that the agent always responds predictably. No more hallucinations or unexpected tangents.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Flexibility&lt;/strong&gt;: Unlike rigid static graphs, VoiceGraph's transitions are "neural." They understand semantic meaning, allowing for natural variations in user speech to trigger the correct action without explicit keyword matching.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Statefulness&lt;/strong&gt;: The VoiceGraph maintains the conversational state, enabling complex multi-turn interactions while always knowing where it is in the flow.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's compare the approaches:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Pure LLM Routing&lt;/th&gt;
&lt;th&gt;Hardcoded Static Graph&lt;/th&gt;
&lt;th&gt;Felona Voice (JEV + VoiceGraph)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Decision Latency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;High (500ms - 1200ms+)&lt;/td&gt;
&lt;td&gt;Low (hardcoded lookups)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Ultra-low (~5ms)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hallucinations&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Frequent, unpredictable&lt;/td&gt;
&lt;td&gt;None (if matched)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;None (deterministic)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Flexibility&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;High (but unpredictable)&lt;/td&gt;
&lt;td&gt;Low (rigid, breaks easily)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;High (neural understanding)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Determinism&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;High&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;High (token usage)&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Low (zero token latency)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Developer Effort&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Prompt engineering&lt;/td&gt;
&lt;td&gt;Extensive rule definition&lt;/td&gt;
&lt;td&gt;Fluent API, intent-driven&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Building Hallucination-Free Agents with Felona Voice's Fluent API
&lt;/h2&gt;

&lt;p&gt;Felona Voice is designed with developer experience at its core. Its fluent builder API in TypeScript makes defining complex conversational agents intuitive and powerful. You can define system instructions, specific actions, and fallback behaviors with ease.&lt;/p&gt;

&lt;p&gt;To get started, simply install the package:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;felona-voice
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here’s a practical example of building a simple concierge agent that can book a table or provide general assistance:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createAgent&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;felona-voice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ConciergeAgent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;system&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You are an intelligent voice concierge for a high-end restaurant. Your primary role is to assist with reservations and answer common inquiries.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;book_table&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Book a restaurant reservation for a specific time and number of guests. Examples: 'I want to book a table for two tonight', 'Can I get a reservation for 7 PM on Saturday for four people?'&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// In a real application, you'd integrate with a booking system here.&lt;/span&gt;
      &lt;span class="c1"&gt;// ctx.transcript would contain the user's full utterance.&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Booking request received: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;transcript&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Certainly, I've noted your request to book a table. Please provide your preferred time and number of guests.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;check_menu&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Inquire about the menu or specific dishes. Examples: 'What's on the menu?', 'Do you have vegetarian options?', 'Tell me about your specials.'&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Menu inquiry received: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;transcript&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Our menu features a delightful selection of seasonal dishes. We offer vegetarian, vegan, and gluten-free options. Would you like to hear about today's specials?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fallback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;I'm sorry, I didn't quite catch that. Could you please rephrase your request, or are you looking to book a table or inquire about the menu?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;testAgent&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;--- Testing Agent Interactions ---&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Test case 1: Booking intent&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;reply1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;I'd like to book a table for two this evening.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`User: I'd like to book a table for two this evening.`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Agent: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;reply1&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Expected: Reply from 'book_table' action&lt;/span&gt;

  &lt;span class="c1"&gt;// Test case 2: Menu inquiry intent&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;reply2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;What kind of food do you serve?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`User: What kind of food do you serve?`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Agent: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;reply2&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Expected: Reply from 'check_menu' action&lt;/span&gt;

  &lt;span class="c1"&gt;// Test case 3: Unhandled intent, triggers fallback&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;reply3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;What's the weather like today?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`User: What's the weather like today?`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Agent: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;reply3&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Expected: Fallback message&lt;/span&gt;

  &lt;span class="c1"&gt;// Test case 4: Another booking intent, slightly different phrasing&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;reply4&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Can I reserve a spot for four on Friday?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`User: Can I reserve a spot for four on Friday?`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Agent: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;reply4&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Expected: Reply from 'book_table' action&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;testAgent&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;createAgent("ConciergeAgent")&lt;/code&gt; initializes your voice agent with a unique name.&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;.system(...)&lt;/code&gt; provides the overarching context and persona for your agent.&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;.action("book_table", "description", async (ctx) =&amp;gt; { ... })&lt;/code&gt; defines a specific, executable action. The second argument is a detailed natural language description of what this action handles, which is crucial for JEV similarity matching. This description helps Felona Voice understand a wide range of user phrasing that maps to &lt;code&gt;book_table&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;.fallback(...)&lt;/code&gt; specifies the response when no defined action matches the user's intent, ensuring a graceful degradation rather than a confused silence.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Felona Voice's deterministic routing means that as long as the user's intent semantically aligns with an &lt;code&gt;.action&lt;/code&gt;'s description, the correct function will be invoked. This eliminates the unpredictability and hallucinations common in pure LLM-driven systems while retaining the flexibility to understand natural language.&lt;/p&gt;

&lt;p&gt;Furthermore, Felona Voice supports pluggable audio pipelines for various services like WebSockets, WebRTC, Deepgram, Whisper, ElevenLabs, and Cartesia. For local testing and deterministic routing, you don't even need external API keys, making development and iteration incredibly fast.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Impact of Sub-10ms Decision Making
&lt;/h2&gt;

&lt;p&gt;The ability to make conversational decisions in sub-10ms fundamentally changes the user experience. It enables:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Truly Duplex Conversations&lt;/strong&gt;: Users don't have to wait for the bot to finish processing before speaking again, mirroring human-to-human interaction.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Highly Responsive Interfaces&lt;/strong&gt;: Applications can react instantly to user commands, making voice control feel natural and intuitive.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;New Interaction Paradigms&lt;/strong&gt;: Real-time gaming, high-stakes customer service, and assistive technologies can leverage this speed for experiences previously impossible.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Felona Voice isn't just about speed; it's about reliability. By combining the semantic understanding of neural networks (via JEV) with the predictability of state machines (VoiceGraph), it offers a robust solution for building the next generation of voice AI applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Join the Felona Voice Community!
&lt;/h2&gt;

&lt;p&gt;We believe Felona Voice represents a significant leap forward in voice AI development, offering a powerful, open-source solution to long-standing challenges. We invite you to explore its capabilities and become a part of our growing community.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  🌟 &lt;strong&gt;Star the repository on GitHub:&lt;/strong&gt; &lt;a href="https://github.com/mohitjoer/felona_voice" rel="noopener noreferrer"&gt;https://github.com/mohitjoer/felona_voice&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  📦 &lt;strong&gt;Install via npm:&lt;/strong&gt; &lt;code&gt;npm install felona-voice&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  📖 &lt;strong&gt;Explore full documentation:&lt;/strong&gt; &lt;a href="https://felona-voice.mohitjoe.tech/docs" rel="noopener noreferrer"&gt;https://felona-voice.mohitjoe.tech/docs&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Start building your ultra-low-latency, hallucination-free voice agents today with Felona Voice!&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This article was originally published on &lt;a href="https://felona-voice.mohitjoe.tech/blog/deterministic-voice-ai-felona-voice-no-hallucinations" rel="noopener noreferrer"&gt;felona-voice.mohitjoe.tech&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
    </item>
    <item>
      <title>Why 500ms Latency Kills Voice AI: Inside Felona Voice's Sub-10ms Neural Routing Engine</title>
      <dc:creator>Felona Voice</dc:creator>
      <pubDate>Sun, 27 Sep 2026 15:25:30 +0000</pubDate>
      <link>https://dev.to/feleona_voice/why-500ms-latency-kills-voice-ai-inside-felona-voices-sub-10ms-neural-routing-engine-pac</link>
      <guid>https://dev.to/feleona_voice/why-500ms-latency-kills-voice-ai-inside-felona-voices-sub-10ms-neural-routing-engine-pac</guid>
      <description>&lt;p&gt;Imagine talking to a voice assistant, and after every sentence, there's a noticeable, awkward pause. That frustrating 500ms to 1200ms delay isn't just an inconvenience; it's a fundamental flaw that &lt;em&gt;kills&lt;/em&gt; the natural flow of conversation, making voice AI feel clunky and unintelligent. This is the inherent challenge of relying solely on large language models (LLMs) for conversational turn-taking.&lt;/p&gt;

&lt;p&gt;At the heart of this problem is the token generation loop. Each time a user speaks, the audio is transcribed, sent to an LLM, the LLM processes the prompt, generates a response (token by token), and then that response is converted back into audio. This entire cycle, while impressive for its intelligence, is a sequential bottleneck that introduces unacceptable latency for real-time voice interactions.&lt;/p&gt;

&lt;h3&gt;
  
  
  The LLM Latency Trap: Why Traditional Voice AI Stumbles
&lt;/h3&gt;

&lt;p&gt;Traditional voice AI applications often follow a pattern:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Speech-to-Text (STT):&lt;/strong&gt; User speaks, audio is converted to text.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;LLM Inference:&lt;/strong&gt; The text and conversation history are sent to an LLM.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;LLM Response Generation:&lt;/strong&gt; The LLM deliberates, token-by-token, to formulate a reply or decide on an action. This is the primary source of latency, often ranging from 500ms to well over a second for complex prompts.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Action/Response:&lt;/strong&gt; Based on the LLM's output, an action is triggered, or a Text-to-Speech (TTS) engine generates an audio reply.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;While LLMs excel at understanding nuance and generating creative text, their generative nature is a liability for &lt;em&gt;real-time decision-making&lt;/em&gt; in voice. The milliseconds add up, creating a disjointed experience that feels more like a walkie-talkie conversation than a natural human interaction. Furthermore, relying on LLMs for routing can lead to unpredictable behavior and hallucinations, as their responses aren't always deterministic.&lt;/p&gt;

&lt;h3&gt;
  
  
  Enter Felona Voice: Sub-10ms Neural Routing with Joint Embedding Vectors (JEV)
&lt;/h3&gt;

&lt;p&gt;This is where &lt;strong&gt;Felona Voice&lt;/strong&gt;, an open-source, ultra-low-latency voice agent framework for TypeScript, dramatically changes the game. Felona Voice tackles the latency problem head-on by separating the &lt;em&gt;routing&lt;/em&gt; (deciding what to do next) from the &lt;em&gt;generative&lt;/em&gt; aspects of AI. Its core innovation lies in using &lt;strong&gt;Joint Embedding Vectors (JEV)&lt;/strong&gt; with stateful conversational transition graphs, which we call &lt;strong&gt;VoiceGraph&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of sending every utterance to an LLM for interpretation and decision-making, Felona Voice pre-computes semantic embeddings for all defined actions and fallback phrases. When a user speaks, the input utterance is also converted into an embedding. Felona Voice then performs a lightning-fast &lt;strong&gt;similarity matching&lt;/strong&gt; against its pre-computed JEVs.&lt;/p&gt;

&lt;p&gt;This JEV-powered routing allows Felona Voice to decide the next action in an astonishing &lt;strong&gt;sub-10ms (typically around 5ms)&lt;/strong&gt;. This is not just faster; it's an order of magnitude faster than traditional LLM-based routing, effectively eliminating token latency and the associated conversational pauses. Because the routing is based on semantic similarity to predefined actions, it also offers &lt;strong&gt;zero hallucinations&lt;/strong&gt; for decision-making.&lt;/p&gt;

&lt;h3&gt;
  
  
  How JEV Transforms Voice UX:
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Traditional LLM-based Routing&lt;/th&gt;
&lt;th&gt;Felona Voice (JEV-powered)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Decision Latency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;500ms - 1200ms+&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~5ms (Sub-10ms)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Token Latency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;High (waiting for token generation)&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Zero&lt;/strong&gt; (no tokens generated for routing)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hallucinations&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Possible (LLM may misinterpret/invent)&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Zero&lt;/strong&gt; (deterministic similarity match)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Determinism&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Low (LLM can vary responses)&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;High&lt;/strong&gt; (predictable routing)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Resource Usage&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;High (constant LLM inference)&lt;/td&gt;
&lt;td&gt;Low (pre-computed embeddings, fast match)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Conversational Flow&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Disjointed, unnatural pauses&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Instant, natural, seamless&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Developer Experience: Fluent and Powerful
&lt;/h3&gt;

&lt;p&gt;Felona Voice is built with developers in mind, offering a fluent builder API in TypeScript that makes defining complex conversational flows intuitive. You define your agent's persona, its actions, and its fallback behaviors, and Felona Voice handles the ultra-fast routing.&lt;/p&gt;

&lt;p&gt;Let's look at a simple example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createAgent&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;felona-voice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// 1. Define your agent with a system prompt and actions&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;conciergeAgent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Concierge&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;system&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You are an intelligent voice concierge for a luxury hotel. Your goal is to assist guests with bookings and information.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;book_table&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Book a restaurant reservation for a guest. Keywords: restaurant, table, reservation, dine.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// In a real app, you'd integrate with a booking system&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Booking request received: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Certainly, I can book a table for you. What time and how many people?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;check_in&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Assist a guest with checking into the hotel. Keywords: check in, arrival, room key.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Check-in request received: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Welcome! Do you have a reservation number or a name?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fallback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;I'm sorry, I didn't quite catch that. Could you please rephrase or ask about booking a table or checking in?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// 2. Interact with the agent&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;User: Can I book a table for two tonight?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;reply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;conciergeAgent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Can I book a table for two tonight?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Agent: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Agent: Certainly, I can book a table for you. What time and how many people?&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;User: I'd like to check into my room.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;reply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;conciergeAgent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;I'd like to check into my room.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Agent: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Agent: Welcome! Do you have a reservation number or a name?&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;User: What's the weather like?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;reply&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;conciergeAgent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;interact&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;What's the weather like?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Agent: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Agent: I'm sorry, I didn't quite catch that...&lt;/span&gt;
&lt;span class="p"&gt;})();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice how each &lt;code&gt;action&lt;/code&gt; is defined with a descriptive string that Felona Voice uses to generate the JEV. This string, combined with the &lt;code&gt;system&lt;/code&gt; prompt, allows the agent to semantically understand the user's intent with incredible speed and accuracy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pluggable Audio Pipelines &amp;amp; Local Testing
&lt;/h3&gt;

&lt;p&gt;Felona Voice isn't just about routing; it's a complete framework. It offers pluggable audio pipelines, allowing you to integrate seamlessly with various services like WebSockets, WebRTC, Deepgram, Whisper, ElevenLabs, and Cartesia. This flexibility ensures you can build voice agents tailored to your specific needs and infrastructure.&lt;/p&gt;

&lt;p&gt;Crucially, for local testing and deterministic routing, &lt;strong&gt;zero external API keys are needed&lt;/strong&gt;. You can rapidly prototype and test your conversational flows without incurring costs or relying on external services for the core routing logic. This makes development faster, more reliable, and more privacy-respecting.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Future of Voice AI is Instant
&lt;/h3&gt;

&lt;p&gt;The era of clunky, delayed voice interactions is coming to an end. Felona Voice represents a significant leap forward, offering a robust, open-source solution that prioritizes a natural, instant conversational experience. By leveraging Joint Embedding Vectors and VoiceGraph, it bypasses the inherent latency of LLM token generation for routing, delivering sub-10ms decision times that feel truly instantaneous.&lt;/p&gt;

&lt;p&gt;For developers building the next generation of voice assistants, customer service bots, or interactive voice experiences, Felona Voice provides the foundational technology to create applications that are not just smart, but also genuinely pleasant and efficient to use.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Ready to build ultra-low-latency voice agents?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🌟 Star the repository on GitHub: &lt;a href="https://github.com/mohitjoer/felona_voice" rel="noopener noreferrer"&gt;github.com/mohitjoer/felona_voice&lt;/a&gt;&lt;br&gt;
📦 Install via npm: &lt;code&gt;npm install felona-voice&lt;/code&gt;&lt;br&gt;
📖 Explore full documentation: &lt;a href="https://felona-voice.mohitjoe.tech/docs" rel="noopener noreferrer"&gt;felona-voice.mohitjoe.tech/docs&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This article was originally published on &lt;a href="https://felona-voice.mohitjoe.tech/blog/felona-voice-sub-10ms-neural-routing-engine" rel="noopener noreferrer"&gt;felona-voice.mohitjoe.tech&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>voiceai</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
