Intercom Fin charges $0.99 for every resolution, procedure handoff, or disqualification it produces (Gleap). Decagon won't tell you what it costs until you're on a sales call, and the floor is a roughly $50,000-a-year platform fee before a single conversation is billed (Fin.ai). Both models mean you're paying per conversation for a model you don't control, running on infrastructure that sees every customer message, order number, and account detail your support team handles.
Botpress is MIT-licensed and free. Rasa CALM keeps the actions your agent can take defined in code instead of left to an LLM's judgment. Run either one against a backbone model on rented GPUs and you get resolution quality in the same range as Fin or Decagon, at a fixed monthly infrastructure cost against current GPU pricing instead of a per-conversation bill, with customer data that never leaves your own stack. This guide covers the pricing math behind that claim, the open-source stack that makes it work, and exactly how to deploy it.
If you've already looked at self-hosting an AI coding assistant or self-hosting AI code review on your own GPUs, the shape of this guide will look familiar: same vLLM backend, same breakeven logic, different domain. What's different here is the compliance angle. Code review sends source code off-site; a support agent sends customer PII, which raises the stakes for keeping inference in-house.
Why Teams Are Moving Off Per-Resolution AI Support Pricing
Two things are pushing support teams toward self-hosted stacks in 2026: the math on per-resolution and platform-fee pricing stops working at real volume, and data control stops being optional once customer PII is involved on every turn.
What Intercom Fin's $0.99-Per-Resolution Model Actually Costs at Volume
Fin AI Agent bills $0.99 per resolution, procedure handoff, or disqualification, and $9.99 per qualification (Fin.ai pricing). There's no monthly base plan or bundled allotment: Fin's own pricing page states a 50-outcome-per-month minimum commitment at the $0.99 rate, with "no setup, integration, or platform fees" (Fin.ai pricing). Fin only charges once per conversation regardless of how many actions it takes to get there, which is a fair design, but it also means you're billed for nearly every AI-handled conversation that reaches an outcome, not just the ones that resolve cleanly.
Run the numbers at scale and the flat per-unit price stops looking flat. At 10,000 AI-handled conversations a month, that's $9,900. At 50,000, it's $49,500. There's no volume discount built into the public pricing, and no way to cap the bill short of throttling how many conversations Fin is allowed to touch.
Intercom itself renamed its corporate entity to Fin in May 2026, and on June 15, 2026, Salesforce signed a definitive agreement to acquire the company for approximately $3.6 billion, subject to customary purchase price adjustments (Salesforce). Pricing hasn't changed yet, but a $3.6 billion acquisition is exactly the kind of event that precedes packaging changes once the deal closes.
Decagon's Six-Figure, Sales-Led Pricing and the $50K Minimum
Decagon has no public pricing page and no self-serve way to estimate cost. Every number comes from a sales call, and the floor is a platform fee of roughly $50,000 a year that covers platform access, integrations, monitoring, and onboarding, before any per-conversation usage is added on top (Fin.ai). That minimum alone puts sub-$50K annual budgets outside Decagon's target market.
Actual enterprise contracts run well above that floor. Vendr's own marketplace listing, built from real buyer negotiations rather than vendor claims, puts the median annual Decagon contract at $432,750, with a range from $105,000 to $923,183 (Vendr). That works out to somewhere between roughly $8,750 and $76,930 a month, before you've resolved a single ticket.
Data Control and Compliance as the Other Driver, Not Just Cost
Every message a support agent handles can carry customer PII: order numbers, shipping addresses, account credentials, sometimes payment or health details depending on the industry. Sending that to a third-party inference endpoint, whether Fin's or Decagon's, means a vendor now has custody of it, subject to that vendor's own retention and training policies. For teams under SOC 2, HIPAA, or contractual data-residency requirements, that's a compliance question, not a preference. Self-hosting keeps the backbone model, the RAG pipeline, and every tool call inside infrastructure you control. For teams that have already worked through this tradeoff on the coding side, our AI coding assistant guide covers the same privacy argument applied to source code instead of customer records.
The Open-Source Stack: Models, RAG, and Workflow Automation for Support
A self-hosted support agent needs four pieces working together: an orchestration layer that manages conversation flow, a backbone LLM for language understanding and generation, a RAG pipeline for grounding answers in your actual help docs, and a tool-calling layer for order lookups, refunds, and account actions. Here's how to pick each one.
Orchestration Layer: Botpress vs Rasa CALM vs Parlant
Botpress is fully open source under the MIT license as of its current codebase (GitHub), sitting at around 14.8k GitHub stars (GitHub). It gives you a visual flow builder, an inbox, knowledge base ingestion, and integrations out of the box, which makes it the fastest path to a working agent if your team doesn't want to write a dialogue manager from scratch. Its older v12 line was self-hosted under a dual AGPLv3/proprietary license and hasn't shipped a release since April 2025 (GitHub); the current MIT codebase is where active development happens.
Rasa CALM (Conversational AI with Language Models) takes a different approach: an LLM handles natural-language understanding, generating commands that represent what the user wants, but the actions the agent can actually execute stay defined in code as "Flows" rather than left to the model to improvise (Rasa docs). CALM can run fully on-premise, and it gives you full access to the dialogue manager, NLU pipeline, and action server, not a black box you configure from the outside. Rasa's free Developer Edition covers up to 1,000 conversations a month (100 for internal employee agents); past that, the Growth tier starts at $35,000/year for up to 500,000 conversations (Rasa), which is still a fixed annual number instead of a per-resolution meter.
Parlant is a newer, Apache 2.0-licensed interaction-control framework that doesn't replace an orchestration layer so much as sit on top of one. It evaluates each conversation turn against deterministic business guidelines, narrowing context to only the rules relevant to that specific moment, and is explicitly positioned for regulated, compliance-sensitive customer-facing agents in finance, insurance, healthcare, and telecom (GitHub). It's designed to pair with retrieval or workflow frameworks like LangGraph or LlamaIndex, not stand alone. For a support agent, that makes Parlant a good fit as an added governance layer over Botpress's flow builder, for the specific subset of actions, refunds, account changes, cancellations, where you need a hard guarantee the agent won't improvise.
The practical choice for most teams: Botpress if you want something running this week and your compliance bar is moderate; Rasa CALM if you need code-level, auditable control over what the agent can do and are willing to build more of the flow logic yourself; Parlant layered on either one if you're in a regulated industry and need a governance layer independent of which orchestration tool you picked.
Why CALM's Deterministic Flows Cut Hallucination Risk vs Prompt-Only Agents
Resolution rate and hallucination rate move in opposite directions as you add grounding. Notch's 2026 benchmark analysis puts legacy chatbots at 10-25% resolution, standard AI assistants at 40-60%, and agentic platforms with real backend integration at 70-85% (Notch). The gap between those tiers isn't really about model size, it's about how much of the conversation is left to the model to freelance versus how much is grounded in retrieved facts and deterministic business logic.
That's the same gap CALM is built to close. A prompt-only agent generates its next response from the model's training data plus whatever context fits in the window; if the retrieved context is thin or the question falls outside it, the model fills the gap with something plausible-sounding rather than admitting it doesn't know. A flow-based agent only executes the specific actions a developer has defined for that state, so there's no path for the model to invent a refund policy or a return window that doesn't exist in your actual business rules.
The numbers back this up directly. With proper retrieval-augmented grounding against a knowledge base and live order data, hallucination-related complaints drop to about 0.11% of AI-handled tickets, down from a baseline of 0.34% without that grounding (Digital Applied), a roughly two-thirds reduction just from making sure the model is answering from real data instead of guessing. T-Mobile's own account of deploying a Rasa CALM-based chatbot: "Since the chatbot based on Rasa CALM can process around 50% of service desk inquiries independently, we reduced the need for human agents by approximately 30%," per Roland Csibi, Service Hub Owner at T-Mobile (Rasa).
Picking a Backbone Model for Tool-Calling and Grounded Answers
Raw language quality matters less here than reliable structured output. A support agent's backbone model needs to call tools correctly (order lookup, refund initiation, account lookup), format responses consistently, and follow a system prompt without drifting into invented policy. That points toward instruction-tuned models in the 8B-32B range for most workloads; our VRAM tier guide breaks down exactly which open-weight models fit which GPU budget if you want to compare options beyond what's covered here.
For a default recommendation: Qwen3 32B handles tool-calling and instruction-following well enough for production support use, and it quantizes cleanly to AWQ INT4 (roughly 16-18GB of weights) for teams on tighter GPU budgets, or runs at FP8 (roughly 20GB) on Hopper or Ada-generation cards for slightly better fidelity. Note that the A100 doesn't have FP8 tensor cores, so FP8 either errors or silently falls back to FP16 on that card; if you're running on A100s, use AWQ INT4 or plain FP16 instead. Enterprises that want a heavier backbone with a larger native context window for holding long ticket histories and multiple retrieved documents in context at once should look at Cohere Command A, a 111B enterprise-tuned model built specifically for RAG and tool-calling with a 256K context window.
RAG Pipeline: Embeddings, Vector Search, and Knowledge Base Grounding
The RAG layer is what turns "the model knows about refunds in general" into "the model knows your refund policy specifically." That means an embedding model, a vector database, and ideally a reranker sitting between retrieval and generation. Our self-hosted embeddings and rerankers guide covers deploying TEI with models like Qwen3-Embedding or BGE-M3 for this exact layer, including cost-per-token math against managed embedding APIs. For the broader architecture, how the embedding model, vector search, and LLM inference server sit together on one GPU stack, the agentic RAG on GPU cloud guide covers memory planning and colocation in more depth than fits here.
Reference Architecture: From Ticket to Resolution
A support agent's pipeline runs in four stages: ingest the knowledge base, retrieve and ground each response, call tools when the conversation needs to touch a real system, and hand off to a human when it can't resolve the issue on its own.
Ingesting Help Docs, Macros, and Past Tickets into the Knowledge Base
Most support knowledge bases aren't clean markdown, they're PDFs, exported macros, scanned manuals, and years of resolved ticket threads. Parsing that into retrievable chunks is its own pipeline step. Our document intelligence guide covers deploying Docling, Marker, or MinerU for exactly this: turning PDFs and manuals into structured text the embedding model can index cleanly, rather than feeding raw OCR noise into your vector store.
Past resolved tickets are a second, underused source: they show the actual language customers use and the actual resolution path support agents took, which is often a better grounding signal than the official help doc for a given issue.
Tool Calling for Order Lookups, Refunds, and Account Actions
This is where the agent stops being a chatbot and starts being able to actually resolve something. The backbone model needs to emit structured tool calls, an order lookup by ID, a refund request against a payment processor, an account field update, that your action server then executes against real systems. vLLM's OpenAI-compatible endpoint supports this natively with --enable-auto-tool-choice and a model-appropriate --tool-call-parser (Hermes-style parsing works for the Qwen model family). This is also exactly where a CALM Flow or a Parlant guideline earns its keep: a refund tool call should only fire when the deterministic business rule for refund eligibility is actually met, not whenever the LLM decides a refund sounds reasonable.
Human Handoff and Escalation Logic
No support agent should resolve 100% of tickets, and pretending otherwise is how you end up with a customer stuck in a loop. Handoff logic needs to trigger on explicit signals: the customer asking for a human, the model's own confidence dropping below a threshold, a tool call failing, or the conversation exceeding a turn count without resolution. Getting the retry, queueing, and state-handoff mechanics right for a multi-step agent pipeline is a durable-execution problem more than a prompting problem; our AI agent workflow orchestration guide covers Temporal, Inngest, and Restate for exactly this kind of retryable, stateful pipeline. For an added safety net against the model doing something it shouldn't, jailbreak attempts, unsafe advice, PII leakage, our NeMo Guardrails deployment guide covers runtime rails that sit in front of the backbone model regardless of which orchestration layer you're using.
Deploying the Stack on Spheron GPU Cloud
GPU Sizing: VRAM Math for Concurrent Support Sessions
Size the GPU around peak concurrent conversations, not monthly ticket volume. A backbone model's weights are a fixed cost; the KV cache scales with how many conversations are active at once and how much context (retrieved docs, ticket history, tool results) each one carries.
Qwen3 32B at AWQ INT4 uses roughly 16-18GB for weights. At FP8 on a Hopper or Ada card, weights run closer to 20GB. KV cache adds up fast under concurrency: for a support workload averaging around 4K tokens of active context per session (system prompt plus a few retrieved knowledge base chunks plus recent turns), 20 concurrent sessions add roughly 10GB of KV cache, and 80 concurrent sessions add roughly 40GB.
| Team size | Peak concurrent sessions | Recommended GPU | Backbone config | VRAM used |
|---|---|---|---|---|
| Small (~2K resolutions/mo) | ~5 | 1x L40S 48GB | Qwen3 32B, AWQ INT4 | ~19GB |
| Mid-size (~10K resolutions/mo) | ~20 | 1x H100 SXM5 80GB | Qwen3 32B, FP8 | ~30GB |
| Large (~50K resolutions/mo) | ~80 | 2x H100 SXM5 80GB | Qwen3 32B, FP8, replicated | ~60GB per node |
At the large tier, a single H100 has enough VRAM headroom for the KV cache load on its own; the second GPU is there for decode throughput and redundancy under sustained concurrent traffic, not because the model runs out of memory.
Serving the Backbone Model with vLLM
Provision the instance on Spheron by logging into app.spheron.ai, selecting an H100 SXM5 GPU (or an L40S for a smaller deployment), and deploying Ubuntu 22.04 with CUDA 12.4. Per-minute billing means the instance costs nothing while it's idle during setup. See Spheron's docs if you want to script provisioning as part of a deployment pipeline.
docker run --gpus all --ipc=host -p 8000:8000 \
-v ~/.cache/huggingface:/root/.cache/huggingface \
-e HUGGING_FACE_HUB_TOKEN=$HF_TOKEN \
vllm/vllm-openai:latest \
--model Qwen/Qwen3-32B-AWQ \
--quantization awq \
--max-model-len 32768 \
--gpu-memory-utilization 0.90 \
--enable-auto-tool-choice \
--tool-call-parser hermesFor the FP8 configuration on H100 or L40S, drop --quantization awq in favor of --dtype fp8 against the unquantized model weights. Verify the endpoint before wiring up Botpress or Rasa:
curl http://localhost:8000/v1/modelsPoint Botpress's LLM provider configuration, or Rasa CALM's endpoints.yml, at this OpenAI-compatible endpoint instead of a hosted API. For a general-purpose OpenAI-compatible proxy layer with auth and rate limiting in front of vLLM, see Build a Self-Hosted OpenAI-Compatible API with vLLM.
Cost at Scale: Self-Hosted GPU Cost vs Fin and Decagon Pricing
Worked Cost Table by Monthly Ticket Volume
Live GPU rates as of this writing: H100 SXM5 80GB runs $3.92/hr on-demand and $1.49/hr spot; L40S 48GB is listed at $0.61/hr on Spheron's current rate card.
| Monthly resolved tickets | Self-hosted GPU config | GPU + infra cost/mo | Fin cost/mo ($0.99/resolution) | Decagon cost/mo (platform floor) |
|---|---|---|---|---|
| ~2,000 | 1x L40S 48GB | ~$559 | ~$1,980 | ~$4,167+ |
| ~10,000 | 1x H100 SXM5 (spot) | ~$1,224 | ~$9,900 | ~$4,167+ |
| ~50,000 | 2x H100 SXM5 (on-demand) | ~$5,946 | ~$49,500 | ~$36,063+ (median) |
Self-hosted infra cost includes the GPU at 720 hours/month plus Postgres, Redis, and a vector database host, roughly $120-150/month at the small and mid tiers, scaling to around $300/month at the large tier for a higher-availability vector DB and load balancer. Decagon's monthly figure is the $50,000/year platform-fee floor for the smaller tiers, and the $432,750/year Vendr-reported median annual contract for the large tier, in both cases before any per-conversation usage charge is added on top.
Pricing fluctuates based on GPU availability. The prices above are based on 19 Jul 2026 and may have changed. Check current GPU pricing → for live rates.
Where the Breakeven Falls Against Fin's Per-Resolution Billing
Self-hosting breaks even against Fin at roughly 565 resolved conversations a month on the smallest tier, the L40S deployment at about $559/month divided by Fin's $0.99 rate. That's under 20 resolutions a day. Most teams running an AI support agent at any real scale clear that in the first week of operation.
The gap only widens with volume, because Fin's per-resolution price doesn't drop as you scale, while your GPU cost stays flat regardless of how many conversations you run through it. At 10,000 resolutions a month, self-hosting saves roughly $8,676. At 50,000, it saves roughly $43,554 on the on-demand tier, or considerably more if spot pricing is acceptable for your uptime requirements.
Decagon's math is different in shape. There's no real breakeven ticket volume to calculate, because the $50,000/year platform-fee floor alone exceeds the total monthly cost of the small and mid-size self-hosted tiers before a single conversation is billed. At Vendr's reported median contract value of $432,750/year, Decagon costs more per month than even the large-tier self-hosted deployment handling 50,000 monthly resolutions.
When Hosted (Fin or Decagon) Still Wins
Self-hosting isn't the right call at every scale. Below a few hundred AI-handled conversations a month, the fixed cost of keeping a GPU instance running, plus the engineering time to deploy and maintain vLLM, Botpress or Rasa, and a RAG pipeline, will likely cost more in practice than a hosted subscription with a low usage floor. Teams without existing DevOps capacity should weigh that honestly: self-hosting means you own model upgrades, prompt and flow maintenance, and RAG pipeline reliability, none of which Fin or Decagon charge extra to handle on their side.
There's also a speed-to-launch argument for hosted platforms. Fin and Decagon ship with polished admin UIs, managed uptime SLAs, and support teams you can call when something breaks. A self-hosted stack gets you there in days to weeks depending on how much of the reference architecture above you need to build out, not hours. If your support volume is small, your team has no GPU operations experience, and you need something live this week, a hosted platform's usage-based pricing is the simpler, faster starting point, with self-hosting as the migration path once volume and compliance requirements justify the switch.
Customer support agents live or die on latency and grounding, both of which are easier to control when the backbone model, the RAG pipeline, and the tool-calling layer all sit on infrastructure you own. Spheron's per-minute billing means a support agent's GPU cost scales with actual concurrent traffic, not a flat hourly rate whether the model is answering tickets or sitting idle overnight.
Spheron H100 instances → | L40S GPU pricing → | View all GPU pricing →
Frequently Asked Questions
A single L40S 48GB instance running a Qwen3 32B backbone at AWQ INT4 (roughly 16-18GB of weights) handles a small team's concurrency comfortably. At Spheron's published L40S rate of $0.61/hr, that is about $439/month in GPU cost, plus roughly $120/month for Postgres, Redis, and a vector database host. Total: around $559/month, which breaks even against Intercom Fin's $0.99-per-resolution pricing at about 565 resolved conversations a month, under 20 a day.
They solve different problems. Botpress is MIT-licensed and gives you a low-code visual builder, an inbox, and knowledge base ingestion out of the box, which is the faster path if your team wants something running this week. Rasa CALM keeps every action the agent can take defined in code rather than left to an LLM's judgment, which matters most for regulated actions like refunds and account changes where you need an audit trail and can't tolerate the agent improvising. Many teams run Botpress for the conversational layer and lean on CALM-style deterministic flows, or a guideline-enforcement layer like Parlant, for the handful of actions that touch money or PII.
Decagon publishes no pricing page. The floor is a roughly $50,000/year platform fee before any usage charges, and Vendr's own marketplace listing puts the median annual contract at $432,750, with deals ranging from $105,000 to $923,183. A self-hosted GPU deployment for the same workload typically runs $500-$6,000 a month depending on concurrent conversation volume, well under Decagon's platform-fee floor alone.
Yes, that is the core tradeoff versus Fin or Decagon. Every prompt, every retrieved help-doc chunk, and every tool call an AI support agent makes carries customer data: order numbers, account details, sometimes payment or health information depending on your industry. Routing that through a third-party inference endpoint means it leaves your infrastructure and is subject to that vendor's data retention and training policies. Running the backbone model, the RAG pipeline, and the action server on GPUs you control means none of it leaves your network.
It depends on peak concurrent conversations, not ticket volume. A small team handling a few thousand resolutions a month with under 10 concurrent sessions fits comfortably on an L40S 48GB running a 32B model at AWQ INT4. A team handling tens of thousands of resolutions a month with 20-30 concurrent sessions needs an H100 SXM5 80GB running the same class of model at FP8. Past 50-80 concurrent sessions, add a second H100 for throughput headroom and redundancy rather than for VRAM, since a single H100 has enough VRAM for the KV cache load well before it runs out of decode throughput.
