<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Siphon]]></title><description><![CDATA[Build calling agents in minutes, not months.
The missing infrastructure layer for AI calling. Siphon handles state, interruptions, and scaling so you can ship r]]></description><link>https://blog.blackdwarf.in</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1768652694814/37776cef-d905-4011-9a81-5ae87f6e6c28.png</url><title>Siphon</title><link>https://blog.blackdwarf.in</link></image><generator>RSS for Node</generator><lastBuildDate>Fri, 01 May 2026 08:34:40 GMT</lastBuildDate><atom:link href="https://blog.blackdwarf.in/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[How We Built a Telephony AI Framework That Eliminates 90% of Voice Infrastructure Complexity]]></title><description><![CDATA[Most developers underestimate how hard voice AI actually is.
To build a production-ready calling agent, you need to integrate:
– SIP signaling
– Real-time audio streaming
– Speech-to-text
– LLM orches]]></description><link>https://blog.blackdwarf.in/how-we-built-a-telephony-ai-framework-that-eliminates-90-of-voice-infrastructure-complexity</link><guid isPermaLink="true">https://blog.blackdwarf.in/how-we-built-a-telephony-ai-framework-that-eliminates-90-of-voice-infrastructure-complexity</guid><dc:creator><![CDATA[BLACKDWARF]]></dc:creator><pubDate>Thu, 02 Apr 2026 11:33:00 GMT</pubDate><content:encoded><![CDATA[<h3>Most developers underestimate how hard voice AI actually is.</h3>
<p>To build a production-ready calling agent, you need to integrate:</p>
<p>– SIP signaling</p>
<p>– Real-time audio streaming</p>
<p>– Speech-to-text</p>
<p>– LLM orchestration</p>
<p>– Text-to-speech</p>
<p>Each layer introduces latency, failure points, and vendor dependencies.</p>
<p>That’s where Siphon comes in.</p>
<h2>What Siphon Does</h2>
<p>Siphon acts as a middleware layer between telephony systems and AI models, abstracting the entire pipeline into Python.</p>
<p>You define:</p>
<pre><code class="language-plaintext">agent=Agent(...)
</code></pre>
<p>And Siphon handles:</p>
<p>– WebRTC streaming</p>
<p>– SIP negotiation</p>
<p>– Interrupt handling</p>
<p>– Model orchestration</p>
<h2>Key Features</h2>
<h3>1. Sub-500ms latency</h3>
<p>Human-like conversations require near-instant responses — Siphon achieves this using WebRTC streaming.</p>
<h3>2. Modular AI stack</h3>
<p>Swap LLMs, STT, and TTS providers with a single config change.</p>
<h3>3. Zero-config scaling</h3>
<p>Spin up more workers → Siphon auto-load-balances calls across nodes.</p>
<h3>4. Data sovereignty</h3>
<p>All data stays in your infrastructure — no third-party data leakage.</p>
<h2>Why It Matters</h2>
<p>Instead of spending months on infra, you can focus on:</p>
<p>– Agent logic</p>
<p>– Business workflows</p>
<p>– User experience</p>
<p>👉 Siphon turns voice AI into a developer problem, not an infrastructure nightmare.</p>
<h2>Resources</h2>
<p><strong>Code &amp; Documentation:</strong></p>
<ul>
<li><p><a href="https://github.com/blackdwarftech/siphon/tree/main/examples/Dental_Clinic_Receptionist">📑 Complete Example Code</a></p>
</li>
<li><p><a href="https://github.com/blackdwarftech/siphon/blob/main/examples/Dental_Clinic_Receptionist/CALENDAR_SETUP.md">📅 Google Calendar Setup Guide</a></p>
</li>
<li><p><a href="https://siphon.blackdwarf.in/docs/overview/introduction">📖 SIPHON Documentation</a></p>
</li>
</ul>
<p><strong>Found this helpful?</strong> <a href="https://github.com/blackdwarftech/siphon">⭐ Star us on GitHub</a></p>
<p>Leave questions in the comment section! We would love to help you out.</p>
<p>#opensource #python #ai #webRTC #voiceai #devtools</p>
]]></content:encoded></item><item><title><![CDATA[Build a 24/7 AI Receptionist in 15 Mins (Python + Google Calendar)]]></title><description><![CDATA[Voice AI demos are cool, but they usually fail at one thing: doing actual work. Today, I'm sharing how to build a production-ready Dental Clinic Receptionist that actually checks a real Google Calendar and books appointments over the phone. We'll use...]]></description><link>https://blog.blackdwarf.in/build-a-247-ai-receptionist-in-15-mins-python-google-calendar</link><guid isPermaLink="true">https://blog.blackdwarf.in/build-a-247-ai-receptionist-in-15-mins-python-google-calendar</guid><category><![CDATA[AI]]></category><category><![CDATA[opensource]]></category><category><![CDATA[Tutorial]]></category><category><![CDATA[Python]]></category><category><![CDATA[agentic AI]]></category><dc:creator><![CDATA[BLACKDWARF]]></dc:creator><pubDate>Sun, 01 Feb 2026 12:41:10 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1769949514056/58fa36c0-28e8-40c3-9702-798b8dc7ecab.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Voice AI demos are cool, but they usually fail at one thing: doing actual work. Today, I'm sharing how to build a production-ready Dental Clinic Receptionist that actually checks a real Google Calendar and books appointments over the phone. We'll use Siphon (an open-source framework) to do it in few lines of logic.</p>
<p>This tutorial shows you how to create an intelligent voice agent that:</p>
<ul>
<li><p>Books new appointments with calendar integration</p>
</li>
<li><p>Modifies and cancels existing appointments</p>
</li>
<li><p>Verifies caller identity for privacy</p>
</li>
<li><p>Operates 24/7 without human intervention</p>
</li>
</ul>
<p><strong>Time to build:</strong> ~15 minutes</p>
<p><strong>Architecture Flow:</strong></p>
<p><a target="_blank" href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F09tyynyea8weoleo7fn1.png"><img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F09tyynyea8weoleo7fn1.png" alt="Siphon google calendar flow" /></a></p>
<h2 id="heading-prerequisites"><strong>Prerequisites</strong></h2>
<p>Before starting, ensure you have:</p>
<ul>
<li><p><strong>Python 3.8+</strong> installed on your system</p>
</li>
<li><p><strong>SIPHON installed</strong>: <code>pip install siphon-ai</code> (<a target="_blank" href="https://siphon.blackdwarf.in/docs/overview/getting-started">Installation Guide</a>)</p>
</li>
<li><p><strong>API Keys</strong>:</p>
<ul>
<li><p>OpenRouter API key (<a target="_blank" href="https://openrouter.ai/">Get one here</a>)</p>
</li>
<li><p>Sarvam or Cartesia API key for voice (<a target="_blank" href="https://siphon.blackdwarf.in/docs/plugins/tts/overview">TTS Plugins</a>)</p>
</li>
</ul>
</li>
<li><p><strong>Services</strong>:</p>
<ul>
<li><p>LiveKit credentials (cloud/self-hosted)</p>
</li>
<li><p>Google Calendar with service account credentials (<a target="_blank" href="https://github.com/blackdwarftech/siphon/blob/main/examples/Dental_Clinic_Receptionist/CALENDAR_SETUP.md">Setup Guide</a>) - <em>Required for the agent to check availability on your behalf</em>.</p>
</li>
</ul>
</li>
</ul>
<p><strong>Documentation:</strong></p>
<ul>
<li><p><a target="_blank" href="https://siphon.blackdwarf.in/docs/plugins/llm/overview">LLM Plugins</a> - Configure language models</p>
</li>
<li><p><a target="_blank" href="https://siphon.blackdwarf.in/docs/plugins/tts/overview">TTS Plugins</a> - Text-to-speech providers</p>
</li>
<li><p><a target="_blank" href="https://siphon.blackdwarf.in/docs/plugins/stt/overview">STT Plugins</a> - Speech-to-text providers</p>
</li>
<li><p><a target="_blank" href="https://siphon.blackdwarf.in/docs/agents/configuration">Agent Configuration</a> - Advanced settings</p>
</li>
<li><p><a target="_blank" href="https://siphon.blackdwarf.in/docs/agents/call-data">Call Data &amp; Observability</a> - Recordings, transcripts, and metadata</p>
</li>
</ul>
<h2 id="heading-quick-start"><strong>Quick Start</strong></h2>
<h3 id="heading-step-1-create-project"><strong>Step 1: Create Project</strong></h3>
<pre><code class="lang-bash">mkdir dental-clinic-receptionist
<span class="hljs-built_in">cd</span> dental-clinic-receptionist
touch .env prompt.py agent.py inbound.py outbound.py
</code></pre>
<h3 id="heading-step-2-configure-environment"><strong>Step 2: Configure Environment</strong></h3>
<p>Edit <code>.env</code>:</p>
<pre><code class="lang-bash"><span class="hljs-comment"># LLM Provider</span>
OPENROUTER_API_KEY=your_key

<span class="hljs-comment"># Voice Providers  </span>
SARVAM_API_KEY=your_key
CARTESIA_API_KEY=your_key

<span class="hljs-comment"># LiveKit Server</span>
LIVEKIT_URL=wss://your-livekit-url
LIVEKIT_API_KEY=your_key
LIVEKIT_API_SECRET=your_secret

<span class="hljs-comment"># Google Calendar</span>
GOOGLE_CALENDAR_ID=your-calendar@gmail.com
GOOGLE_CALENDAR_CREDENTIALS_PATH=/path/to/credentials.json

<span class="hljs-comment"># Call Data Features</span>
<span class="hljs-comment"># These flags enable automatic capturing of call artifacts</span>
CALL_RECORDING=<span class="hljs-literal">false</span>           <span class="hljs-comment"># Set to true to enable recordings (requires S3 config below)</span>
SAVE_METADATA=<span class="hljs-literal">true</span>             <span class="hljs-comment"># Saves call details (duration, status, cost)</span>
SAVE_TRANSCRIPTION=<span class="hljs-literal">true</span>        <span class="hljs-comment"># Saves full conversation history</span>

<span class="hljs-comment"># Storage Configuration</span>
<span class="hljs-comment"># Metadata and transcriptions are saved locally by default. </span>
<span class="hljs-comment"># To save to S3, set METADATA_LOCATION=s3 and TRANSCRIPTION_LOCATION=s3</span>
METADATA_LOCATION=Call_Metadata
TRANSCRIPTION_LOCATION=Transcriptions

<span class="hljs-comment"># S3 Configuration (Required for Recordings, optional for Metadata/Transcriptions)</span>
<span class="hljs-comment"># AWS_S3_ENDPOINT=http://localhost:9000</span>
<span class="hljs-comment"># AWS_S3_ACCESS_KEY_ID=minioadmin</span>
<span class="hljs-comment"># AWS_S3_SECRET_ACCESS_KEY=minioadmin</span>
<span class="hljs-comment"># AWS_S3_BUCKET=siphon</span>
<span class="hljs-comment"># AWS_S3_REGION=us-east-1</span>
<span class="hljs-comment"># AWS_S3_FORCE_PATH_STYLE=true</span>
</code></pre>
<h3 id="heading-step-3-create-system-prompt"><strong>Step 3: Create System Prompt</strong></h3>
<p>The system prompt defines your receptionist's behavior and conversation workflows.</p>
<p>Create <code>prompt.py</code> with your instructions. For a complete reference, see the <a target="_blank" href="https://github.com/blackdwarftech/siphon/blob/main/examples/Dental_Clinic_Receptionist/prompt.py">example prompt on GitHub</a>.</p>
<p><strong>Basic structure:</strong></p>
<pre><code class="lang-python">system_instructions = <span class="hljs-string">"""
You are a professional dental clinic receptionist.

# CAPABILITIES
- Book new appointments
- Modify existing appointments
- Cancel appointments

# PRIVACY RULES
- ALWAYS verify caller identity (name + phone) before showing appointments
- Only display appointments for the verified caller

# CONVERSATION STYLE
- Be warm and professional
- Ask one question at a time
- Confirm information by reading it back
"""</span>
</code></pre>
<h3 id="heading-step-4-create-the-agent"><strong>Step 4: Create the Agent</strong></h3>
<p>Create <code>agent.py</code>:</p>
<pre><code class="lang-python"><span class="hljs-keyword">from</span> siphon.agent <span class="hljs-keyword">import</span> Agent
<span class="hljs-keyword">from</span> siphon.plugins <span class="hljs-keyword">import</span> openrouter, sarvam, cartesia
<span class="hljs-keyword">from</span> prompt <span class="hljs-keyword">import</span> system_instructions
<span class="hljs-keyword">from</span> dotenv <span class="hljs-keyword">import</span> load_dotenv

load_dotenv()

llm = openrouter.LLM()
tts = cartesia.TTS()
stt = sarvam.STT()

agent = Agent(
    agent_name=<span class="hljs-string">"Dental-Clinic-Receptionist"</span>,
    llm=llm,
    tts=tts,
    stt=stt,
    system_instructions=system_instructions,
    google_calendar=<span class="hljs-literal">True</span>
)

<span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">"__main__"</span>:
    <span class="hljs-comment"># One-time setup: downloads required VAD models and assets (only needed on fresh machines)</span>
    <span class="hljs-comment"># agent.download_files()</span>

    <span class="hljs-comment"># For local development (logs, quick iteration)</span>
    agent.dev()

    <span class="hljs-comment"># For production workers, use:</span>
    <span class="hljs-comment"># agent.start()</span>
</code></pre>
<p><a target="_blank" href="https://siphon.blackdwarf.in/docs/agents/overview">Agent Overview</a></p>
<h3 id="heading-step-5-set-up-inbound-calls"><strong>Step 5: Set Up Inbound Calls</strong></h3>
<p>Create <code>inbound.py</code>:</p>
<pre><code class="lang-python"><span class="hljs-keyword">from</span> siphon.telephony.inbound <span class="hljs-keyword">import</span> Dispatch
<span class="hljs-keyword">from</span> dotenv <span class="hljs-keyword">import</span> load_dotenv

load_dotenv()

dispatch = Dispatch(
    agent_name=<span class="hljs-string">"Dental-Clinic-Receptionist"</span>,  <span class="hljs-comment"># must match the agent_name used when defining/starting your agent worker</span>
    dispatch_name=<span class="hljs-string">"inbound-Dental-Clinic-Receptionist"</span>,
    sip_number=<span class="hljs-string">""</span>  <span class="hljs-comment"># from your SIP Provider</span>
)

result = dispatch.agent()
print(result)
</code></pre>
<p>Run: <code>python inbound.py</code></p>
<p><a target="_blank" href="https://siphon.blackdwarf.in/docs/calling/inbound/overview">Inbound Calling Guide</a></p>
<h3 id="heading-step-6-set-up-outbound-calls-optional"><strong>Step 6: Set Up Outbound Calls (Optional)</strong></h3>
<p>Create <code>outbound.py</code> for appointment reminders:</p>
<pre><code class="lang-python"><span class="hljs-keyword">from</span> siphon.telephony <span class="hljs-keyword">import</span> Call
<span class="hljs-keyword">from</span> dotenv <span class="hljs-keyword">import</span> load_dotenv

load_dotenv()

call = Call(
    agent_name=<span class="hljs-string">"Dental-Clinic-Receptionist"</span>,  <span class="hljs-comment"># must match the agent_name used when defining/starting your agent worker</span>
    sip_trunk_setup={
        <span class="hljs-string">"name"</span>: <span class="hljs-string">"Dental-Clinic-Receptionist"</span>,
        <span class="hljs-string">"sip_address"</span>: <span class="hljs-string">""</span>,
        <span class="hljs-string">"sip_number"</span>: <span class="hljs-string">""</span>,
        <span class="hljs-string">"sip_username"</span>: <span class="hljs-string">""</span>,
        <span class="hljs-string">"sip_password"</span>: <span class="hljs-string">""</span>
    },
    number_to_call=<span class="hljs-string">""</span>
)

result = call.start()
print(result)
</code></pre>
<p>Run: <code>python outbound.py</code></p>
<p><a target="_blank" href="https://siphon.blackdwarf.in/docs/calling/outbound/overview">Outbound Calling Guide</a></p>
<h3 id="heading-step-7-start-your-agent"><strong>Step 7: Start Your Agent</strong></h3>
<pre><code class="lang-basic">python agent.py
</code></pre>
<p>Your receptionist is now live and ready to handle calls.</p>
<p><strong>Production Scaling:</strong><br />For high-volume production deployments, you can run multiple instances of your agent script horizontally. It automatically distributes calls across available workers.<br /><a target="_blank" href="https://siphon.blackdwarf.in/docs/concepts/scaling">Learn more about Horizontal Scaling</a></p>
<h2 id="heading-result"><strong>Result</strong></h2>
<p>Now your AI receptionist can handle:</p>
<p><strong>New Appointment Booking:</strong></p>
<ul>
<li><p>Patient calls: "I need a cleaning for next Tuesday at 2 PM"</p>
</li>
<li><p>Agent asks for name and phone number</p>
</li>
<li><p>Agent verifies details by reading them back</p>
</li>
<li><p>Agent checks calendar availability</p>
</li>
<li><p>Agent books appointment and confirms</p>
</li>
</ul>
<p><strong>Appointment Modifications:</strong></p>
<ul>
<li><p>Patient calls: "I need to change my appointment"</p>
</li>
<li><p>Agent verifies caller identity</p>
</li>
<li><p>Agent shows only their appointments</p>
</li>
<li><p>Agent reschedules to new time</p>
</li>
<li><p>Agent confirms changes</p>
</li>
</ul>
<p><strong>Appointment Cancellations:</strong></p>
<ul>
<li><p>Patient calls: "I want to cancel my appointment"</p>
</li>
<li><p>Agent verifies identity</p>
</li>
<li><p>Agent confirms which appointment to cancel</p>
</li>
<li><p>Agent cancels and confirms completion</p>
</li>
</ul>
<p><strong>Privacy Protection:</strong></p>
<ul>
<li><p>Built-in caller verification (name + phone)</p>
</li>
<li><p>Only shows appointments for verified caller</p>
</li>
<li><p>No cross-patient data exposure</p>
</li>
</ul>
<h2 id="heading-resources"><strong>Resources</strong></h2>
<p><strong>Code &amp; Documentation:</strong></p>
<ul>
<li><p><a target="_blank" href="https://github.com/blackdwarftech/siphon/tree/main/examples/Dental_Clinic_Receptionist">📑 Complete Example Code</a></p>
</li>
<li><p><a target="_blank" href="https://github.com/blackdwarftech/siphon/blob/main/examples/Dental_Clinic_Receptionist/CALENDAR_SETUP.md">📅 Google Calendar Setup Guide</a></p>
</li>
<li><p><a target="_blank" href="https://siphon.blackdwarf.in/docs/overview/introduction">📖 SIPHON Documentation</a></p>
</li>
</ul>
<p><strong>Found this helpful?</strong> <a target="_blank" href="https://github.com/blackdwarftech/siphon">⭐ Star us on GitHub</a></p>
]]></content:encoded></item><item><title><![CDATA[We Open-Sourced Our AI Calling Framework (So You Don't Waste 2-3 Months)]]></title><description><![CDATA[Three months.That’s how long many teams spend building telephony infrastructure before writing a single line of actual conversation logic for an AI voice agent.
Not because the AI was hard.Because telephony is brutal.
Today, we’re open-sourcing the s...]]></description><link>https://blog.blackdwarf.in/we-open-sourced-our-ai-calling-framework-so-you-dont-waste-2-3-months</link><guid isPermaLink="true">https://blog.blackdwarf.in/we-open-sourced-our-ai-calling-framework-so-you-dont-waste-2-3-months</guid><category><![CDATA[AI]]></category><category><![CDATA[#ai-tools]]></category><category><![CDATA[agentic AI]]></category><category><![CDATA[opensource]]></category><category><![CDATA[framework]]></category><category><![CDATA[Python]]></category><category><![CDATA[Developer Tools]]></category><dc:creator><![CDATA[BLACKDWARF]]></dc:creator><pubDate>Sat, 17 Jan 2026 12:35:49 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1768653178425/9c4396c4-91f3-46ea-bc5c-c23a3e1f9045.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Three months.</strong><br />That’s how long many teams spend building telephony infrastructure before writing a single line of actual conversation logic for an AI voice agent.</p>
<p>Not because the AI was hard.<br />Because <strong>telephony is brutal</strong>.</p>
<p>Today, we’re open-sourcing the solution so you don’t have to go through the same pain.</p>
<hr />
<h2 id="heading-the-hidden-problem-with-ai-calling-agents"><strong>The Hidden Problem with AI Calling Agents</strong></h2>
<p>Building an AI calling agent sounds straightforward:</p>
<ul>
<li><p>Use an LLM</p>
</li>
<li><p>Add speech-to-text</p>
</li>
<li><p>Add text-to-speech</p>
</li>
<li><p>Connect it to a phone number</p>
</li>
</ul>
<p>In reality, that’s where most teams hit a wall.</p>
<p>To make <em>real phone calls</em>, you end up dealing with:</p>
<ul>
<li><p><strong>SIP trunks &amp; PSTN providers</strong></p>
</li>
<li><p><strong>Low-latency, bidirectional audio</strong></p>
</li>
<li><p><strong>Real-time orchestration of STT, LLM, and TTS</strong></p>
</li>
<li><p><strong>Call state, interruptions, transfers</strong></p>
</li>
<li><p><strong>Scaling, monitoring, recordings, persistence</strong></p>
</li>
</ul>
<p>The result?<br />Most teams spend <strong>weeks or months on infrastructure</strong> before they ever touch the conversation itself.</p>
<p>We did too. And eventually asked:</p>
<blockquote>
<p><em>“Why is building voice AI still this hard?”</em></p>
</blockquote>
<hr />
<h2 id="heading-introducing-siphon"><strong>Introducing Siphon</strong></h2>
<p><strong>Siphon</strong> is an open-source Python framework that handles the telephony complexity for you, so you can focus on building great conversations.</p>
<p>Here’s what a complete AI receptionist looks like with Siphon:</p>
<pre><code class="lang-python"><span class="hljs-keyword">from</span> siphon.agent <span class="hljs-keyword">import</span> Agent
<span class="hljs-keyword">from</span> siphon.plugins <span class="hljs-keyword">import</span> openai, cartesia, deepgram

agent = Agent(
    agent_name=<span class="hljs-string">"receptionist"</span>,
    llm=openai.LLM(model=<span class="hljs-string">"gpt-4"</span>),
    tts=cartesia.TTS(voice=<span class="hljs-string">"helpful-assistant"</span>),
    stt=deepgram.STT(model=<span class="hljs-string">"nova-2"</span>),
    system_instructions=<span class="hljs-string">"""
    You are a friendly receptionist for Acme Corp.
    Help callers schedule appointments or route them correctly.
    """</span>
)

<span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">"__main__"</span>:
    agent.start()
</code></pre>
<p>Run this, and your agent can answer <strong>real phone calls</strong> via any SIP provider (Twilio, Telnyx, etc.).</p>
<hr />
<h2 id="heading-what-siphon-handles-for-you"><strong>What Siphon Handles for You</strong></h2>
<ul>
<li><p>🔌 <strong>SIP &amp; PSTN connectivity</strong><br />  Works with any SIP provider, no FreeSWITCH pain.</p>
</li>
<li><p>⚡ <strong>Real-time audio pipeline</strong><br />  Built on LiveKit with streaming audio and <strong>sub-500ms voice-to-voice latency</strong>.</p>
</li>
<li><p>🤖 <strong>AI orchestration</strong><br />  Plug-and-play support for LLMs, STT, and TTS.</p>
</li>
</ul>
<p>Swap providers with a single line:</p>
<pre><code class="lang-python">  llm=anthropic.LLM(model=<span class="hljs-string">"claude-3-5-sonnet"</span>)
</code></pre>
<ul>
<li>📈 <strong>Production-ready by default</strong> Auto-scaling, call recordings, transcripts, state handling, and observability.</li>
</ul>
<hr />
<h2 id="heading-quick-start"><strong>Quick Start</strong></h2>
<p>Install:</p>
<pre><code class="lang-bash">pip install siphon-ai
</code></pre>
<p>Create an agent:</p>
<pre><code class="lang-python"><span class="hljs-keyword">from</span> siphon.agent <span class="hljs-keyword">import</span> Agent
<span class="hljs-keyword">from</span> siphon.plugins <span class="hljs-keyword">import</span> openai, cartesia, deepgram

agent = Agent(
    agent_name=<span class="hljs-string">"my_first_agent"</span>,
    llm=openai.LLM(),
    tts=cartesia.TTS(),
    stt=deepgram.STT(),
    system_instructions=<span class="hljs-string">"You are a helpful assistant."</span>,
)

agent.start()
</code></pre>
<p>That’s it.<br />Your agent is live and answering phone calls.</p>
<p>(Full setup, outbound calling, and advanced examples are in the docs.)</p>
<hr />
<h2 id="heading-why-we-open-sourced-it"><strong>Why We Open-Sourced It</strong></h2>
<p>We could’ve kept Siphon proprietary or turned it into a closed SaaS.</p>
<p>But we believe <strong>voice AI shouldn’t be locked behind massive infrastructure effort</strong>.</p>
<p>Siphon is:</p>
<ul>
<li><p><strong>Apache 2.0 licensed</strong></p>
</li>
<li><p><strong>Provider-agnostic</strong></p>
</li>
<li><p><strong>Fully self-hostable</strong></p>
</li>
<li><p><strong>No vendor lock-in</strong></p>
</li>
</ul>
<p>Use it commercially, modify it, or build on top of it.</p>
<hr />
<h2 id="heading-what-you-can-build"><strong>What You Can Build</strong></h2>
<ul>
<li><p>📞 Customer support agents</p>
</li>
<li><p>📅 Appointment scheduling</p>
</li>
<li><p>💼 Sales qualification</p>
</li>
<li><p>📊 Surveys &amp; feedback collection</p>
</li>
<li><p>🏥 Healthcare intake systems</p>
</li>
</ul>
<p>If it involves phone calls and conversations, Siphon handles the hard parts.</p>
<hr />
<h2 id="heading-get-involved"><strong>Get Involved</strong></h2>
<p>⭐ GitHub: <a target="_blank" href="https://github.com/blackdwarftech/siphon">https://github.com/blackdwarftech/siphon</a><br />📖 Docs: <a target="_blank" href="https://siphon.blackdwarf.in/docs">https://siphon.blackdwarf.in/docs</a><br />🐛 Issues &amp; feature requests welcome<br />🤝 PRs encouraged</p>
<p>We’re building Siphon in public and would love community feedback.</p>
<hr />
<p>If you’ve ever thought</p>
<blockquote>
<p><em>“I wish building AI calling agents was simpler”</em></p>
</blockquote>
<p>— give Siphon a try.</p>
<p><strong>Built by BLACKDWARF</strong><br /><em>Mission: Democratize complex technologies for developers.</em></p>
]]></content:encoded></item></channel></rss>