<?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: DigitalOcean</title>
    <description>The latest articles on DEV Community by DigitalOcean (digitalocean).</description>
    <link>https://dev.to/digitalocean</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%2Forganization%2Fprofile_image%2F175%2F369f1227-0eac-4a88-8d3c-08851bf0b117.png</url>
      <title>DEV Community: DigitalOcean</title>
      <link>https://dev.to/digitalocean</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/digitalocean"/>
    <language>en</language>
    <item>
      <title>How do I cap inference billing to avoid surprise costs from idle GPUs or runaway agents?</title>
      <dc:creator>DigitalOcean</dc:creator>
      <pubDate>Wed, 14 Oct 2026 16:31:01 +0000</pubDate>
      <link>https://dev.to/digitalocean/how-do-i-cap-inference-billing-to-avoid-surprise-costs-from-idle-gpus-or-runaway-agents-1cbd</link>
      <guid>https://dev.to/digitalocean/how-do-i-cap-inference-billing-to-avoid-surprise-costs-from-idle-gpus-or-runaway-agents-1cbd</guid>
      <description>&lt;p&gt;You cap inference billing by layering controls, not by flipping one switch. On DigitalOcean, Serverless Inference is prepaid, so your balance is a real ceiling, and scoped keys, alerts, and cleanup jobs cover the rest. Spend alerts alone won't stop anything: they email you when spending crosses a threshold, but your usage keeps running.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key takeaways&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Serverless Inference stops when funds run out, so fund a dedicated balance with only what you plan to spend.
&lt;/li&gt;
&lt;li&gt;Dedicated Inference and GPU Droplets bill by the hour until destroyed, so automate cleanup.
&lt;/li&gt;
&lt;li&gt;Agents need caps in your own code, because rate limits slow spending but don't cap it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Use prepaid balances as a ceiling
&lt;/h2&gt;

&lt;p&gt;Serverless usage draws from promotional credits, then the Inference and Agents balance, then your account prepayment balance. Only Serverless Inference and Managed Agents draw from the first, so it works as a separate AI budget. Auto-reload is on by default, so turn it off for a hard stop. A zero balance is also an outage, so reserve this for experiments and non-critical workloads.&lt;/p&gt;

&lt;h2&gt;
  
  
  Add alerts and scope your keys
&lt;/h2&gt;

&lt;p&gt;Spend alerts email you at percentage thresholds of your monthly budget, within an hour of each threshold being crossed. Their sole purpose is notification. Give each service its own model access key, scoped to specific models and a VPC, so one leak or loop has a small blast radius. Regenerating a key takes effect immediately, which is how you want it to work during an incident.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cap agents in code
&lt;/h2&gt;

&lt;p&gt;Rate limits (up to 120 requests and 1.5M tokens per minute at the lowest serverless tier) limit speed, not total spend. Harness Runtime has no per-session or per-product spend limit, so an agent stuck in an unintended loop can quickly drain balances. Set a max output token count per call, a max step count per task, and a running spend counter that stops the run. You should also pause idle sessions, since paused sessions incur no compute charges.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stop paying for idle GPUs
&lt;/h2&gt;

&lt;p&gt;Dedicated Inference bills per GPU-hour, and GPU Droplets bill per second until destroyed. Powering off doesn't stop the meter. At \$30.32 per hour for 8x H100, an idle Dedicated Inference endpoint costs roughly \$728 a day. &lt;/p&gt;

&lt;p&gt;To cap inference billing and avoid surprise costs, tag experimental GPU Droplets and destroy them nightly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;doctl compute droplet delete &lt;span class="nt"&gt;--tag-name&lt;/span&gt; ephemeral-gpu &lt;span class="nt"&gt;--force&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Inference billing cap FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Can I get usage alerts or hard spending caps on a managed AI platform before bills run away?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
DigitalOcean spend alerts notify you at budget thresholds but don't limit usage. The closest hard cap is Serverless Inference's prepaid model, where access is suspended when credits and balances run out.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does powering off a GPU Droplet stop billing?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
No. The GPU stays reserved, so billing continues until you destroy the Droplet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which inference option doesn't penalize variable workloads?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Serverless Inference, which bills per token instead of reserving GPUs, is a solid choice for variable workloads. Dedicated Inference bills per GPU-hour, whether or not anyone calls it, so it suits steady traffic better than spiky traffic.&lt;/p&gt;

&lt;h2&gt;
  
  
  References &amp;amp; further reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://docs.digitalocean.com/platform/billing/spend-alerts/" rel="noopener noreferrer"&gt;Spend alerts&lt;/a&gt;: worth setting up first.
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.digitalocean.com/products/inference/how-to/manage-serverless-inference-prepayment/" rel="noopener noreferrer"&gt;Manage Serverless Inference prepayment&lt;/a&gt;: explains the order balances are drawn down.
&lt;/li&gt;
&lt;li&gt;Learn more about &lt;a href="https://docs.digitalocean.com/products/inference/how-to/manage-model-access-keys/" rel="noopener noreferrer"&gt;model access keys&lt;/a&gt; and &lt;a href="https://docs.digitalocean.com/products/inference/details/limits/" rel="noopener noreferrer"&gt;inference limits&lt;/a&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.digitalocean.com/products/inference/details/pricing/" rel="noopener noreferrer"&gt;Inference pricing&lt;/a&gt;: worth checking directly before you build.
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.digitalocean.com/products/droplets/details/pricing/" rel="noopener noreferrer"&gt;Droplet pricing and billing&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.digitalocean.com/products/managed-agents/agent-harness-runtime/details/pricing/" rel="noopener noreferrer"&gt;Harness Runtime pricing&lt;/a&gt;: worth bookmarking before you run agents at scale.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>developers</category>
      <category>cloud</category>
      <category>startup</category>
    </item>
    <item>
      <title>We moved a production backend from a phone</title>
      <dc:creator>Vinay K</dc:creator>
      <pubDate>Tue, 13 Oct 2026 13:19:33 +0000</pubDate>
      <link>https://dev.to/digitalocean/we-moved-a-production-backend-from-a-phone-1k36</link>
      <guid>https://dev.to/digitalocean/we-moved-a-production-backend-from-a-phone-1k36</guid>
      <description>&lt;p&gt;&lt;strong&gt;Published by Vinay Kumar, Chief Product and Technology Officer at DigitalOcean&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Every era of the cloud has a unit of work. For agents, it’s a human who directs, a controller who runs the operation, and a worker who does the heavy lifting. Last week we watched all three move a production backend, from a phone.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I’ve spent fifteen years building cloud services: S3 and EBS in the early days of AWS, Oracle Cloud Infrastructure from inception, and now the agentic cloud at DigitalOcean. In every era, moving a backend meant the same thing: a project plan, a maintenance window, and a team working late into the night.&lt;/p&gt;

&lt;p&gt;Last week, Rohit Bhattacharjee on our team moved an entire production backend from his phone. Database, APIs, file storage, and about 31,000 AI search embeddings. He never opened a laptop. A message while waiting for coffee. A decision between meetings. By the end of the week, it was done.&lt;/p&gt;

&lt;p&gt;This wasn’t a demo. It was a real workload with a bill.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three parties, three jobs
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The worker&lt;/strong&gt; was a &lt;a href="https://www.digitalocean.com/products/managed-agents" rel="noopener noreferrer"&gt;DigitalOcean Managed Agent&lt;/a&gt;, an AI that does real work in the cloud, not just chat. It ran in our &lt;a href="https://docs.digitalocean.com/products/managed-agents/agent-harness-runtime/" rel="noopener noreferrer"&gt;Harness Runtime&lt;/a&gt;: a private, isolated computer that spins up for each session, with a workspace that persists when the agent pauses. Through our &lt;a href="https://docs.digitalocean.com/products/managed-agents/action-gateway/" rel="noopener noreferrer"&gt;Action Gateway&lt;/a&gt;, a single connection to 20,000+ tools, it could use GitHub, Supabase, a web browser, and the whole DigitalOcean API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The agent never saw a password.&lt;/strong&gt; The gateway applies credentials at the moment of use, so they never reach the model.&lt;/p&gt;

&lt;p&gt;It provisioned the database, loaded all 40 access policies, and mapped every Supabase feature to its DigitalOcean counterpart. It wasn’t advising on a migration. It was performing one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The controller&lt;/strong&gt; was a personal agent running on his phone, the agent Rohit actually talked to. He ran the migration in plain chat, and the personal agent turned his messages into work: tasking the worker, tracking the run, and reporting back. When he asked it to check a claim, it did. The worker said 145,432 rows had been loaded, so the controller counted them. Validation was the side job. The main job was holding the whole operation together in one conversation, so a person never had to leave the flow of his day.&lt;/p&gt;

&lt;p&gt;The worker and controller come from different model families. That’s the point of an open platform: you choose the right model for each job.&lt;/p&gt;

&lt;p&gt;Rohit provided the credentials, his judgment, and a credit card. He reviewed a $180 proposed plan and saved almost 80% on a revision with just a few taps. Everything else, the two agents handled between themselves.&lt;/p&gt;

&lt;h2&gt;
  
  
  What moved
&lt;/h2&gt;

&lt;p&gt;The workload was &lt;a href="http://huffl.ai/" rel="noopener noreferrer"&gt;huffl.ai&lt;/a&gt;, an agentic canvas that puts docs, spreadsheets, whiteboard, presentations, and search in one place. Underneath: 31 tables, 145,432 rows, three storage buckets, 24 functions, and 30,650 embeddings, the numeric fingerprints that make search work.&lt;/p&gt;

&lt;p&gt;Before moving anything, the worker read all of it and caught two problems that would have poisoned the migration. Two overloaded functions that looked like duplicates. A “vector count” that was really measuring string lengths.&lt;/p&gt;

&lt;p&gt;The new home: managed Postgres ($15), one App Platform app running four services ($20), and one object store ($5). About $40 a month. The data moved with per-table parity checks, and every one of the 30,650 embeddings verified non-null.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pay for the work, not the wait
&lt;/h2&gt;

&lt;p&gt;An agent spends most of its session waiting: on a model, a tool, or a person. The runtime paused the worker whenever it waited and resumed it in about 300 milliseconds. While it slept, the meter stopped. We bill for active CPU, not provisioned capacity. The agent runtime for the entire run cost a few dollars.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this changes
&lt;/h2&gt;

&lt;p&gt;Moving a backend used to mean a team, a plan, a maintenance window, and a war room. Last week it meant chat bubbles. The human says what needs to happen, the controller runs the operation, the worker does the work, and every claim gets checked along the way.&lt;/p&gt;

&lt;p&gt;The work didn’t get smaller. What one person can accomplish got bigger. See it in action: watch the video:&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/z2nO7f-7ZGE" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Try DigitalOcean Managed Agents today. Bring your preferred harness, connect your tools, and give your agents a complete environment with our Cuttlefish mobile application coming soon. &lt;a href="https://cloud.digitalocean.com/managed-agents/harness-runtime?i=e0fda3" rel="noopener noreferrer"&gt;Get started today&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What would you trust an agent to move for you, and what would you want checking its work?&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>cloud</category>
      <category>database</category>
    </item>
    <item>
      <title>Jev: an AI model that can’t write a sentence</title>
      <dc:creator>DigitalOcean</dc:creator>
      <pubDate>Fri, 09 Oct 2026 14:00:00 +0000</pubDate>
      <link>https://dev.to/digitalocean/jev-an-ai-model-that-cant-write-a-sentence-3cj</link>
      <guid>https://dev.to/digitalocean/jev-an-ai-model-that-cant-write-a-sentence-3cj</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frl0ka9ms5vgx3bap4qwe.jpg" class="article-body-image-wrapper"&gt;&lt;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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frl0ka9ms5vgx3bap4qwe.jpg" alt="Jev: an AI model that can’t write a sentence" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;ICYMI AI: The latest AI trends, delivered to you on Dev.to&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Tech Talk: TypeSafe’s Jev is a model that only returns probabilities
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://typesafe.ai/blog/introducing-system-one-models-and-jev" rel="noopener noreferrer"&gt;TypeSafe's Jev&lt;/a&gt;, released into early access on September 15, is a general-purpose classification model. It reads up to 32K tokens of input (such as a support ticket, a customer record, or a row of data). It answers any number of typed questions about it in a single parallel pass, and returns probabilities rather than prose.&lt;/p&gt;

&lt;p&gt;Outputs are limited to three options: Choice, Score, and Noul (yes or no), so structured-output errors and bad tool calls drop to zero by construction. A valid answer isn't always the right one, and Jev doesn't claim otherwise. &lt;/p&gt;

&lt;p&gt;What it does is tell you how sure it is. TypeSafe trains it for calibration, so its probabilities match real-world frequencies. When Jev says it's 80% confident, it's right about 80% of the time. That lets you set a threshold, automatically acting on high-confidence calls and routing the rest to a human or a larger model.&lt;/p&gt;

&lt;p&gt;The pricing is what makes Jev worth a look. At \$0.042 per million input tokens with free output, TypeSafe estimates about \$0.0004 per decision, roughly 1/76th the cost of GPT-5.6 Terra on its benchmark. Within days, imitators appeared: Laya, Bespoke Nimble, and Kev, several of them open-weight fine-tunes of Qwen 3.5 you can run locally. OpenAI likewise followed with a Decisions API of its own.&lt;/p&gt;

&lt;p&gt;For developers, the change is in how you structure the call. Instead of sending an LLM one broad question like "is this spam?" and parsing a paragraph back, you pass Jev the email once, along with a set of narrower typed questions, such as: Does the sender domain match the claimed company? Does it ask for credentials? How urgent is the language? Each comes back as a probability. Your own code then applies the thresholds and makes the call, so the routing policy lives in your repo, versioned and auditable, and the model only scores the inputs.&lt;/p&gt;

&lt;p&gt;Jev is available today on Serverless Inference through the &lt;a href="https://www.digitalocean.com/products/model-library" rel="noopener noreferrer"&gt;DigitalOcean Model Library&lt;/a&gt;, at Typesafe’s list price—no separate TypeSafe account needed. Pair it with the DigitalOcean Inference Router to send routing and classification traffic to Jev while keeping frontier models in reserve for the calls that need them.&lt;/p&gt;




&lt;h3&gt;
  
  
  Event calendar
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.digitalocean.com/open-intelligence-summit" rel="noopener noreferrer"&gt;&lt;strong&gt;Open Intelligence Summit&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;October 12-13th, San Francisco&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The argument is no longer “Is open source AI cheaper?” It’s now “Who owns intelligence?” A movement is forming around open intelligence and generating the belief that the intelligence powering our AI products and companies should be more open, portable, and controllable.&lt;/p&gt;

&lt;p&gt;Join DigitalOcean, NVIDIA, RadixArk, Inferact, and more for deep dives, demos, and discussions about the technologies that keep intelligence portable, interoperable, and in the hands of builders. &lt;/p&gt;




&lt;h3&gt;
  
  
  Industry news
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Near-flagship intelligence at a fifth of the price was the headline at OpenAI DevDay, but the bigger shift is the stack forming around the model&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
&lt;a href="https://openai.com/index/introducing-gpt-6-1-sol/" rel="noopener noreferrer"&gt;OpenAI announced&lt;/a&gt; GPT-6.1 Sol, which it says delivers near-Astra intelligence at a fifth of Astra's token prices, plus an Ultrafast tier with up to 6x faster generation in the API. It also added computer use to its Agents API and opened ChatGPT, which it puts at 1.2B weekly users, to developer-built plugins and partners like Devin, Notion, and Vercel.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent safety is moving below the application layer&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
&lt;a href="https://nvidianews.nvidia.com/news/open-agent-safety-platform" rel="noopener noreferrer"&gt;NVIDIA's Open Agent Safety Platform&lt;/a&gt; pairs OpenShell, an open-source runtime that traces agent actions and enforces policy, with Sentry, an out-of-band watchdog on BlueField-4 DPUs that NVIDIA says can quarantine an agent that leaves its boundaries within milliseconds. NVIDIA says more than 100 organizations, including Anthropic and CrowdStrike, are working with the technology, and DigitalOcean is among the companies supporting the platform.&lt;/p&gt;




&lt;h2&gt;
  
  
  New models available on DigitalOcean Inference Engine
&lt;/h2&gt;

&lt;p&gt;We recently launched models from TypeSafeAI, DeepSeek, Z.ai, NVIDIA, OpenAI, and Anthropic, all with different strengths and use cases. Learn more about the models in our &lt;a href="https://www.digitalocean.com/blog/whats-new-on-inference-engine" rel="noopener noreferrer"&gt;What’s New blog&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Start using them through the &lt;a href="https://docs.digitalocean.com/products/inference/how-to/si-endpoints/" rel="noopener noreferrer"&gt;DigitalOcean API&lt;/a&gt; or directly in the &lt;a href="https://cloud.digitalocean.com/model-studio/explore-models/model-catalog?i=b69464" rel="noopener noreferrer"&gt;Cloud Console&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DeepSeek-V4.1-Flash&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
DeepSeek-V4.1-Flash cuts the KV cache footprint to 1/4 of V4-Flash while outperforming DeepSeek's own V4-Pro flagship on coding and agentic benchmarks, addressing the cache-hit charges that often dominate agent costs. The 552B MoE model activates just 8B parameters on input, delivering frontier performance with infrastructure economics that improve as you scale.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GLM-5.3 and GLM-5.3-Flash from Z.ai&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Z.ai's post-training translates to significant performance improvements for GLM-5.3, achieving a 50% lower cost per completed coding task than GLM-5.2 while jumping to 28.3 on Terminal-Bench 3.0. GLM-5.3-Flash adds native image and video input with the same agentic strength, giving teams both reasoning-heavy and efficient multimodal paths on a single platform.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nemotron™ 3 Diarization from NVIDIA&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
NVIDIA's Nemotron™ 3 Diarization replaces the multi-stage speaker attribution pipeline (VAD, embeddings, clustering, post-processing) with a single 100M-parameter model, keeping audio within DigitalOcean's infrastructure rather than routing it to third-party APIs. It identifies up to 8 speakers (double the previous limit) with a 14.72% error rate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GPT-6.1 Sol, GPT-6 Astra, Sol, and Luna from OpenAI&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
One week after GPT-6 Sol’s launch, OpenAI releases GPT-6.1 Sol, which offers near-Astra-level coding and substantial improvements in document understanding, computer use, and scientific work. OpenAI's three-tier GPT-6 family also debuts on DigitalOcean: Astra for computer use and coding, Sol for frontier reasoning at 90% lower cost than Opus 5, and Luna for high-volume tasks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Claude Fable 5.1, Opus 5.5, and Sonnet 5.5 from Anthropic&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Anthropic's latest point releases deliver focused gains: Fable 5.1 reaches 55.8% on Terminal-Bench 4.0 with 75% cheaper cache reads, while Opus 5.5 matches high-effort results at default effort using half the tokens and 20% lower per-token cost. Sonnet 5.5 runs 30% faster with equivalent cost savings, with a shift toward better token efficiency and lower verification burden.&lt;/p&gt;




&lt;h3&gt;
  
  
  Community tutorials
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.digitalocean.com/community/conceptual-articles/how-naive-failover-between-inference-providers-makes-outages-worse" rel="noopener noreferrer"&gt;&lt;strong&gt;How naive failover between inference providers makes outages worse&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
In a six-hour fault-injection run on an H200 GPU Droplet, the standard retry-with-backoff policy pushed 3.54x normal load onto a degraded provider, while a retry budget plus circuit breaker held it to 1.02x, and naive retries left 3,743 zombie requests generating 959,232 output tokens for clients that had already disconnected. Learn how to classify inference errors before failing over, replace fixed retry counts with a budget, and verify whether your provider actually stops billing when you cancel a stream.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.digitalocean.com/community/tutorials/the-real-cost-of-multimodal-inference" rel="noopener noreferrer"&gt;&lt;strong&gt;What vision-language models cost to serve at production scale&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
A single uploaded photo can add more than a thousand input tokens before the model writes a word, and at 500,000 requests a month, that gap is the difference between \$155 on serverless Nemotron Nano 12B VL and \$3,175.20 for a dedicated H100 running 24/7. Walk through the per-request cost math, the roughly 10.2 million-request breakeven, where dedicated wins, and six levers for cutting image-token spend.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.digitalocean.com/community/tutorials/speculative-decoding-kv-cache-capacity" rel="noopener noreferrer"&gt;&lt;strong&gt;Speculative decoding's hidden cost: the KV cache capacity you give up, and where throughput turns negative&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
On a 141 GB H200 serving Qwen3-14B with vLLM, a separate Qwen3-0.6B draft model consumed about 43.8 percent of baseline batch slots, and even n-gram speculation, predicted to cost nothing, measured a 2.8 percent capacity tax. See where each method's throughput crosses below baseline as concurrency rises, and get the config.json arithmetic to predict a draft model's KV cost before spending GPU hours.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.digitalocean.com/community/conceptual-articles/deepseek-v4-1-flash-cache-reliability" rel="noopener noreferrer"&gt;&lt;strong&gt;Cache reliability is a pricing term: what I learned measuring DeepSeek-V4.1-Flash on DigitalOcean Serverless Inference&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
DeepSeek-V4.1-Flash has the deepest cache discount in the Serverless Inference catalog at \$0.006 per million cached tokens, yet across 844 API calls it hit the cache on only 78.6% of warm turns, and with a miss priced at 50x a hit, it cost 2.2x what GLM-5.3-Flash did for the same 15-turn, 200K-token sessions. Discover how DigitalOcean's 64-token-block prefix cache works, how to log your own hit rate from the usage object, and why reasoning_effort: max cost up to 1.88x more without improving accuracy.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.digitalocean.com/community/tutorials/deepseek-v41-flash-ced-article" rel="noopener noreferrer"&gt;&lt;strong&gt;Why DeepSeek-V4.1-Flash splits reading from writing&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
DeepSeek-V4.1-Flash's Causal Encoder-Decoder splits a 40-layer model into a 20-layer encoder that runs prefill at 8B active parameters and a full stack that decodes at 16B, shrinking the global KV cache to about 890 bytes per token, roughly a quarter of V4-Flash's. Learn why that asymmetry, not the 74.2 versus 62.7 DeepSWE score against V4-Pro, is what lowers the bill for read-heavy coding agents.&lt;/p&gt;




&lt;h3&gt;
  
  
  Product updates
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.digitalocean.com/blog/managed-agents-public-preview" rel="noopener noreferrer"&gt;&lt;strong&gt;Introducing DigitalOcean Managed Agents, now in Public Preview&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
AI agents are ready to take on more, and we built the infrastructure to match. &lt;a href="https://www.digitalocean.com/products/managed-agents" rel="noopener noreferrer"&gt;DigitalOcean Managed Agents&lt;/a&gt; brings together &lt;a href="https://cloud.digitalocean.com/managed-agents/harness-runtime?i=e0fda3" rel="noopener noreferrer"&gt;Harness Runtime&lt;/a&gt;, a purpose-built runtime for running agent sessions at scale, and &lt;a href="https://cloud.digitalocean.com/managed-agents/action-gateway/getting-started?i=e0fda3" rel="noopener noreferrer"&gt;Action Gateway&lt;/a&gt;, governed access to the tools agents need to get real work done, all in one platform.&lt;/p&gt;

&lt;p&gt;Deploy your preferred agent harness, Claude Code, Codex CLI, OpenCode, and more, or bring your own, and connect to 16,000+ tools across 500+ providers through a single managed endpoint. Sessions are ready in under a second, resume in about 300 milliseconds with full context intact, and you only pay for the compute you actually use.&lt;/p&gt;

&lt;p&gt;Whether you're automating support workflows, refactoring code across repositories, or building the next agent-powered product, Managed Agents gives you the infrastructure to do it, without building it yourself. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.digitalocean.com/blog/microvms-for-agents" rel="noopener noreferrer"&gt;&lt;strong&gt;DigitalOcean MicroVMs now in private preview&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
Isolated, Firecracker-based VMs that pause when idle and resume with state intact, built for agent workloads that run in bursts. The same layer that powers Managed Agents is now available directly to teams building their own agent platforms, sandboxes, and short-lived jobs. &lt;/p&gt;

</description>
      <category>ai</category>
      <category>startup</category>
      <category>infrastructure</category>
      <category>developers</category>
    </item>
    <item>
      <title>What is disaggregated prefill and decode in LLM inference?</title>
      <dc:creator>DigitalOcean</dc:creator>
      <pubDate>Tue, 06 Oct 2026 18:03:00 +0000</pubDate>
      <link>https://dev.to/digitalocean/what-is-disaggregated-prefill-and-decode-in-llm-inference-4m0n</link>
      <guid>https://dev.to/digitalocean/what-is-disaggregated-prefill-and-decode-in-llm-inference-4m0n</guid>
      <description>&lt;p&gt;What is disaggregated prefill and decode in LLM inference?&lt;/p&gt;

&lt;p&gt;Prefill is compute-bound, decode is memory-bound. Learn why colocating them hurts TTFT and ITL, and when disaggregated serving pays off.&lt;/p&gt;

&lt;p&gt;Every LLM request runs through two phases with effectively opposite hardware profiles. Understanding the split explains most of the latency and cost behavior you see in production, and why disaggregated prefill and decode has become a standard serving pattern.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key takeaways&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prefill is compute-bound and sets TTFT; decode is memory-bandwidth-bound and sets ITL/TPOT.
&lt;/li&gt;
&lt;li&gt;Running both on the same GPUs creates prefill/decode interference, visible as TTFT spikes and ITL jitter.
&lt;/li&gt;
&lt;li&gt;Chunked prefill and continuous batching reduce interference; disaggregating the phases onto separate pools removes it, at the cost of a KV cache transfer.
&lt;/li&gt;
&lt;li&gt;Disaggregation is worth it for long prompts, high concurrency, and strict streaming SLOs. A managed option like DigitalOcean Serverless Inference gives you it without the setup; for small self-hosted deployments, a well-tuned single pool on a &lt;a href="https://www.digitalocean.com/products/gpu-droplets" rel="noopener noreferrer"&gt;GPU Droplet&lt;/a&gt; running vLLM is often enough.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The two phases of LLM inference
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Prefill&lt;/strong&gt; processes the entire prompt in one forward pass and builds the KV cache, the attention state every later token reads from. It is compute-bound: arithmetic intensity is high and the GPU spends its time doing math, not waiting on memory. Prefill governs time to first token (TTFT), and its attention cost grows quadratically with prompt length.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Decode&lt;/strong&gt; generates output one token at a time. Each step reloads the model weights and the growing KV cache from HBM to produce a single token, so it is memory-bandwidth-bound. Decode governs inter-token latency (ITL) and time per output token (TPOT). A GPU with higher memory bandwidth streams tokens faster even if its FLOPs are unchanged.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why colocating prefill and decode causes latency problems
&lt;/h2&gt;

&lt;p&gt;Most serving engines batch prefill and decode on the same GPUs. That is where the interference shows up: a long prompt's prefill can monopolize compute while dozens of in-flight decode requests stall, and users see ITL jitter or a TTFT spike. The two phases also want different batch sizes and parallelism strategies, but colocated they must share one configuration. &lt;/p&gt;

&lt;p&gt;Chunked prefill and continuous batching soften this by interleaving prompt chunks with decode steps, which is why our &lt;a href="https://www.digitalocean.com/blog/llm-inference-tradeoffs" rel="noopener noreferrer"&gt;inference trilemma&lt;/a&gt; guide recommends them for latency-sensitive deployments.&lt;/p&gt;

&lt;h2&gt;
  
  
  What disaggregation changes
&lt;/h2&gt;

&lt;p&gt;Disaggregated serving, formalized in the &lt;a href="https://arxiv.org/abs/2401.09670" rel="noopener noreferrer"&gt;DistServe paper&lt;/a&gt;, runs prefill and decode on separate GPU pools. A prefill worker computes the KV cache, ships it over a fast interconnect (RDMA, RoCE, or a transfer library like NIXL or LMCache) to a decode worker, and the decode pool streams tokens without prefill interference. Because each pool is sized and tuned independently, you can hit TTFT and ITL targets at the same time rather than trading one for the other. The cost is added complexity plus a KV transfer step; that transfer can land on second-token latency rather than TTFT depending on how orchestration is done.&lt;/p&gt;

&lt;p&gt;This is the architecture DigitalOcean already runs in production: &lt;a href="https://www.digitalocean.com/blog/reduce-llm-inference-costs-prefix-caching" rel="noopener noreferrer"&gt;Serverless Inference&lt;/a&gt; uses disaggregated serving over a RoCE network, paired with prefix-aware routing so shared system prompts skip redundant prefill entirely.&lt;/p&gt;

&lt;h2&gt;
  
  
  References &amp;amp; further reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://arxiv.org/abs/2401.09670" rel="noopener noreferrer"&gt;DistServe: Disaggregating Prefill and Decoding for Goodput-optimized LLM Serving&lt;/a&gt;: the primary source for the pattern, worth reading before you build.
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.digitalocean.com/blog/llm-inference-benchmarking" rel="noopener noreferrer"&gt;LLM inference benchmarking: measure what matters&lt;/a&gt;: a clear walkthrough of TTFT, TPOT, ITL, and how each maps to prefill or decode.
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.digitalocean.com/blog/llm-inference-tradeoffs" rel="noopener noreferrer"&gt;The LLM inference trilemma&lt;/a&gt;: practical tuning advice, including when to reach for chunked prefill.
&lt;/li&gt;
&lt;li&gt;Learn more about &lt;a href="https://www.digitalocean.com/community/tutorials/debugging-p99-ttft-llm-inference" rel="noopener noreferrer"&gt;debugging p99 TTFT&lt;/a&gt; and &lt;a href="https://www.digitalocean.com/community/tutorials/how-to-deploy-nvidia-dynamo-for-llm-inference" rel="noopener noreferrer"&gt;deploying NVIDIA Dynamo on GPU Droplets&lt;/a&gt;, a framework built around disaggregated serving.
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.digitalocean.com/products/gpu-droplets" rel="noopener noreferrer"&gt;GPU Droplets&lt;/a&gt;: current hardware and regions, worth checking directly since availability changes.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>developers</category>
      <category>startup</category>
      <category>infrastructure</category>
    </item>
    <item>
      <title>How to route LLM requests by cost vs. latency</title>
      <dc:creator>DigitalOcean</dc:creator>
      <pubDate>Fri, 02 Oct 2026 18:33:17 +0000</pubDate>
      <link>https://dev.to/digitalocean/how-to-route-llm-requests-by-cost-vs-latency-463j</link>
      <guid>https://dev.to/digitalocean/how-to-route-llm-requests-by-cost-vs-latency-463j</guid>
      <description>&lt;p&gt;Routing LLM requests by cost and latency means sending each request to the cheapest or fastest model that still meets the quality bar, rather than hardcoding a single model for everything. Production traffic isn't uniform: routine lookups, complex troubleshooting, and background jobs have different cost and latency requirements, even within a single app. &lt;/p&gt;

&lt;p&gt;Using an inference router like DigitalOcean Inference Router involves defining request categories, assigning each a selection policy (cost, latency, or a benchmarked best fit), and setting fallback models so an unavailable model doesn't break the request. Cost is the price per token (which can vary by up to 100x across a model catalog); latency is mainly the time to first token (TTFT). The two don't move together, so route per task rather than using a single blended score.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key takeaways:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Routing is a per-workload policy, not a search for "the best model."
&lt;/li&gt;
&lt;li&gt;Cost and latency usually need separate, explicit priorities.
&lt;/li&gt;
&lt;li&gt;Fallback and cache-aware routing protect the savings that routing is meant to deliver.
&lt;/li&gt;
&lt;li&gt;The DigitalOcean Inference Router implements this as configuration, not custom infrastructure.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  LLM routing strategies
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Static rules&lt;/strong&gt;: Hardcode model per request type. Simple, but brittle.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Policy-based routing&lt;/strong&gt;: A model pool per task with a cost/latency/optimal policy. Most production systems land here.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic routing&lt;/strong&gt;: A classifier infers the task and policy automatically.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Routing LLM requests: A quick decision framework
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Workload&lt;/th&gt;
&lt;th&gt;Priority&lt;/th&gt;
&lt;th&gt;Policy&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Real-time chat&lt;/td&gt;
&lt;td&gt;Latency&lt;/td&gt;
&lt;td&gt;Speed-optimized (TTFT)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Routine lookups&lt;/td&gt;
&lt;td&gt;Cost&lt;/td&gt;
&lt;td&gt;Cost-optimized&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Complex reasoning&lt;/td&gt;
&lt;td&gt;Quality&lt;/td&gt;
&lt;td&gt;Benchmarked "optimal"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Batch/background&lt;/td&gt;
&lt;td&gt;Cost&lt;/td&gt;
&lt;td&gt;Cost-optimized&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Fallback models&lt;/strong&gt; keep requests completing when the preferred model is down or rate-limited. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cache-aware routing&lt;/strong&gt; matters too: switching models to save a fraction of a cent can break a cached prompt and cost more overall.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the DigitalOcean Inference Router routes LLM requests
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://docs.digitalocean.com/products/inference/how-to/use-inference-router/" rel="noopener noreferrer"&gt;Inference Router&lt;/a&gt; tasks pair a model pool with a selection policy: preset tasks default to a benchmarked &lt;strong&gt;Optimal&lt;/strong&gt; policy; custom tasks choose &lt;strong&gt;Cost Efficiency&lt;/strong&gt;, &lt;strong&gt;Speed Optimization&lt;/strong&gt; (TTFT), or &lt;strong&gt;Manual Ranking&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Fallback models handle unmatched traffic. &lt;code&gt;X-Model-Affinity&lt;/code&gt; preserves cache reuse, and &lt;code&gt;X-Routing-Max-Switch-Spend-Pct&lt;/code&gt; (default 20%) caps the cost of switching mid-session. &lt;/p&gt;

&lt;p&gt;It's a drop-in change. Set &lt;code&gt;"model": "router:your-router-name"&lt;/code&gt;. Routing decisions typically resolve in about 200ms, billed at the serving model's &lt;a href="https://docs.digitalocean.com/products/inference/details/pricing/" rel="noopener noreferrer"&gt;standard rate&lt;/a&gt; with no separate router charge during public preview.&lt;/p&gt;

&lt;h2&gt;
  
  
  LLM routing FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is LLM routing?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
LLM routing is the practice of directing each request to the model best suited to it—by cost, latency, or task fit—instead of sending every request through one model regardless of what it needs. The DigitalOcean Inference Router implements this as a managed feature, so teams get task-aware routing and fallback handling without building it themselves.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do you &lt;a href="https://www.digitalocean.com/resources/articles/llm-cost-calculation-guide" rel="noopener noreferrer"&gt;model cost-per-token&lt;/a&gt; for LLM inference?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Multiply input tokens by the model's input rate and output tokens by its output rate, then sum the two, since the rates are usually very different. Because rates vary widely across a model catalog, this is best tracked per task rather than as one blended number. The DigitalOcean Inference Router reports token usage and cost-relevant metrics per model and per task in its Analyze view.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What metrics matter for LLM inference observability?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Time to first token (TTFT), time per output token (TPOT), and inter-token latency (ITL) are the core metrics for judging responsiveness. A latency-optimized routing policy should be measured against these, not just overall request time. The DigitalOcean Inference Router uses TTFT specifically as the basis for its Speed Optimization selection policy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What causes cold start latency in GPU inference, and how do you avoid it?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Cold starts happen when a model has to load onto available GPU capacity before it can serve a request, rather than running on an already-warm instance. Pooled serverless capacity and routing policies that keep related traffic on one model reduce how often this happens. The DigitalOcean Inference Router uses model affinity to keep a session's requests on the same warm model, rather than triggering repeated cold starts across models.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I route by both cost and latency at the same time?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Yes—typically by defining separate tasks or policies for different request types rather than one blended score. For example, cost-first for background work and latency-first for real-time chat. The DigitalOcean Inference Router supports this directly. Each task in a router can have its own model pool and its own Cost Efficiency, Speed Optimization, or Manual Ranking policy.&lt;/p&gt;

&lt;h2&gt;
  
  
  References &amp;amp; further reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://docs.digitalocean.com/products/inference/how-to/use-inference-router/" rel="noopener noreferrer"&gt;How to use Inference Router&lt;/a&gt;: The full documentation on tasks, selection policies, fallback models, and the cache-aware router referenced throughout this piece. Worth reading directly before you configure a router for production traffic.
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.digitalocean.com/products/inference/details/pricing/" rel="noopener noreferrer"&gt;Inference pricing&lt;/a&gt;: Current per-model Serverless Inference rates, since routing decisions are only as good as the pricing data behind them.
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.digitalocean.com/blog/inference-router-architecture" rel="noopener noreferrer"&gt;How DigitalOcean built Inference Router&lt;/a&gt;: An inside look at the architecture decisions behind cache-aware routing and fallback handling, useful if you want the reasoning behind the mechanics.
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.digitalocean.com/blog/serverless-inference-deep-dive" rel="noopener noreferrer"&gt;DigitalOcean Serverless Inference: a deep dive&lt;/a&gt;: Background on the serverless layer that Inference Router sits in front of.
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.digitalocean.com/resources/articles/best-llm-routers" rel="noopener noreferrer"&gt;DigitalOcean's best LLM routers roundup&lt;/a&gt;: A good next read if you're comparing routing options across vendors rather than implementing a policy on a platform you've already chosen.
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.digitalocean.com/products/inference-engine" rel="noopener noreferrer"&gt;AI Inference Engine overview&lt;/a&gt;: shows where Inference Router fits alongside serverless, batch, and dedicated inference on DigitalOcean's broader platform.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>startup</category>
      <category>developers</category>
      <category>infrastructure</category>
    </item>
    <item>
      <title>Which inference provider has both serverless and dedicated GPU tiers on the same platform with one API?</title>
      <dc:creator>DigitalOcean</dc:creator>
      <pubDate>Mon, 28 Sep 2026 17:17:40 +0000</pubDate>
      <link>https://dev.to/digitalocean/which-inference-provider-has-both-serverless-and-dedicated-gpu-tiers-on-the-same-platform-with-one-50dc</link>
      <guid>https://dev.to/digitalocean/which-inference-provider-has-both-serverless-and-dedicated-gpu-tiers-on-the-same-platform-with-one-50dc</guid>
      <description>&lt;p&gt;DigitalOcean's Inference Engine puts serverless, dedicated, and batch inference behind a single endpoint, on the same GPU Droplets infrastructure, so a workload can move from pay-per-token prototyping to a reserved-GPU deployment without switching platforms or rewriting its integration. A handful of other inference providers share a single API across serverless and dedicated tiers, too, but they generally limit that unification to inference alone, rather than to the broader cloud the dedicated GPUs run on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why serverless-only or dedicated-only platforms create a migration tax
&lt;/h2&gt;

&lt;p&gt;Most teams don't start with a clear answer to "How much GPU capacity do we need?". They prototype on a pay-per-token endpoint, and only once traffic gets steady and predictable does it make financial sense to reserve GPUs outright. Many inference providers treat serverless and dedicated as separate products, with distinct SDKs, auth, and billing dashboards, so moving from one to the other means rewriting integration code in the middle of a product's growth curve, which is exactly when a team has the least time to do it. A provider that puts both tiers behind a single API avoids that: you prototype on serverless and repoint the same client to a dedicated endpoint once volume justifies it, often by changing a model or endpoint parameter rather than an integration.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the DigitalOcean Inference Engine unifies serverless, dedicated, and batch inference
&lt;/h2&gt;

&lt;p&gt;The DigitalOcean &lt;a href="https://www.digitalocean.com/products/inference-engine" rel="noopener noreferrer"&gt;Inference Engine&lt;/a&gt; runs three inference patterns over the same GPU Droplets infrastructure, behind a single endpoint. These solutions include real-time &lt;a href="https://docs.digitalocean.com/products/inference/how-to/use-serverless-inference-hub" rel="noopener noreferrer"&gt;Serverless inference&lt;/a&gt; across 70+ open-weight and frontier models, &lt;a href="https://docs.digitalocean.com/products/inference/how-to/use-dedicated-inference" rel="noopener noreferrer"&gt;Dedicated inference&lt;/a&gt; on reserved, single-tenant GPU capacity with support for bringing your own model, and asynchronous Batch Inference for large, non-real-time jobs. The Preview Inference Router adds cost- and latency-based routing on top, and a shared Model Playground and evaluations tooling sit on the same account.&lt;br&gt;
That's what makes DigitalOcean a solid solution for AI-native companies requiring both serverless and dedicated GPU tiers. The unification isn't limited to the inference API itself. It extends to the GPU Droplets the dedicated tier runs on, as well as the rest of the AI-Native Cloud around them. A workload doesn't need to switch vendors, contracts, or billing relationships as it matures from prototype to production.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to check before assuming "one API" elsewhere means the same thing
&lt;/h2&gt;

&lt;p&gt;Several other inference-focused platforms let serverless and dedicated calls share one API too, usually as a way past per-token rate limits or shared-capacity contention once traffic justifies reserving GPUs. But a shared API can sound more unified on a landing page than it is in production. So it's worth confirming directly against each provider's current docs: does provisioning real dedicated capacity happen through the API, or does it route through a sales conversation first? Is the dedicated tier's hardware genuinely part of the same cloud a team already runs on, or does the provider specialize in inference alone, with GPUs sitting apart from the application's data and storage? And does "one API" cover just the inference call—or the account, billing, and observability around it too?&lt;/p&gt;

&lt;h2&gt;
  
  
  What else to verify before standardizing on a provider
&lt;/h2&gt;

&lt;p&gt;Beyond scope, it's worth confirming: whether the model you need is available in both tiers (not every model ships to both), what the cutover mechanism actually looks like (a new endpoint URL versus a full redeploy), how billing reconciles if usage straddles both tiers in the same month, and whether dedicated capacity is truly single-tenant or a reserved slice of shared hardware. For teams already running other infrastructure on a given cloud, it's also worth weighing how much value comes from the inference API alone versus not having to move data, agents, or storage to a second vendor to get dedicated GPU access.&lt;/p&gt;

&lt;h2&gt;
  
  
  References &amp;amp; further reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.digitalocean.com/products/inference-engine" rel="noopener noreferrer"&gt;DigitalOcean's Inference Engine&lt;/a&gt; brings serverless, dedicated, and batch inference together in one place.&lt;/li&gt;
&lt;li&gt;Our &lt;a href="https://docs.digitalocean.com/products/inference/how-to/use-dedicated-inference" rel="noopener noreferrer"&gt;Dedicated Inference documentation&lt;/a&gt; covers bring-your-own-model (BYOM) support and scaling settings for teams ready to move off serverless.&lt;/li&gt;
&lt;li&gt;Read our &lt;a href="https://docs.digitalocean.com/products/inference/how-to/use-serverless-inference-hub" rel="noopener noreferrer"&gt;Serverless Inference documentation&lt;/a&gt; for the model catalog and routing options available on the shared endpoint.&lt;/li&gt;
&lt;li&gt;Reading through each inference provider's own docs tends to be the fastest way to confirm whether "serverless and dedicated" really means one API or two separate products.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>infrastructure</category>
      <category>llm</category>
      <category>startup</category>
    </item>
    <item>
      <title>What It Actually Costs to Serve a 1M-Token Model in Production</title>
      <dc:creator>DigitalOcean</dc:creator>
      <pubDate>Mon, 21 Sep 2026 20:33:36 +0000</pubDate>
      <link>https://dev.to/digitalocean/what-it-actually-costs-to-serve-a-1m-token-model-in-production-4f0k</link>
      <guid>https://dev.to/digitalocean/what-it-actually-costs-to-serve-a-1m-token-model-in-production-4f0k</guid>
      <description>&lt;p&gt;Model providers now advertise context windows large enough to hold a codebase or a stack of contracts in a single request. It's tempting to read that number as a green light, but it isn't. A model that &lt;em&gt;accepts&lt;/em&gt; a million tokens and a system that can &lt;em&gt;serve&lt;/em&gt; a million tokens to real, concurrent users within your latency and cost budget are two different engineering problems. Conflating them is how teams end up with a demo that works and a bill or a &lt;a href="https://www.digitalocean.com/community/conceptual-articles/when-your-vllm-p99" rel="noopener noreferrer"&gt;p99 latency&lt;/a&gt; chart that doesn't.&lt;/p&gt;

&lt;p&gt;You serve a 1M-token model in production by treating context length as a cost and latency variable you manage on purpose, not a spec you flip on. Let’s dive into the memory math, the latency cliff, and the cost curve for serving a model with a million tokens of context, plus the caching and routing techniques that production teams use today to keep all three in check. Plus, a straight answer on when long context is the wrong tool for the job and retrieval should do the work instead.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key takeaways&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Serving a 1M-token context model in production is a memory, latency, and cost problem layered on top of a model capability. Supporting long context and serving it reliably are not the same claim.
&lt;/li&gt;
&lt;li&gt;Serving long context effectively means stable agent sessions and predictable spend, rather than retries, timeouts, and a bill that scales with the window instead of the question.
&lt;/li&gt;
&lt;li&gt;The real decision isn't whether to "turn on" long context, it's which combination of caching, prefix reuse, and retrieval fits your workload's cost and latency budget.
&lt;/li&gt;
&lt;li&gt;Production-grade 1M-token serving combines general techniques, including KV cache economics and prefix-reuse approaches like SGLang's RadixAttention. Use DigitalOcean Inference Router for cache-aware routing, plus retrieval-augmented generation (RAG) as the alternative and complement.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What "serving" a long-context model actually means
&lt;/h2&gt;

&lt;p&gt;Context is everything you send to a model in a single request, measured in tokens: the prompt, the documents, the conversation history. A 128K-token window is roughly a novel's worth of text, and frontier closed models now advertise up to 1M tokens (roughly, ten novels). That number describes what the model can read in isolation, but not what happens to time-to-first-token, batch size, or your GPU bill once dozens of those requests land on the same cluster at once.&lt;/p&gt;

&lt;p&gt;Support is a model capability, and performance is a serving question. The two come apart the moment real traffic shows up.&lt;/p&gt;

&lt;p&gt;Two mechanics decide whether a long-context request is slow to start or slow to finish:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.digitalocean.com/community/tutorials/prefill-decode-disaggregation" rel="noopener noreferrer"&gt;Prefill&lt;/a&gt;: The compute-bound pass where the model reads your entire input before writing anything.
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.digitalocean.com/community/conceptual-articles/how-kv-caching-slashes-llm-inference-costs-at-scale" rel="noopener noreferrer"&gt;KV cache&lt;/a&gt;: The memory that stores each token's key and value vectors so the model doesn't reread the input on every step.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dig in to how &lt;a href="https://www.digitalocean.com/community/tutorials/prefill-decode-disaggregation" rel="noopener noreferrer"&gt;prefill/decode disaggregation&lt;/a&gt; works: the two-phase split behind every long-context serving decision below.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why its worth optimizing for long-context
&lt;/h2&gt;

&lt;p&gt;Getting long-context serving right pays off in multiple ways.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Here's what's actually at stake once you're running this in production:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Stable agent and document workloads&lt;/strong&gt;: A correctly cached long-context session makes it possible for a coding agent or a multi-turn document review to hold state across dozens of turns without resending the same 100K-token context on every message.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Costs you can forecast&lt;/strong&gt;: Once you know whether traffic is cache-friendly or retrieval-shaped, it's easier to accurately predict spend.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No silent accuracy loss&lt;/strong&gt;: Long-context serving done well accounts for the fact that models answer less reliably as input grows. This happens by routing precision lookups to retrieval instead of trusting long-context recall, and by testing accuracy at the context lengths you'll actually run rather than assuming a bigger model or window is automatically more reliable.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latency you can put in an SLA&lt;/strong&gt;: Understanding the prefill/decode split lets you set a time-to-first-token target you can actually hit, instead of promising an interactive response time a long-context request can't deliver.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Room to scale without a rebuild&lt;/strong&gt;: Architectures built around caching and routing from the start absorb growth in context length and concurrent users without the rewrite that a "just resend everything" approach eventually forces.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What to evaluate before you commit to a long-context approach
&lt;/h2&gt;

&lt;p&gt;Long-context serving isn't a single decision, but rather a set of infrastructure and architecture choices considered together:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cache-awareness&lt;/strong&gt;: Check whether the serving layer reuses the KV cache across requests that share a common prefix, rather than recomputing it each time. The DigitalOcean &lt;a href="https://www.digitalocean.com/products/inference-engine" rel="noopener noreferrer"&gt;Inference Router&lt;/a&gt;, for example, pins a session to the same model so that a warm cache isn't discarded mid-task when switching to a different, cheaper model.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Batching under long-context load&lt;/strong&gt;: Confirm the system maintains healthy batch sizes as the average context length grows, using techniques like chunked prefill and paged memory allocation, rather than letting a single long request starve everything queued behind it.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Isolation from noisy neighbors&lt;/strong&gt;: Ask whether long-context and interactive traffic run in separate pools. &lt;a href="https://docs.digitalocean.com/products/inference/how-to/use-dedicated-inference/" rel="noopener noreferrer"&gt;Dedicated Inference&lt;/a&gt; on DigitalOcean exists specifically so a large document-processing job doesn't blow up latency for interactive users on the same infrastructure.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pricing that reflects the real cost curve&lt;/strong&gt;: Look for tiered, per-token pricing that acknowledges long-context requests cost more proportionally, plus a prompt-caching rate that's meaningfully cheaper than a full rewrite.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Observability into cache health, not just request counts&lt;/strong&gt;: Make sure you can see KV-cache occupancy, eviction, and preemption counts—not just average latency—since that's what actually explains a p99 problem caused by long-context traffic.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Resend, cache, retrieve, or both: what each costs per session
&lt;/h2&gt;

&lt;p&gt;The cleanest way to understand the cost of each approach is to price a full session rather than a single token.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;These examples take a 10-turn agent conversation carrying a stable 128K-token context—a codebase or a document set—where each turn adds a short question and gets a short answer:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Strategy&lt;/th&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;th&gt;Mechanism&lt;/th&gt;
&lt;th&gt;Cost per 10-turn session (128K context)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Resend the full context every turn&lt;/td&gt;
&lt;td&gt;Short, one-off sessions where simplicity matters more than cost&lt;/td&gt;
&lt;td&gt;Full context re-sent as input tokens on every turn&lt;/td&gt;
&lt;td&gt;$3.93&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cache the context; reuse it&lt;/td&gt;
&lt;td&gt;Stable, reused context — a codebase, a document set, a long agent session&lt;/td&gt;
&lt;td&gt;Prefill cost paid once; later turns reuse the cached KV state&lt;/td&gt;
&lt;td&gt;$0.95&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Retrieve a relevant slice (RAG)&lt;/td&gt;
&lt;td&gt;Large or changing corpora where each query touches a small fraction of the data&lt;/td&gt;
&lt;td&gt;Only the relevant slice enters context; the rest of the corpus stays out&lt;/td&gt;
&lt;td&gt;$0.33&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Figures per DigitalOcean's &lt;a href="https://www.digitalocean.com/community/tutorials/long-context-llm-serving-tradeoffs-2026" rel="noopener noreferrer"&gt;long-context serving tradeoffs analysis&lt;/a&gt;, priced at Claude Sonnet's published rates ($3.00/M input tokens, $3.75/M to write the cache, $0.30/M to read it).&lt;/p&gt;

&lt;p&gt;Caching cuts the bill roughly 4x against resending; retrieval cuts it roughly 12x. At thousands of sessions a day, that architecture choice matters more than any provider's per-token rate.&amp;nbsp;&lt;/p&gt;

&lt;h2&gt;
  
  
  The four tradeoffs that decide whether long-context works in production
&lt;/h2&gt;

&lt;p&gt;A 1M-token context window is a spec, not a guarantee that serving it will work. Memory, latency, throughput, and accuracy each break in their own way as context grows, and "supports 1M tokens" and "serves 1M tokens well" can be very different claims.&lt;/p&gt;

&lt;h3&gt;
  
  
  Memory: the KV cache doesn't scale the way people expect
&lt;/h3&gt;

&lt;p&gt;For every token a model reads, it stores a key and a value vector so it doesn't have to reprocess the input on each new token. That cache grows in direct proportion to context length: &lt;a href="https://www.digitalocean.com/community/tutorials/long-context-inference-production-cost" rel="noopener noreferrer"&gt;the math&lt;/a&gt; works out to roughly 43GB for a single 128K-token request on a 70-billion-parameter model in BF16—close to the model's own memory footprint. Push to a million tokens, and the cache alone exceeds what a single high-end GPU holds, before the model's own weights are even loaded.&lt;/p&gt;

&lt;h3&gt;
  
  
  Latency: why time-to-first-token is the number that breaks
&lt;/h3&gt;

&lt;p&gt;Attention compares every token against every other token, so compute grows with the square of input length: double the context, quadruple the work. That happens entirely during prefill, before a user sees a single word, which is why time-to-first-token ranges from milliseconds with short context to multiple seconds with long context. It also means one long request can hold a GPU for seconds, quietly degrading p95 and p99 latency for every short, unrelated request queued behind it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Throughput: the bandwidth ceiling no amount of compute fixes
&lt;/h3&gt;

&lt;p&gt;Generating each output token requires reading the entire KV cache from GPU memory, and the read speed is limited by hardware bandwidth. Double the context, double the cache, and tokens-per-second roughly halves, with a limit that has nothing to do with how much compute is sitting idle. A cluster can appear underutilized on a FLOPS dashboard and still serve long-context requests slowly because the bottleneck has shifted to the memory bus.&lt;/p&gt;

&lt;h3&gt;
  
  
  Accuracy: why a bigger window doesn't guarantee a better answer
&lt;/h3&gt;

&lt;p&gt;Longer context doesn't reliably mean a better answer. A 2026 measurement study found that accuracy at long context lengths doesn't track model size — a smaller model sometimes outperformed a larger sibling — and that a wrong answer just becomes a retry, which turns an accuracy problem into a latency problem measured in total time-to-correct-answer. Production systems that route by expected accuracy at a given context length, not just by cost, cut that wasted retry time substantially.&lt;/p&gt;

&lt;h2&gt;
  
  
  How production teams are actually solving the long-context problem today
&lt;/h2&gt;

&lt;p&gt;Successful teams aren't fighting the KV cache, they're making it reusable. &lt;a href="https://www.digitalocean.com/resources/articles/what-is-sglang" rel="noopener noreferrer"&gt;SGLang&lt;/a&gt;'s RadixAttention implements prefix caching alongside continuous batching, so a repeated prompt prefix (i.e. a system prompt, a shared reference document, a stable set of few-shot examples) gets computed once and reused across requests instead of recomputed on every call. That keeps throughput comparatively stable even as context length grows into the millions of tokens, which is exactly the workload where naive serving falls apart first.&lt;/p&gt;

&lt;p&gt;You can run this pattern yourself on &lt;a href="https://www.digitalocean.com/products/gpu-droplets" rel="noopener noreferrer"&gt;DigitalOcean GPU Droplets&lt;/a&gt;, or skip the setup work with the &lt;a href="https://www.digitalocean.com/resources/articles/what-is-sglang" rel="noopener noreferrer"&gt;SGLang 1-Click Marketplace app&lt;/a&gt;, which handles the underlying infrastructure for you.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F20hh5y3klu0mii00c2pp.png" class="article-body-image-wrapper"&gt;&lt;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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F20hh5y3klu0mii00c2pp.png" alt="SGLang on DigitalOcean" width="800" height="335"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;DigitalOcean's Inference Router adds cache-aware routing on top of that. It keeps a session pinned to the same model, so a warm KV cache doesn't get discarded mid-task by a switch to a different model chosen for cost reasons.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;If you're self-hosting long-context serving on GPU Droplets rather than going through a managed router, three additional levers matter:&amp;nbsp;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chunked prefill, which breaks a large prefill pass into pieces so it doesn't stall the rest of the batch.&amp;nbsp;
&lt;/li&gt;
&lt;li&gt;Tuning max batch size and max batched-token limits for your actual mix of context lengths.
&lt;/li&gt;
&lt;li&gt;Keeping long-context traffic in a separate pool from interactive traffic so one doesn't degrade the other.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When time-to-first-token degrades as context grows, &lt;a href="https://www.digitalocean.com/community/tutorials/debugging-p99-ttft-llm-inference" rel="noopener noreferrer"&gt;DigitalOcean's inference-debugging guidance&lt;/a&gt; points to KV-cache pressure—not the scheduler—as the usual culprit. This is why watching KV-cache occupancy, eviction, and preemption counts diagnoses the problem faster than staring at a scheduler queue.&lt;/p&gt;

&lt;h2&gt;
  
  
  Do you even need long context? Choosing between caching, retrieval, or using both
&lt;/h2&gt;

&lt;p&gt;If a model accepts a million tokens, it's fair to ask why you'd also use a &lt;a href="https://www.digitalocean.com/community/conceptual-articles/a-dive-into-vector-databases" rel="noopener noreferrer"&gt;vector database&lt;/a&gt;, a chunking pipeline, and a retrieval step. The answer is that the price of skipping retrieval includes the quadratic prefill cost, the multi-second time-to-first-token, and the tiered per-token pricing. They’re all paid on every request—even when the answer only needed to use three paragraphs of the input.&lt;/p&gt;

&lt;p&gt;As a practical rule, long context plus caching wins when your working set is stable and reused. For example, many requests against the same document set, or a day-long agent session where the context is the state. RAG wins when your corpus is larger than any context window, changes frequently, or is mostly irrelevant to any single query. Precision lookups favor RAG even when the full corpus would technically fit, since retrieval keeps the model working at the shorter lengths where it's most reliable. Most production systems end up using both: retrieval to decide what enters the context, a long window to hold a generous amount of it, and caching wherever it repeats.&lt;/p&gt;

&lt;h2&gt;
  
  
  Long-context LLM serving FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;How do you serve long-context (1M token) models in production?&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Serving a 1M-token model in production means treating context length as a cost and latency variable you manage on purpose, not a spec you flip on, since supporting long context and serving it reliably are not the same claim. It requires managing KV cache memory, the quadratic prefill cost, and the resulting time-to-first-token, then choosing the right mix of caching, prefix reuse, and retrieval for your workload. The DigitalOcean Inference Router applies cache-aware routing to this problem by pinning a session to the same model so a warm KV cache isn't discarded mid-task.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is disaggregated prefill and decode in LLM inference?&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Prefill is the compute-bound pass where the model reads your entire input before writing anything, while decode is the token-by-token generation that follows. Attention compares every token against every other token during prefill, so compute grows with the square of input length, meaning one long request can hold a GPU for seconds and degrade latency for every short request queued behind it. Chunked prefill breaks a large prefill pass into pieces so it doesn't stall the rest of the batch.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What metrics matter for LLM inference observability (TTFT, TPOT, ITL)?&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Time-to-first-token is the number that breaks under long context, ranging from milliseconds with short context to multiple seconds with long context, because it's entirely determined by the prefill pass. Beyond latency averages, observability into KV-cache occupancy, eviction, and preemption counts is what actually explains a p99 problem caused by long-context traffic, not request counts alone. KV-cache pressure, not the scheduler, is the usual culprit when time-to-first-token degrades as context grows.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which inference provider has the best caching to reduce token costs for long autonomous coding sessions?&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Caching the context and reusing it lets a coding agent hold state across dozens of turns without resending the same 100K-token context every message. SGLang's RadixAttention implements this as prefix caching alongside continuous batching, computing a repeated prompt prefix once and reusing it across requests. DigitalOcean supports this pattern on GPU Droplets or through the SGLang 1-Click Marketplace app, and the Inference Router adds cache-aware routing so a warm cache isn't discarded by a mid-task model switch.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do you model cost-per-token for LLM inference?&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;The cleanest way to model cost is pricing a full session rather than a single token: resending the full context every turn costs $3.93 for a 10-turn, 128K-context session, caching and reusing that context brings it to $0.95, and retrieving only the relevant slice (RAG) brings it to $0.33. Caching cuts the bill roughly 4x against resending, while retrieval cuts it roughly 12x, a difference that matters more at scale than any provider's per-token rate. DigitalOcean prices around this same curve, with tiered per-token rates that account for long-context requests costing more than proportionally, plus a prompt-caching rate meaningfully cheaper than a full rewrite.&lt;/p&gt;

&lt;h2&gt;
  
  
  Serve long-context models without managing the cache yourself
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://www.digitalocean.com/products/inference-engine" rel="noopener noreferrer"&gt;DigitalOcean Inference Engine&lt;/a&gt; prices per token by model, with prompt-caching rates listed right next to the standard rate. That means you can work out what a long-context session costs before you run it, not after the invoice shows up. The Inference Router automatically applies cache-aware routing, pinning a session to the model whose KV cache is already warm rather than discarding it during a mid-task switch.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;That gets you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automatic model-to-request matching, so cost- or latency-sensitive requests route to the right model without the need for writing the routing logic yourself.
&lt;/li&gt;
&lt;li&gt;Dedicated Inference to isolate long-context, latency-sensitive workloads from noisy-neighbor traffic.
&lt;/li&gt;
&lt;li&gt;Serverless-to-dedicated scaling with no migration step, so a workload that outgrows shared capacity doesn't require re-architecting.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://cloud.digitalocean.com/registrations/new" rel="noopener noreferrer"&gt;Get started with DigitalOcean's Inference Engine&lt;/a&gt; →&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.digitalocean.com/customers/hippocratic-ai" rel="noopener noreferrer"&gt;Hippocratic AI&lt;/a&gt; cut prefill latency 2x on long-context clinical sessions running production inference on DigitalOcean's cache-aware routing.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=WeAAISnnNVA" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=WeAAISnnNVA&lt;/a&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;These customer-reported results reflect Hippocratic AI’s methodology, workload, configuration, and measurement period and may not be representative of results in other environments. Results in customer environments may vary depending on configuration, implementation, and usage. Results and/or savings are not guaranteed.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Any references to third-party companies, trademarks, or logos in this document are for informational purposes only and do not imply any affiliation with, sponsorship by, or endorsement of those third parties.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>infrastructure</category>
      <category>llm</category>
      <category>developers</category>
    </item>
    <item>
      <title>AI token billing continues to cause sticker shock</title>
      <dc:creator>DigitalOcean</dc:creator>
      <pubDate>Fri, 18 Sep 2026 16:25:40 +0000</pubDate>
      <link>https://dev.to/digitalocean/ai-token-billing-continues-to-cause-sticker-shock-4a21</link>
      <guid>https://dev.to/digitalocean/ai-token-billing-continues-to-cause-sticker-shock-4a21</guid>
      <description>&lt;h3&gt;
  
  
  Tech talk: are there inference providers that are transparent about token usage?&amp;nbsp;
&lt;/h3&gt;

&lt;p&gt;A top pain point for companies using AI is the discrepancy between expected and actual invoice rates. Particularly when it comes to tokens. The increase in AI usage and tokenmaxxing has created a paradox where a provider knows exactly how many tokens it generated on your behalf, yet you find out only after the fact. It's become a real cost problem when using reasoning models. Internal step-by-step reasoning counts as billed output, but it's invisible by design. The providers willing to open up their token accounting now are betting that transparency will become table stakes before their competitors catch up.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;The 2025 study, “&lt;a href="https://arxiv.org/html/2508.00912v1" rel="noopener noreferrer"&gt;Predictive Auditing of Hidden Tokens in LLM APIs via Reasoning Length Estimation&lt;/a&gt;,” estimated that hidden reasoning tokens can account for over 90% of a model's total token spend on complex tasks. A short, simple-looking answer can hide 10,000+ reasoning tokens, but the only confirmation of their use is the bill.&lt;/p&gt;

&lt;p&gt;This trend in billing surprises has rightfully drawn industry attention. Especially with token usage projected to grow 24x to 120 quadrillion tokens per month by 2030, according to &lt;a href="https://www.goldmansachs.com/insights/articles/ai-agents-forecast-to-boost-tech-cash-flow-as-usage-soars" rel="noopener noreferrer"&gt;research from Goldman Sachs&lt;/a&gt;. Developers have started noticing the gap between what usage dashboards imply and what invoices actually charge, and the industry's response is arriving on two tracks.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;First, standards bodies are getting involved. The Linux Foundation's proposed &lt;a href="https://www.digitalocean.com/blog/inference-router-architecture" rel="noopener noreferrer"&gt;Tokenomics Foundation&lt;/a&gt; wants open, vendor-neutral measurement standards so token accounting isn't just whatever a provider's internal dashboard says it is.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Second, providers like Groq and Cerebras are sharing flat per-token pricing. And the newly launched DigitalOcean &lt;a href="https://www.digitalocean.com/blog/inference-router-architecture" rel="noopener noreferrer"&gt;Inference Router&lt;/a&gt; helps your team route tasks to the most cost-effective or optimal model, providing budget control based on your priorities for specific AI tasks.&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Thanks to rapidly scaling AI adoption, developers know these costs aren’t a simple line item to ignore. When evaluating inference options, knowing exactly how your tokens are used and what that can mean for overall billing is essential.&amp;nbsp;&lt;/p&gt;




&lt;h3&gt;
  
  
  Event calendar&amp;nbsp;
&lt;/h3&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.digitalocean.com/open-intelligence-summit" rel="noopener noreferrer"&gt;&lt;strong&gt;Open Intelligence Summit by DigitalOcean&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The argument is no longer “Is open source AI cheaper?” It’s now “Who owns intelligence?” A movement is forming around open intelligence and generating the belief that the intelligence powering our AI products and companies should be more open, portable, and controllable.&lt;/p&gt;

&lt;p&gt;Join DigitalOcean, RadixArk, Inferact, and more for deep dives, demos, and discussions about the technologies that keep intelligence portable, interoperable, and in the hands of builders. The two-day event runs at The Midway in San Francisco from October 12-13th.&amp;nbsp;&lt;/p&gt;




&lt;h3&gt;
  
  
  Industry news&amp;nbsp;
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Coding agents are earning real trust in production codebases&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A &lt;a href="https://arxiv.org/abs/2607.21832" rel="noopener noreferrer"&gt;study&lt;/a&gt; by researchers at Polytechnique Montréal, led by Canada Research Chair Foutse Khomh, analyzed 220,612 PRs across 539 Python repos and found Claude Code's PRs merge 84.3% of the time—well ahead of Codex (73.5%), Cursor (63.9%), Copilot (59.6%), and Devin (43.0%)—with bug rates comparable to or lower than human-written code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OpenAI launches GPT-6 Astra&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
OpenAI introduced &lt;a href="https://openai.com/index/gpt-6-astra/" rel="noopener noreferrer"&gt;GPT-6 Astra&lt;/a&gt;, a new frontier model focused on advanced reasoning, computer use, coding, scientific research, and professional workflows. The model achieves major gains across benchmarks, including 99.9% on ARC-AGI-3 and 100% on ExploitBench, while also improving task efficiency and alignment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Anthropic introduces Claude Fable 5.1 and Mythos 5.1&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The &lt;a href="https://www.anthropic.com/claude-fable-and-mythos-5-1" rel="noopener noreferrer"&gt;new models&lt;/a&gt; target advanced coding, knowledge work, and scientific research, with Fable 5.1 offering stronger performance at lower cost and Mythos 5.1 providing more permissive safeguards for vetted cybersecurity and life-science users.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Grok Bot comes to Android&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Cursor has launched the &lt;a href="https://forum.cursor.com/t/grok-bot-is-now-live-on-android/170384" rel="noopener noreferrer"&gt;Grok Bot Android app&lt;/a&gt;, letting users assign tasks to AI Bots from their phones, continue conversations across devices, and monitor multiple Bots running in parallel on cloud computers. The app is currently in beta for eligible Cursor and SuperGrok plans.&amp;nbsp;&lt;/p&gt;




&lt;h3&gt;
  
  
  Community tutorials&amp;nbsp;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.digitalocean.com/community/tutorials/why-your-best-model-is-two-models" rel="noopener noreferrer"&gt;&lt;strong&gt;Why Your Best Model Is Two Models: Routing Between Kimi K3 and Claude&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
Hardcoded routing logic gets messy fast and using a small model like Haiku to classify requests means paying for two calls on every one. DigitalOcean built Plano-Orchestrator, a routing model that scored 87.84% accuracy against GPT-5.1's 86.93% and Claude Sonnet 4.5's 86.11%, deciding where a request goes in about 200 milliseconds. Walk through building a router that pools Kimi K3 and Claude, and see how to check with live traffic data whether it's actually working.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.digitalocean.com/community/tutorials/spot-gpu-droplets-doks" rel="noopener noreferrer"&gt;&lt;strong&gt;Resilient GPU Compute on DigitalOcean Kubernetes: Surviving Spot Interruptions&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
When DOKS reclaims Spot GPU capacity, it deletes the entire node pool at once, not one node at a time so the usual "autoscaler quietly relaunches it" assumption breaks completely, and nothing automatically brings a reclaimed pool back. Walk through building a pre-provisioned On-Demand fallback pool that costs nothing until a reclaim happens, and run the companion repo's automated interruption simulation to see the failover in action.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.digitalocean.com/community/conceptual-articles/glm-5-3-flash-cost-per-token" rel="noopener noreferrer"&gt;&lt;strong&gt;GLM-5.3-Flash is the cheapest model on DigitalOcean. It's also the most verbose.&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
GLM-5.3-Flash lists at one twelfth of Qwen3.8-Max's output price, but on unconfigured defaults, it burned 625 output tokens answering what port SSH uses because it silently defaults to maximum reasoning effort, cutting its real-world price advantage down to just 2.3x. See the measured cost breakdown across 2,700 API calls, and get the one-line reasoning_effort fix that made Flash 6.3x cheaper on the same prompts.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.digitalocean.com/community/tutorials/pgvector-at-scale-article" rel="noopener noreferrer"&gt;&lt;strong&gt;When pgvector Starts to Slow Down as Your Vector Table Grows&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
A pgvector's query latency doesn't creep up gradually as a table grows. It stays flat for a long time, then jumps hard the moment the HNSW graph outgrows available RAM and Postgres starts reading it from disk instead. Get the six-step method for finding your own breaking point, measuring recall, latency, and index build time at the table sizes you'll actually reach.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.digitalocean.com/community/tutorials/does-context-length-affect-inference-cost-linearly" rel="noopener noreferrer"&gt;&lt;strong&gt;Does Context Length Affect Inference Cost Linearly? We Measured Why It Doesn't&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
Cost calculators price context length linearly, but measured throughput on a single H200 serving Ministral 3 14B fell from 19,089.8 tokens/sec at 2K context to 4,967.2 tokens/sec at 256K: a 3.84x collapse driven by concurrent request capacity dropping from 311 to just 2 as the fixed KV cache pool fills up. See the full cost curve and break-even utilization math showing exactly where a dedicated GPU stops being cheaper than a flat per-token serverless rate.&amp;nbsp;&lt;/p&gt;




&lt;h3&gt;
  
  
  Product updates
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.digitalocean.com/community/tutorials/spot-gpu-droplets-doks" rel="noopener noreferrer"&gt;&lt;strong&gt;DigitalOcean Kubernetes (DOKS) now supports Spot GPU Droplets&lt;/strong&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Running Spot GPUs on DOKS automates interruption handling with automatic cordoning, draining, and PodDisruptionBudget enforcement. Cluster autoscaling dynamically scales your GPU capacity based on workload demand. Kubernetes capabilities such as labels, taints, and node affinity allow you to configure on-demand node pools as a fallback when Spot capacity is reclaimed. Plus, reclaim events surface as native Kubernetes events. &lt;a href="https://cloud.digitalocean.com/gpus/new?i=403c6d&amp;amp;region=mem1&amp;amp;size=gpu-mi355x8-2304gb-spot&amp;amp;fleetUuid=94ff983a-9cbc-4198-a245-118a1e5e476b" rel="noopener noreferrer"&gt;Try it today&lt;/a&gt;&amp;nbsp;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>startup</category>
    </item>
    <item>
      <title>When is Serverless Inference Cheaper than Your Self Hosted GPU? I Benchmarked gpt-oss-120b on Both</title>
      <dc:creator>Yash Sharma</dc:creator>
      <pubDate>Tue, 23 Jun 2026 14:57:47 +0000</pubDate>
      <link>https://dev.to/digitalocean/when-is-serverless-inference-cheaper-than-your-self-hosted-gpu-i-benchmarked-gpt-oss-120b-on-both-4bla</link>
      <guid>https://dev.to/digitalocean/when-is-serverless-inference-cheaper-than-your-self-hosted-gpu-i-benchmarked-gpt-oss-120b-on-both-4bla</guid>
      <description>&lt;p&gt;If you run LLM inference in production, you eventually will ask yourself, should you rent a GPU and run the model yourself, or do you use a serverless API and pay per token? Everyone has an opinion. Far fewer people show you the actual numbers that decide it.&lt;/p&gt;

&lt;p&gt;So I ran both. I put the same model, &lt;a href="https://www.digitalocean.com/community/tutorials/run-gpt-oss-vllm-amd-gpu-droplet-rocm" rel="noopener noreferrer"&gt;gpt-oss-120b&lt;/a&gt;, on two setups, self-hosted with vLLM on a single &lt;a href="https://www.digitalocean.com/blog/now-available-amd-instinct-mi300x-gpus" rel="noopener noreferrer"&gt;AMD MI300X GPU Droplet&lt;/a&gt;, and on &lt;a href="https://docs.digitalocean.com/products/inference/how-to/si-overview/" rel="noopener noreferrer"&gt;DigitalOcean's Serverless Inference&lt;/a&gt;. Then I measured the cold start, the warm latency, and the cost, and worked out exactly where one becomes the better choice than the other.&lt;/p&gt;

&lt;p&gt;In short, self-hosted GPU is faster and more consistent once it's warm, but it carries a real cold start and you pay for it around the clock. Serverless hides the cold start and costs almost nothing at low volume, but you pay per token. Which one wins comes down to your traffic shape and how much your model actually outputs. Here are the numbers.&lt;/p&gt;

&lt;h2&gt;
  
  
  How long is the cold start on a self-hosted GPU?
&lt;/h2&gt;

&lt;p&gt;When you run a model yourself, the GPU doesn't hold the model permanently. The weights have to be loaded from disk into the GPU's memory and the inference engine has to initialize before it can answer a single request. That startup delay, the gap between "process launched" and "first token out," is the cold start. You pay it every time you start the server fresh, a new deploy, a restart after a crash, or a new node coming up to handle load.&lt;/p&gt;

&lt;p&gt;My setup here was a single AMD MI300X GPU Droplet running gpt-oss-120b with vLLM, with the weights already cached on disk. I started vLLM from cold and timed how long it took before the first token came back.&lt;/p&gt;

&lt;p&gt;It took about &lt;strong&gt;61 seconds&lt;/strong&gt;. That wasn't a one-off, either, across three restarts it landed between 60.8 and 61.4 seconds every time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjnm67pdeefgjbtehcise.png" class="article-body-image-wrapper"&gt;&lt;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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjnm67pdeefgjbtehcise.png" alt="Cold Start of Model" width="762" height="139"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One thing worth being precise about, because it's the most common misread, that 61 seconds is &lt;em&gt;not&lt;/em&gt; the time to download the model. The weights were already saved on disk, so this is the cost you pay on a restart or redeploy, not a one-time setup. The startup logs show where the time actually goes:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Phase&lt;/th&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Load weights from disk into VRAM (~68 GB)&lt;/td&gt;
&lt;td&gt;~24 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;torch.compile&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;~4 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CUDA graph capture&lt;/td&gt;
&lt;td&gt;~11 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Engine init, KV cache, warmup&lt;/td&gt;
&lt;td&gt;~21 s&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;So the 61 seconds &lt;em&gt;includes&lt;/em&gt; compilation and warmup, the entire engine bring-up, right up to serving a request. What it &lt;em&gt;excludes&lt;/em&gt; is the one-time download of the weights from Hugging Face, which you pay once and never again. (These phases come from one representative run and there's some overhead between stages, so they don't sum to exactly 61, but that's where the time lives.)&lt;/p&gt;

&lt;p&gt;This also answers the obvious follow-up, what happens when you scale up? If a new replica boots from an image with the weights baked in, or mounts a shared volume that already has them, it pays this ~61-second load, not a download. A brand-new node with nothing staged would also have to pull the weights first, but well-run setups specifically avoid that, because you don't want every scale event re-downloading 68 GB. So 61 seconds is the realistic number for a properly configured restart or scale-up&lt;/p&gt;

&lt;h2&gt;
  
  
  Warm latency and throughput
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp5isejarin6bm9q0aass.png" class="article-body-image-wrapper"&gt;&lt;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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp5isejarin6bm9q0aass.png" alt="Concurrent Benchmarking Of Warm Model" width="645" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once the model is loaded, it's a different machine. Warm, the self-hosted MI300X returned the first token in about &lt;strong&gt;322 ms&lt;/strong&gt; and sustained roughly &lt;strong&gt;154 tokens per second&lt;/strong&gt;, and it was remarkably stable, across twenty requests, the spread was about two milliseconds.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkryf08ri5xm8qlnm8vr5.png" class="article-body-image-wrapper"&gt;&lt;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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkryf08ri5xm8qlnm8vr5.png" alt="Benchmarking showcasing VRPAM used" width="800" height="110"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Memory is worth a note, because the raw number looks alarming. The card showed about &lt;strong&gt;173 GB of VRAM in use&lt;/strong&gt;. But the weights themselves are only about 68 GB. vLLM reserves most of the rest up front as KV-cache headroom (roughly 100 GB of it) so it can serve many requests at once. A 120B model doesn't "need" 173 GB; the engine just claims the room ahead of time.&lt;/p&gt;

&lt;p&gt;So the self-hosted trade-off is clean: once it's warm, it's fast, consistent, and entirely yours, but every cold start costs a full minute for our model, and you pay for the &lt;a href="https://www.digitalocean.com/pricing/gpu-droplets" rel="noopener noreferrer"&gt;GPU&lt;/a&gt; whether or not anyone is using it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Does serverless inference have a cold start?
&lt;/h2&gt;

&lt;p&gt;Next I ran the identical test against Serverless Inference. Calling it is straightforward, you create a &lt;a href="https://www.digitalocean.com/community/tutorials/serverless-inference-gradient" rel="noopener noreferrer"&gt;model access key&lt;/a&gt; and hit the &lt;a href="https://www.digitalocean.com/community/tutorials/serverless-inference-openai-sdk" rel="noopener noreferrer"&gt;OpenAI-compatible endpoint&lt;/a&gt;, so the client code is the same and only the base URL changes. I left the endpoint idle first, then measured first-token latency the same way.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqjp5ov87pdm3dyvjqx38.png" class="article-body-image-wrapper"&gt;&lt;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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqjp5ov87pdm3dyvjqx38.png" alt="Concurrent Benchmarking Of Serverless" width="567" height="483"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The first token came back in about &lt;strong&gt;546 ms&lt;/strong&gt;, with a wider spread, anywhere from 446 ms to roughly 1.3 seconds across twenty runs. But there was no spin-up. I ran it twenty times after sitting idle and never caught a cold-start hit.&lt;/p&gt;

&lt;p&gt;Two honest caveats on those numbers. First, the serverless requests travel over the network to DigitalOcean's endpoint, while the GPU test ran locally on the droplet, so some of that extra latency is network distance, not the model being slower. Here's the warm comparison side by side:&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;Self-hosted MI300X&lt;/th&gt;
&lt;th&gt;Serverless Inference&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Median time to first token&lt;/td&gt;
&lt;td&gt;~322 ms&lt;/td&gt;
&lt;td&gt;~546 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Spread (20 runs)&lt;/td&gt;
&lt;td&gt;~2 ms&lt;/td&gt;
&lt;td&gt;446 ms – 1.3 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Throughput&lt;/td&gt;
&lt;td&gt;~154 tok/s&lt;/td&gt;
&lt;td&gt;(per-token billed)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cold start&lt;/td&gt;
&lt;td&gt;~61 s&lt;/td&gt;
&lt;td&gt;none observed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;So why no cold start on serverless? It didn't delete the cold start, it absorbed it. DigitalOcean &lt;a href="https://www.digitalocean.com/blog/serverless-inference-deep-dive" rel="noopener noreferrer"&gt;pools GPU capacity across customers&lt;/a&gt;, so the model stayed warm without any effort from me, and I never paid the 61-second hit I took on my own box. The difference is the billing model: serverless isn't charged by the hour, it's charged per token.&lt;/p&gt;

&lt;p&gt;To be fair, serverless &lt;a href="https://www.digitalocean.com/resources/articles/serverless-inference" rel="noopener noreferrer"&gt;isn't immune to cold starts&lt;/a&gt;. If you hit it during a genuinely quiet stretch, you can still catch one. The standard mitigations are sending periodic warm-up requests to keep a worker hot, or designing async-first so a slow first response doesn't matter. In this test I didn't need any of that, it just stayed warm.&lt;/p&gt;

&lt;h2&gt;
  
  
  When is serverless inference cheaper than your own GPU?
&lt;/h2&gt;

&lt;p&gt;This is where the decision actually lives, and it comes down to arithmetic. The GPU is a flat cost, about &lt;a href="https://www.digitalocean.com/pricing/gpu-droplets" rel="noopener noreferrer"&gt;$1.88 an hour&lt;/a&gt; for a single on-demand MI300X, the same whether it serves one request or a million. Serverless is usage-based, gpt-oss-120b is priced at $0.10 per million input tokens and $0.70 per million output tokens, so it costs almost nothing when you're quiet and climbs as you get busier.&lt;/p&gt;

&lt;p&gt;The break-even point is your hourly GPU cost divided by your per-request cost:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;break-even requests/hour = GPU $/hr ÷ [(input_tokens × $0.10/1M) + (output_tokens × $0.70/1M)]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The catch is that the per-request cost depends entirely on how much your model outputs, and that moves the crossover more than you'd expect. I measured it at three response lengths, on the same GPU at the same prices, changing only the output length:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn2plb496wmer5azexrjs.png" class="article-body-image-wrapper"&gt;&lt;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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn2plb496wmer5azexrjs.png" alt="Benchmarking" width="586" height="134"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Response type&lt;/th&gt;
&lt;th&gt;Output tokens&lt;/th&gt;
&lt;th&gt;Crossover&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Short (classification / extraction)&lt;/td&gt;
&lt;td&gt;~30&lt;/td&gt;
&lt;td&gt;~18 requests/sec&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Medium (paragraph answer)&lt;/td&gt;
&lt;td&gt;~220&lt;/td&gt;
&lt;td&gt;~3 requests/sec&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Long (code / detailed explanation)&lt;/td&gt;
&lt;td&gt;~1,200&lt;/td&gt;
&lt;td&gt;&amp;lt;1 request/sec&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That's roughly a 25x swing from identical hardware, with nothing changing but response length. Output tokens are the expensive side of the bill, so the chattier your app, the sooner owning a GPU pays for itself.&lt;/p&gt;

&lt;p&gt;In plain terms, if your app sends short, snappy responses, serverless stays cheaper until you're well over a dozen requests per second, nonstop. If it writes long answers, the GPU starts winning below one request per second. (For comparison, &lt;a href="https://docs.digitalocean.com/products/inference/details/pricing/" rel="noopener noreferrer"&gt;Dedicated Inference&lt;/a&gt;, DigitalOcean's managed always-on endpoint, is billed by the GPU-hour like the Droplet but without you managing the it, so its economics sit closer to the self-hosted side of this table than the serverless side.) Drop your own response lengths and GPU rate into the formula and you'll find your exact line.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to use serverless inference, and when not to
&lt;/h2&gt;

&lt;p&gt;No "it depends." Here's the actual call.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For most teams, serverless is the right default.&lt;/strong&gt; Bursty or spiky traffic, real idle stretches, a dev tool, an internal feature, a side project, anything async where nobody is staring at a spinner on the first request. In all of those, the cold start runs on someone else's pooled capacity, not yours, and you pay nothing while you're quiet. For that kind of traffic, it's almost perfect.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Run the GPU yourself when traffic is steady and high-volume, or when you have a latency SLA you can't miss.&lt;/strong&gt; At that point your traffic rarely stops, so you're not benefiting from serverless's idle savings anyway, and you're using the GPU enough that flat hourly beats per-token. You keep it warm, so the cold start stops mattering. That's not a knock on serverless, it's just the wrong tool for that job.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you're in between, start on serverless.&lt;/strong&gt; Watch your token spend, and move to a dedicated GPU the day you cross the line for your response lengths. Don't buy a GPU to solve a problem you don't have yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run it yourself
&lt;/h2&gt;

&lt;p&gt;Everything here is reproducible. You can spin up an &lt;a href="https://www.digitalocean.com/community/tutorials/run-gpt-oss-vllm-amd-gpu-droplet-rocm" rel="noopener noreferrer"&gt;AMD GPU Droplet and run gpt-oss-120b on vLLM&lt;/a&gt;, hit the same model on &lt;a href="https://docs.digitalocean.com/products/inference/how-to/si-overview/" rel="noopener noreferrer"&gt;Serverless Inference&lt;/a&gt; with a &lt;a href="https://www.digitalocean.com/community/tutorials/serverless-inference-openai-sdk" rel="noopener noreferrer"&gt;model access key&lt;/a&gt;, and check the &lt;a href="https://docs.digitalocean.com/products/inference/reference/serverless-inference-metrics/" rel="noopener noreferrer"&gt;serverless metrics&lt;/a&gt; and &lt;a href="https://docs.digitalocean.com/products/inference/details/pricing/" rel="noopener noreferrer"&gt;pricing pages&lt;/a&gt; against your own workload.&lt;/p&gt;

&lt;p&gt;Don't take my crossover, run your own. And if you measure a cold start on your own setup, I'd genuinely like to see how the spread looks across different models and hardware.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>The Hidden Cost of Complex AI Platforms: Why Developer Experience Matters</title>
      <dc:creator>Shaoni Mukherjee</dc:creator>
      <pubDate>Thu, 28 May 2026 16:00:00 +0000</pubDate>
      <link>https://dev.to/digitalocean/the-hidden-cost-of-complex-ai-platforms-why-developer-experience-matters-1bb5</link>
      <guid>https://dev.to/digitalocean/the-hidden-cost-of-complex-ai-platforms-why-developer-experience-matters-1bb5</guid>
      <description>&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Developer experience is a real cost, not a soft metric&lt;/strong&gt;: Time lost in setup, debugging, and switching tools directly slows down how fast teams can build and iterate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Most friction comes from fragmented workflows&lt;/strong&gt;: When model hosting, compute, and deployment live in different places, even simple tasks become multi-step processes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time-to-First-Value (TTFV) is a critical signal:&lt;/strong&gt; The longer it takes to get a working output, the more likely teams are to lose momentum or abandon ideas early.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scaling introduces a hidden breaking point:&lt;/strong&gt; Moving from a simple API to dedicated infrastructure often forces teams to relearn workflows and rebuild systems.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;This is a systems problem, not a feature gap&lt;/strong&gt;: Many platforms weren’t designed end-to-end, which leads to disconnected experiences as teams grow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The fastest teams aren’t just using better models&lt;/strong&gt;: They’re working in environments where they can build, test, and scale without constant reconfiguration.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;The &lt;a href="https://www.digitalocean.com/resources/articles/leading-ai-cloud-providers" rel="noopener noreferrer"&gt;cloud AI platform&lt;/a&gt; ecosystem today looks more powerful than ever, with access to powerful GPUs like NVIDIA H100 and H200, massive libraries of pre-trained models, and full pipelines for &lt;a href="https://www.digitalocean.com/community/tutorials/fine-tuning-llms-on-budget-digitalocean-gpu" rel="noopener noreferrer"&gt;fine-tuning&lt;/a&gt; and inference.&lt;/p&gt;

&lt;p&gt;​​I recently tried deploying a simple inference endpoint for a model. Ideally, it should have taken a few minutes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;provision compute&lt;/li&gt;
&lt;li&gt;load the model&lt;/li&gt;
&lt;li&gt;send a request&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead, it took closer to &lt;strong&gt;two hours&lt;/strong&gt; before I got a successful response.&lt;/p&gt;

&lt;p&gt;Not because the model was difficult to run, but because of everything around it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Figuring out where to start&lt;/li&gt;
&lt;li&gt;No clear documentation&lt;/li&gt;
&lt;li&gt;Generating and configuring the right credentials&lt;/li&gt;
&lt;li&gt;Troubleshooting why the instance wasn’t accessible&lt;/li&gt;
&lt;li&gt;Installing dependencies that weren’t preconfigured&lt;/li&gt;
&lt;li&gt;Retrying after unclear or failed setup steps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these steps was particularly complex on its own. But together, they created enough friction to delay even a basic task.&lt;/p&gt;

&lt;p&gt;This pattern shows up often when working with AI platforms today.&lt;/p&gt;

&lt;p&gt;Most discussions focus on visible costs like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Compute pricing&lt;/li&gt;
&lt;li&gt;Storage usage&lt;/li&gt;
&lt;li&gt;API costs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But in practice, the higher cost is harder to measure.&lt;/p&gt;

&lt;p&gt;It’s the time spent navigating setup, resolving infrastructure issues, and figuring out how different parts of a platform fit together before any real work begins.&lt;/p&gt;

&lt;h2&gt;
  
  
  The real cost of building AI systems
&lt;/h2&gt;

&lt;p&gt;When teams evaluate AI platforms, the focus usually stays on obvious metrics like compute pricing or model performance. But the actual cost of &lt;a href="https://www.digitalocean.com/community/tutorials/build-ai-agents-the-right-way" rel="noopener noreferrer"&gt;building AI systems&lt;/a&gt; runs much deeper. It shows up in how long it takes to get started, how mentally demanding the platform is, and how much time is lost dealing with infrastructure instead of building products.&lt;/p&gt;

&lt;p&gt;One of the most overlooked factors is &lt;strong&gt;Time-to-First-Value (TTFV)&lt;/strong&gt;, the time it takes to go from signing up on a platform to getting your first meaningful output.&lt;/p&gt;

&lt;p&gt;But when TTFV stretches into hours or even days due to setup issues, unclear steps, or complex configuration, it creates friction right from the start. Developers lose patience, delay experimentation, or abandon the platform altogether. Over time, this directly impacts developer retention and slows down innovation, because fewer ideas make it past the initial stage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fragmentation: When one platform feels like many
&lt;/h2&gt;

&lt;p&gt;Imagine when a developer tries to log in and finds out multiple logins to separate platforms, which feels not only confusing but also hard to understand. When a single platform feels like multiple disconnected products stitched together.&lt;/p&gt;

&lt;p&gt;On the surface, everything may exist under one umbrella. But once you start using it, the experience tells a different story.&lt;/p&gt;

&lt;h3&gt;
  
  
  Split product surfaces
&lt;/h3&gt;

&lt;p&gt;On platforms like &lt;a href="https://nebius.com/" rel="noopener noreferrer"&gt;Nebius&lt;/a&gt;, you have AI Cloud and Token Factory, which require separate logins; this infrastructure feels like two separate worlds.&lt;/p&gt;

&lt;p&gt;You might provision compute in one place, manage models in another, and handle access or tokens somewhere else entirely. Each part works on its own, but they don’t always feel connected.&lt;/p&gt;

&lt;p&gt;For example, a developer might:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set up a GPU instance in one interface&lt;/li&gt;
&lt;li&gt;Switch to another section to access models&lt;/li&gt;
&lt;li&gt;Move again to configure authentication or tokens&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even though it’s technically one platform, it doesn’t feel like a single, cohesive system. This lack of cohesion forces developers to constantly piece together workflows on their own.&lt;/p&gt;

&lt;h3&gt;
  
  
  Confusing navigation
&lt;/h3&gt;

&lt;p&gt;Fragmentation often leads to a simple but frustrating question:&lt;br&gt;
 &lt;strong&gt;“Where do I even start?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When features are spread across different sections or products, developers are left guessing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which interface should I use first?&lt;/li&gt;
&lt;li&gt;Where do I run my model?&lt;/li&gt;
&lt;li&gt;Where do I manage credentials or access?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of a clear starting point, the experience becomes exploratory—and not in a good way.&lt;/p&gt;

&lt;p&gt;A common situation is having to jump between different portals just to complete a basic setup. For instance, setting up access in one place and then realizing you need to log into a completely different interface to actually use it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Broken flow
&lt;/h3&gt;

&lt;p&gt;This fragmentation becomes even more apparent when workflows are interrupted.&lt;/p&gt;

&lt;p&gt;Developers may encounter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Separate logins for different parts of the platform&lt;/li&gt;
&lt;li&gt;Different dashboards that don’t share context&lt;/li&gt;
&lt;li&gt;Disconnected user experiences that don’t carry over progress&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What fragmentation looks like
&lt;/h3&gt;

&lt;p&gt;A typical workflow, for example, building and deploying an agent, might look simple:&lt;/p&gt;

&lt;p&gt;But instead of happening in a single, continuous flow, each step exists in a different part of the platform.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Compute is managed in one dashboard&lt;/li&gt;
&lt;li&gt;Model configuration happens in another section&lt;/li&gt;
&lt;li&gt;Workflows are defined in a separate interface&lt;/li&gt;
&lt;li&gt;Logs and monitoring are located somewhere else&lt;/li&gt;
&lt;li&gt;Access and credentials are handled independently&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each step works on its own.&lt;/p&gt;

&lt;h3&gt;
  
  
  The hidden cost
&lt;/h3&gt;

&lt;p&gt;Fragmentation usually doesn’t hurt in the beginning. When a single developer is experimenting, it’s still manageable to move between different sections of a platform and piece things together. The problem starts when the team grows, and the workflow becomes more complex. This typically happens when:&lt;/p&gt;

&lt;p&gt;1) Multiple components like models, agents, and data sources are involved,&lt;/p&gt;

&lt;p&gt;2) More than one developer is working on the system, and&lt;/p&gt;

&lt;p&gt;3) Faster iteration and debugging become important.&lt;/p&gt;

&lt;p&gt;At this stage, constantly switching between interfaces, tools, and dashboards slows everything down because there is no single place to see or manage the full workflow. This issue exists because most platforms are not built as a unified system from the start.&lt;/p&gt;

&lt;p&gt;Fragmentation is not about missing features, but it is about how those features are connected to make it feel like a single system.&lt;/p&gt;

&lt;h2&gt;
  
  
  The anti-developer experience
&lt;/h2&gt;

&lt;p&gt;A common pattern across many AI platforms is asking developers to commit before they’ve had a chance to see real value.&lt;/p&gt;

&lt;p&gt;In some cases, you’re required to add billing details even before running your first model. In others, the free credits are so limited that you can barely complete a meaningful experiment. You might start testing an idea, only to run out of credits halfway through, without fully understanding whether it works.&lt;/p&gt;

&lt;p&gt;This creates psychological friction.&lt;/p&gt;

&lt;p&gt;Instead of freely exploring, developers become cautious. They hesitate to try new models, avoid running multiple experiments, and constantly think about cost rather than creativity. The experience shifts from curiosity to calculation.&lt;/p&gt;

&lt;p&gt;But better-designed platforms take a different approach.&lt;/p&gt;

&lt;p&gt;They give developers enough room to explore properly, sometimes even offering generous free credits, so you can actually spin up resources, run models, and experiment without immediate pressure. You can try things, make mistakes, and learn before worrying about billing.&lt;/p&gt;

&lt;p&gt;Because once developers see something work, they’re far more likely to continue building.&lt;/p&gt;

&lt;h2&gt;
  
  
  The scaling cliff nobody talks about
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.digitalocean.com/resources/articles/inference-as-service" rel="noopener noreferrer"&gt;Inference-as-a-service&lt;/a&gt; feels effortless in the beginning. You send a request to an API, get a response, and move on. There is no need to think about infrastructure, scaling, or deployment. This makes it incredibly effective during the early stages, where the focus is on building quickly, experimenting, and testing ideas without friction.&lt;/p&gt;

&lt;p&gt;In this phase, everything works because the system is still small.&lt;/p&gt;

&lt;p&gt;1) The number of requests is low,&lt;/p&gt;

&lt;p&gt;2) Latency is not critical, and&lt;/p&gt;

&lt;p&gt;3) Occasional failures are acceptable.&lt;/p&gt;

&lt;p&gt;The platform handles everything behind the scenes, allowing developers to focus entirely on the product.&lt;/p&gt;

&lt;p&gt;The problem starts when the system begins to grow.&lt;/p&gt;

&lt;p&gt;As usage increases, the same setup is now operating under very different conditions. More users mean more requests, often happening at the same time. Latency is no longer just a technical detail; it becomes part of the user experience. Failures are no longer minor inconveniences; they directly impact reliability.&lt;/p&gt;

&lt;p&gt;This is where cracks begin to appear.&lt;/p&gt;

&lt;h3&gt;
  
  
  A common scaling cliff in inference
&lt;/h3&gt;

&lt;p&gt;A typical early setup looks like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A hosted model endpoint&lt;/li&gt;
&lt;li&gt;Pay-per-request pricing&lt;/li&gt;
&lt;li&gt;No infrastructure management&lt;/li&gt;
&lt;li&gt;Acceptable latency (often in the 300–500 ms range)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At low to moderate usage, this model works well. Teams can ship quickly, iterate rapidly, and avoid thinking about GPUs or deployment complexity.&lt;/p&gt;

&lt;p&gt;The problem is not at the start, but it emerges when usage becomes &lt;em&gt;predictable and sustained&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where things start breaking
&lt;/h3&gt;

&lt;p&gt;As request volume grows (for example, into the range of thousands of requests per day), a consistent pattern of issues begins to appear:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Latency variability increases&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cold starts become more frequent&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://medium.com/javarevisited/mastering-latency-metrics-p90-p95-p99-d5427faea879" rel="noopener noreferrer"&gt;P95&lt;/a&gt; latency spikes unpredictably&lt;/li&gt;
&lt;li&gt;Limited ability to tune performance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Cost efficiency degrades&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pay-per-request pricing scales linearly with usage&lt;/li&gt;
&lt;li&gt;No optimization for steady workloads&lt;/li&gt;
&lt;li&gt;The same workload becomes disproportionately expensive&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Lack of capacity guarantees&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No predictable throughput&lt;/li&gt;
&lt;li&gt;No visibility into resource allocation&lt;/li&gt;
&lt;li&gt;No way to reserve or prioritize compute&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At this stage, the limitation is not a missing feature but a mismatch between the pricing and deployment model and the workload.&lt;/p&gt;

&lt;h3&gt;
  
  
  The forced transition
&lt;/h3&gt;

&lt;p&gt;The natural next step is moving to dedicated infrastructure.&lt;/p&gt;

&lt;p&gt;In practice, this transition introduces significant complexity:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Selecting GPU types without clear workload mapping&lt;/li&gt;
&lt;li&gt;Configuring deployment environments manually&lt;/li&gt;
&lt;li&gt;Implementing autoscaling policies&lt;/li&gt;
&lt;li&gt;Managing routing, load balancing, and failure handling&lt;/li&gt;
&lt;li&gt;Rebuilding abstractions that were previously handled by the platform&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What begins as a simple API integration evolves into a full infrastructure problem.&lt;/p&gt;

&lt;h3&gt;
  
  
  The real cost
&lt;/h3&gt;

&lt;p&gt;Teams are forced to shift from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Product iteration → infrastructure management&lt;/li&gt;
&lt;li&gt;Application logic → deployment tuning&lt;/li&gt;
&lt;li&gt;Fast experimentation → operational maintenance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This shift directly impacts development velocity.&lt;/p&gt;

&lt;p&gt;In many cases, the bottleneck is no longer model performance or GPU access, but the effort required to operate the system reliably at scale.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why this matters
&lt;/h3&gt;

&lt;p&gt;Inference is often presented as two separate modes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Serverless APIs for getting started&lt;/li&gt;
&lt;li&gt;Dedicated infrastructure for scaling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, the transition between these modes is fragmented.&lt;/p&gt;

&lt;p&gt;This creates a gap where teams:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Overpay for convenience longer than they should&lt;/li&gt;
&lt;li&gt;Delay scaling due to operational complexity&lt;/li&gt;
&lt;li&gt;Or prematurely invest in infrastructure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The issue is not the availability of tools.&lt;br&gt;
 It is the lack of a smooth, continuous path between them.&lt;/p&gt;

&lt;p&gt;This is a structural problem in the current inference ecosystem — and one that directly impacts how quickly teams can move from prototype to production.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why it feels like a cliff
&lt;/h3&gt;

&lt;p&gt;This shift feels difficult not just because there is more to do, but because the change is abrupt.&lt;/p&gt;

&lt;p&gt;Teams go from a world where everything is abstracted behind a simple API to one where they are responsible for compute, scaling, and reliability. There is no gradual transition between these two states.&lt;/p&gt;

&lt;p&gt;There is no middle layer that offers both simplicity and control.&lt;/p&gt;

&lt;p&gt;That is why it feels like a cliff instead of a smooth progression.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why this happens
&lt;/h3&gt;

&lt;p&gt;This gap exists because platforms are built with different starting points. Inference-focused platforms are designed for simplicity and fast onboarding, so they abstract away infrastructure details. Compute-focused platforms, on the other hand, are built for flexibility and performance, which means they require deeper involvement from the developer.&lt;/p&gt;

&lt;p&gt;Over time, both types of platforms try to expand their capabilities. Inference platforms add more control, and compute platforms add higher-level abstractions. But these additions are layered on top rather than designed as a unified system.&lt;/p&gt;

&lt;p&gt;As a result, the transition between simplicity and control is not seamless.&lt;/p&gt;

&lt;h3&gt;
  
  
  The real impact
&lt;/h3&gt;

&lt;p&gt;This shift usually happens at a critical moment, when the product is gaining traction and needs to scale reliably.&lt;/p&gt;

&lt;p&gt;Instead of focusing on improving the product, teams find themselves dealing with infrastructure, performance issues, and system stability. The pace of development slows down, not because the problem is harder, but because the platform now requires significantly more effort to manage.&lt;/p&gt;

&lt;p&gt;It is what happens when they begin to work at scale, and the platform that once made things easy is no longer enough.&lt;/p&gt;

&lt;h2&gt;
  
  
  What good AI platforms actually look like
&lt;/h2&gt;

&lt;p&gt;After all the friction, the starting problem, platform debugging, understanding the documentation, and platform fragmentation, it is easy to think the problem is missing features, but it's not.&lt;/p&gt;

&lt;p&gt;Most platforms already have the same core capabilities. What actually matters is how much effort it takes to go from an idea to something that works and keep it working as it grows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scenario 1&lt;/strong&gt;: Building an AI Agent in an Integrated Workflow&lt;br&gt;
Consider building a simple AI agent or &lt;a href="https://www.digitalocean.com/community/tutorials/build-ai-agent-chatbot-with-gradient-platform" rel="noopener noreferrer"&gt;chatbot&lt;/a&gt; on an integrated platform where models, Knowledge bases, embedding models, and workflows are available in one place.&lt;/p&gt;

&lt;p&gt;A simpler platform will make this process pretty straightforward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select the model&lt;/li&gt;
&lt;li&gt;Define the agent logic&lt;/li&gt;
&lt;li&gt;Add appropriate knowledge base&lt;/li&gt;
&lt;li&gt;Add a data source to your knowledge base&lt;/li&gt;
&lt;li&gt;Run a test input&lt;/li&gt;
&lt;li&gt;Make your agent publicly available&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And that's it. What stands out in this setup is not the number of features, but how the flow behaves.&lt;/p&gt;

&lt;p&gt;You don’t need to switch between multiple interfaces to connect components. The model, workflow, and execution are visible in the same place. When you make a change, it reflects immediately without requiring additional setup or restarts.&lt;/p&gt;

&lt;p&gt;If something fails, the issue is tied directly to the step where it happened. You don’t have to search across different dashboards to understand what went wrong.&lt;/p&gt;

&lt;p&gt;The experience feels continuous.&lt;/p&gt;

&lt;p&gt;You start with an idea, implement it, and see the result without getting pulled into infrastructure or configuration issues.&lt;/p&gt;

&lt;p&gt;This is what a unified workflow looks like in practice, not just having all the pieces, but having them work together in a way that reduces effort at every step.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scenario 2:&lt;/strong&gt; Consider a setup where a team moves from a basic API-based workflow to dedicated inference in order to handle real user traffic more reliably.&lt;/p&gt;

&lt;p&gt;The goal is simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Deploy a model with dedicated capacity&lt;/li&gt;
&lt;li&gt;Send requests through a stable endpoint&lt;/li&gt;
&lt;li&gt;Maintain consistent response times&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;What changes in this setup is not the workflow itself, but how predictable it becomes.&lt;/p&gt;

&lt;p&gt;Once the model is deployed on dedicated infrastructure, requests are no longer competing for shared resources. Response times become more consistent, even as usage increases. Instead of worrying about rate limits or sudden slowdowns, the system behaves in a way that is easier to reason about.&lt;/p&gt;

&lt;p&gt;At the same time, the transition does not require rebuilding everything from scratch. The way requests are sent and responses are handled remains familiar. The difference is that there is more control over how the system performs under load.&lt;/p&gt;

&lt;p&gt;If something needs to be adjusted, such as scaling capacity or tuning performance, it can be done without changing the core application logic.&lt;/p&gt;

&lt;p&gt;This is where dedicated inference makes a difference in practice, not by adding complexity, but by making the system more stable as it grows.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;You don’t switch contexts to get basic work done&lt;/strong&gt;
In a well-designed platform, deploying a model, testing it, and monitoring it all happen in one place. You’re not jumping between dashboards, CLI tools, and cloud consoles just to complete a single workflow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time-to-First-Value (TTFV) stays consistently low&lt;/strong&gt;
It shouldn’t take hours to figure out how to get a model running. A good platform makes the “first successful response” happen quickly — not just in ideal conditions, but even when you’re unfamiliar with the setup. If you’re spending time debugging environment issues instead of validating outputs, that’s a design failure, not a user error.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The path from prototype to scale doesn’t change shape&lt;/strong&gt;
One of the biggest failure points in current platforms is that the workflow breaks when you scale. A well-designed system keeps the same mental model — the way you deploy and interact with a model at a small scale should still work when traffic increases. You shouldn’t need to relearn everything just to handle more requests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Infrastructure decisions are abstracted until they actually matter&lt;/strong&gt;
You shouldn’t need to think about GPU types, networking, or provisioning just to test an idea. Good platforms delay these decisions without hiding them completely — they only surface when you have a real reason to care, like optimizing latency or cost.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Failure modes are visible and easy to debug&lt;/strong&gt;
When something breaks, it’s obvious where and why. You’re not digging through multiple systems trying to trace a failed request. Logs, errors, and performance signals are tied directly to the workflow you’re already using, so debugging doesn’t become a separate project.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The hardest part of building AI systems today isn’t getting access to models or GPUs, but it’s everything that happens around them.&lt;/p&gt;

&lt;p&gt;It’s the time lost moving between tools.&lt;/p&gt;

&lt;p&gt;It’s the friction of stitching together workflows that were never designed to work as one.&lt;br&gt;
It’s the moment when something that worked at a small scale suddenly forces a complete rewrite.&lt;/p&gt;

&lt;p&gt;And most of this doesn’t show up in benchmarks or pricing comparisons. It shows up in delays, workarounds, and abandoned ideas.&lt;/p&gt;

&lt;p&gt;The teams that will win on inference aren’t the ones with the most compute. They’re the ones that can move from idea to working system and then to scale without having to change how they build along the way.&lt;/p&gt;

&lt;p&gt;The real question isn’t which platform has the best features.&lt;/p&gt;

&lt;p&gt;It’s this:&lt;br&gt;
&lt;strong&gt;How many times does your workflow break before you get to something that actually works?&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://medium.com/javarevisited/mastering-latency-metrics-p90-p95-p99-d5427faea879" rel="noopener noreferrer"&gt;Mastering Latency Metrics: P90, P95, P99&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.digitalocean.com/community/tutorials/bulk-inference-content-pipeline-digitalocean-serverless" rel="noopener noreferrer"&gt;How I Built a Content Generation Pipeline Using DigitalOcean Serverless Inference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.wired.com/story/the-ai-industrys-scaling-obsession-is-headed-for-a-cliff/" rel="noopener noreferrer"&gt;The AI Industry’s Scaling Obsession Is Headed for a Cliff&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>developers</category>
      <category>discuss</category>
      <category>devex</category>
    </item>
    <item>
      <title>How to Deploy Hermes' Self-Improving AI Agent</title>
      <dc:creator>haimantika mitra</dc:creator>
      <pubDate>Tue, 26 May 2026 16:00:00 +0000</pubDate>
      <link>https://dev.to/digitalocean/how-to-deploy-hermes-self-improving-ai-agent-4gm6</link>
      <guid>https://dev.to/digitalocean/how-to-deploy-hermes-self-improving-ai-agent-4gm6</guid>
      <description>&lt;h2&gt;
  
  
  Key takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;You host Hermes on a DigitalOcean Droplet (Ubuntu 24.04, at least 2 vCPUs and 4 GB RAM), install with the official script, and run &lt;code&gt;hermes setup&lt;/code&gt; for your LLM provider.&lt;/li&gt;
&lt;li&gt;The Telegram bot uses &lt;code&gt;hermes gateway setup&lt;/code&gt; and a persistent gateway service so Hermes stays reachable after you close SSH.&lt;/li&gt;
&lt;li&gt;Skills are Markdown files under &lt;code&gt;~/.hermes/skills/&lt;/code&gt;. MCP servers go in Hermes config and expose tools such as grocery search and cart actions.&lt;/li&gt;
&lt;li&gt;HTTP MCP with OAuth on a headless server uses the URL Hermes prints plus an SSH tunnel from your laptop browser to the Droplet loopback port.&lt;/li&gt;
&lt;li&gt;The grocery walkthrough uses Swiggy Instamart where available; you swap in another MCP URL for your region or stack.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;2026 is the year of agents doing the task for us rather than just guiding us to. We saw the rise of OpenClaw and now we have &lt;a href="https://hermes-agent.nousresearch.com/docs/" rel="noopener noreferrer"&gt;Hermes agent&lt;/a&gt;. It is an open-source, self-improving AI agent built by &lt;a href="https://nousresearch.com/" rel="noopener noreferrer"&gt;Nous Research&lt;/a&gt;. It has a built-in learning loop that creates skills from experience, improves them during use, nudges itself to persist knowledge, and builds a deepening model of who you are across sessions.&lt;/p&gt;

&lt;p&gt;In this tutorial, you will deploy Hermes on a &lt;a href="https://www.digitalocean.com/products/droplets" rel="noopener noreferrer"&gt;DigitalOcean Droplet&lt;/a&gt;, connect it to Telegram, and extend it with a custom skill. As a practical example, you will see how to build a grocery tracking agent that monitors daily consumption, alerts you when stock is low, and places orders automatically through a grocery delivery service.&lt;/p&gt;

&lt;p&gt;The grocery example uses &lt;a href="https://github.com/Swiggy/swiggy-mcp-server-manifest" rel="noopener noreferrer"&gt;Swiggy Instamart&lt;/a&gt;, which is available in India. But the approach works with any MCP-compatible service, such as a local grocery API, a task manager, a calendar, or a home automation system. The pattern is the same no matter what you connect.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before you begin, you will need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A DigitalOcean account. If you do not have one, &lt;a href="https://cloud.digitalocean.com/registrations/new" rel="noopener noreferrer"&gt;sign up here&lt;/a&gt;.
&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu" rel="noopener noreferrer"&gt;DigitalOcean Droplet&lt;/a&gt; running Ubuntu 24.04 with at least 2 vCPUs and 4 GB RAM.
&lt;/li&gt;
&lt;li&gt;A Telegram account.
&lt;/li&gt;
&lt;li&gt;API key from an LLM provider. Hermes supports Anthropic, OpenAI, OpenRouter, and others.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What are we building
&lt;/h2&gt;

&lt;p&gt;Hermes is model-agnostic and platform-agnostic. It can connect to any tool that supports the &lt;a href="https://www.digitalocean.com/community/tutorials/control-apps-using-mcp-server" rel="noopener noreferrer"&gt;Model Context Protocol (MCP)&lt;/a&gt;, and it can send and receive messages on Telegram, WhatsApp, Discord, and Slack. You can find more information on their &lt;a href="https://hermes-agent.nousresearch.com/docs/" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The architecture in this tutorial looks like this:&lt;/p&gt;

&lt;p&gt;&lt;a 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%2Fv19jyonedh6059nid2fo.png" class="article-body-image-wrapper"&gt;&lt;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%2Fv19jyonedh6059nid2fo.png" alt="Architecture" width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let’s get started building:&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1. Create the Droplet
&lt;/h2&gt;

&lt;p&gt;Sign in to your DigitalOcean account and &lt;a href="https://cloud.digitalocean.com/droplets/new" rel="noopener noreferrer"&gt;create a new Droplet&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;On the creation page, select:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Region:&lt;/strong&gt; The one closest to you
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Image:&lt;/strong&gt; Ubuntu 24.04 LTS
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plan:&lt;/strong&gt; Basic, with at least 2 vCPUs and 4 GB RAM (the &lt;code&gt;s-2vcpu-4gb&lt;/code&gt; size)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authentication:&lt;/strong&gt; SSH Key&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you need help adding an SSH key, follow the &lt;a href="https://docs.digitalocean.com/products/droplets/how-to/add-ssh-keys/" rel="noopener noreferrer"&gt;DigitalOcean SSH key guide&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Once the Droplet is created, SSH into it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh root@YOUR_DROPLET_IP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Update the system before installing anything:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2. Install Hermes Agent
&lt;/h2&gt;

&lt;p&gt;Hermes provides an install script that handles all dependencies including Python, &lt;code&gt;uv&lt;/code&gt;, and the &lt;code&gt;hermes&lt;/code&gt; binary itself.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once it finishes, reload your shell so the &lt;code&gt;hermes&lt;/code&gt; command is available:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;source&lt;/span&gt; ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run the setup wizard:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;hermes setup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The wizard will ask you to choose an LLM provider and enter your API key. Select your provider, paste your key, and Hermes will save it to &lt;code&gt;~/.hermes/.env&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Verify the installation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;hermes &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 3. Connect Hermes to Telegram
&lt;/h2&gt;

&lt;p&gt;Hermes connects to Telegram through a bot. Run the gateway setup:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;hermes gateway setup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When it asks which platform to use, select Telegram. Hermes will walk you through creating a bot with Telegram's BotFather. Follow the steps in your terminal.&lt;/p&gt;

&lt;p&gt;Once setup is complete, start the gateway:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;hermes gateway start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To keep it running after you disconnect from the Droplet, enable it as a system service:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;hermes-gateway
systemctl start hermes-gateway
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open Telegram, find the bot you just created, and send it a message like "hello." If it responds, Hermes is connected and ready.&lt;/p&gt;

&lt;p&gt;You can now talk to Hermes from anywhere on your phone. Ask it to check the weather, set a reminder, search the web, or run a command on your Droplet. It handles all of this out of the box.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4. Understand skills and MCP servers
&lt;/h3&gt;

&lt;p&gt;Before building the automation example, let's understand two core Hermes concepts:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Skills&lt;/strong&gt; - These are Markdown files that teach Hermes how to handle specific tasks. You write a skill file describing what the task is, what triggers it, and what steps to follow. Hermes reads all skill files in &lt;code&gt;~/.hermes/skills/&lt;/code&gt; at startup and uses them to handle relevant requests.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCP Servers&lt;/strong&gt; - It gives Hermes access to external services. &lt;a href="https://www.digitalocean.com/community/tutorials/model-context-protocol" rel="noopener noreferrer"&gt;MCP (Model Context Protocol)&lt;/a&gt; is an open standard that lets AI agents communicate with APIs in a structured way. If a service publishes an MCP server, Hermes can search its products, manage carts, read calendars, create tasks, and more. You add MCP servers to your Hermes config and Hermes uses them automatically when relevant.&lt;/p&gt;

&lt;p&gt;Together, skills and MCP servers let you build automations that are specific to your life and the tools you use.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5. Build real-world automation: Grocery tracking
&lt;/h2&gt;

&lt;p&gt;Personally, I am very bad at keeping a tab of groceries and often find myself out of essential stock just when I am about to cook. So I wanted to automate this process for me. I eat similar food everyday and also measure my calories. I used all of this information to automate grocery shopping for me.&lt;/p&gt;

&lt;p&gt;The goal of Hermes was to track my daily grocery consumption, alert me on Telegram when something is running low, and place an order through a grocery delivery service when I say yes.&lt;/p&gt;

&lt;p&gt;This example uses the &lt;a href="https://github.com/Swiggy/swiggy-mcp-server-manifest" rel="noopener noreferrer"&gt;Swiggy Instamart MCP server&lt;/a&gt;, which is available in India. If you are in a different country, you can swap it out for any MCP-compatible grocery or delivery service. The skill logic stays exactly the same.&lt;/p&gt;

&lt;h3&gt;
  
  
  Creating the skill file
&lt;/h3&gt;

&lt;p&gt;Create a directory for the skill:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; ~/.hermes/skills/grocery
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create the skill file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano ~/.hermes/skills/grocery/grocery_tracker.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Paste the following and edit the &lt;code&gt;groceries:&lt;/code&gt; section to match your actual diet and quantities:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Grocery Auto-Order Skill&lt;/span&gt;

&lt;span class="gu"&gt;### My Daily Grocery List&lt;/span&gt;

groceries:
&lt;span class="p"&gt;  -&lt;/span&gt; name: "Milk"
    unit: "ml"
    daily_consumption: 500
    reorder_quantity: 2000
    alert_threshold_days: 3
    search_query: "fresh milk 1 litre"
&lt;span class="p"&gt;
  -&lt;/span&gt; name: "Eggs"
    unit: "pieces"
    daily_consumption: 2
    reorder_quantity: 12
    alert_threshold_days: 3
    search_query: "eggs 12 pack"
&lt;span class="p"&gt;
  -&lt;/span&gt; name: "Oats"
    unit: "gm"
    daily_consumption: 60
    reorder_quantity: 1000
    alert_threshold_days: 7
    search_query: "rolled oats 1kg"

  # Add your own items following the same format

&lt;span class="gu"&gt;### Instructions for Hermes&lt;/span&gt;

&lt;span class="gu"&gt;#### Daily check&lt;/span&gt;
Read ~/.hermes/grocery_inventory.json. Subtract each item's
daily_consumption from its current quantity. For any item where
quantity / daily_consumption is less than or equal to
alert_threshold_days, send a Telegram alert listing the low
items and ask if the user wants to place an order.

&lt;span class="gu"&gt;#### On YES&lt;/span&gt;
Search each low item using its search_query at the user's saved
delivery address. Add reorder_quantity of each to cart. Send a
cart summary via Telegram with prices and total. Wait for CONFIRM.

&lt;span class="gu"&gt;#### On CONFIRM&lt;/span&gt;
Place the order. Update grocery_inventory.json with the restocked
quantities. Send a delivery confirmation message.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save with &lt;code&gt;Ctrl+O&lt;/code&gt;, then &lt;code&gt;Enter&lt;/code&gt;, then exit with &lt;code&gt;Ctrl+X&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Creating the inventory file
&lt;/h3&gt;

&lt;p&gt;The inventory file tracks how much of each item you have at home right now.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano ~/.hermes/grocery_inventory.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"last_updated"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-05-07"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"delivery_address"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"YOUR FULL ADDRESS HERE"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"snooze_until"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"items"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Milk"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"quantity"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"unit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ml"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Eggs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"quantity"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"unit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"pieces"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Oats"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"quantity"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"unit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"gm"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace the quantities with what you actually have at home. Save and exit.&lt;/p&gt;

&lt;h3&gt;
  
  
  Connect to an MCP server
&lt;/h3&gt;

&lt;p&gt;Add the grocery service MCP to your Hermes config:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;hermes config edit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Scroll to the bottom of the file and add your MCP server. For Swiggy Instamart:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;mcp_servers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;swiggy-instamart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://mcp.swiggy.com/im"&lt;/span&gt;
    &lt;span class="na"&gt;auth&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;oauth&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For any other MCP-compatible service, replace the name and URL with the values from that service's documentation.&lt;/p&gt;

&lt;p&gt;Save and exit, then verify it appears:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;hermes mcp list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 6. Authenticate with your MCP server
&lt;/h2&gt;

&lt;p&gt;Most MCP servers require OAuth authentication. Because your Droplet is headless, the OAuth callback needs to reach your browser through an &lt;a href="https://www.digitalocean.com/community/tutorials/ssh-port-forwarding" rel="noopener noreferrer"&gt;SSH tunnel&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Run the login command on your Droplet:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;hermes mcp login swiggy-instamart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hermes will print a URL containing a port number in the redirect URI, like &lt;code&gt;http://127.0.0.1:45123/callback&lt;/code&gt;. Note that port number.&lt;/p&gt;

&lt;p&gt;On your local machine, open a new terminal and run the SSH tunnel using that port:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh &lt;span class="nt"&gt;-i&lt;/span&gt; ~/.ssh/id_ed25519 &lt;span class="nt"&gt;-L&lt;/span&gt; 45123:127.0.0.1:45123 root@YOUR_DROPLET_IP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Keep that terminal open, then immediately open the URL from your Droplet in your browser and complete the login. You have about 30 seconds before the token expires, so have both terminals ready before you start.&lt;/p&gt;

&lt;p&gt;When authentication succeeds, your Droplet terminal will show:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;✓ Authenticated — tools available
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Telling Hermes Your Current Stock
&lt;/h3&gt;

&lt;p&gt;Start Hermes and initialize the inventory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;hermes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Set up my grocery tracker. Ask me for current stock levels for each item in the grocery_tracker skill.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hermes will ask about each item one by one. Answer with what you currently have at home and it will update &lt;code&gt;grocery_inventory.json&lt;/code&gt; automatically. Once you have given the update, you will receive a message similar to this:&lt;/p&gt;

&lt;p&gt;&lt;a 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%2Fio61346lvkbkrs9fvvvy.jpeg" class="article-body-image-wrapper"&gt;&lt;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%2Fio61346lvkbkrs9fvvvy.jpeg" alt="image2" width="708" height="1536"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Setting up the daily alert
&lt;/h3&gt;

&lt;p&gt;Still inside Hermes, set up the cron job:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add a daily cron at 8am: check my grocery inventory using the grocery_tracker skill, subtract daily consumption, and send me a Telegram message if anything is running low.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hermes will schedule this and confirm. From now on, every morning it checks your stock and messages you on Telegram if you need to reorder. This is how it looks:&lt;/p&gt;

&lt;p&gt;&lt;a 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%2Fhcclwz1w6o4zjddrvi1r.jpeg" class="article-body-image-wrapper"&gt;&lt;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%2Fhcclwz1w6o4zjddrvi1r.jpeg" alt="image3" width="800" height="1482"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 7. Test the full flow
&lt;/h2&gt;

&lt;p&gt;Send a test message to your Telegram bot:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Check my groceries and tell me what's running low.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should receive a Telegram message like this:&lt;/p&gt;

&lt;p&gt;&lt;a 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%2Flblvjle66s7ejl9uvviu.png" class="article-body-image-wrapper"&gt;&lt;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%2Flblvjle66s7ejl9uvviu.png" alt="image4" width="800" height="1734"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reply &lt;strong&gt;YES&lt;/strong&gt;. Hermes searches your connected grocery service, builds a cart, and sends a summary.&lt;/p&gt;

&lt;p&gt;Once everything is set up, you can manage your agent entirely from Telegram:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Message&lt;/th&gt;
&lt;th&gt;What Hermes does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Check my groceries&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Shows all items and days of stock remaining&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;I bought 12 eggs&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Updates egg stock in the inventory file&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Order groceries now&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Skips the check and goes straight to ordering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;What's running low?&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Lists items near their alert threshold&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SKIP&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Snoozes today's alert until tomorrow&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;You now have a self-hosted AI agent running on DigitalOcean that works for you around the clock. Hermes connects to Telegram and more messaging platforms so you can reach it from anywhere, and skills plus MCP servers let you extend it to handle almost anything.&lt;/p&gt;

&lt;p&gt;The grocery automation you built in this tutorial is a starting point. The pattern is reusable: write a skill file that describes the task, connect an MCP server that gives Hermes access to the right service, and set a cron job to trigger it automatically. The grocery automation is one example. The same pattern works for any repetitive task in your life. A few ideas to get you started:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bill reminders-&lt;/strong&gt; Create a skill that tracks recurring payments, calculates due dates, and alerts you three days before each bill is due.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Health tracking-&lt;/strong&gt;  Log your workouts or meals via Telegram and have Hermes summarize your week every Sunday.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Home automation-&lt;/strong&gt; Connect Hermes to a smart home MCP server and have it adjust lights, thermostats, or appliances based on a schedule or your location.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/nousresearch/hermes-agent" rel="noopener noreferrer"&gt;Hermes Agent on GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://modelcontextprotocol.io" rel="noopener noreferrer"&gt;Model Context Protocol documentation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.digitalocean.com/products/droplets/" rel="noopener noreferrer"&gt;DigitalOcean Droplets documentation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.digitalocean.com/products/droplets/how-to/add-ssh-keys/" rel="noopener noreferrer"&gt;How to add SSH keys to Droplets&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://core.telegram.org/bots/tutorial" rel="noopener noreferrer"&gt;Telegram BotFather guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>hermes</category>
      <category>ai</category>
      <category>agents</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>April 2026 DigitalOcean Tutorials: Inference Optimization and AI Infrastructure</title>
      <dc:creator>DigitalOcean</dc:creator>
      <pubDate>Fri, 22 May 2026 21:55:02 +0000</pubDate>
      <link>https://dev.to/digitalocean/april-2026-digitalocean-tutorials-inference-optimization-and-ai-infrastructure-5fcf</link>
      <guid>https://dev.to/digitalocean/april-2026-digitalocean-tutorials-inference-optimization-and-ai-infrastructure-5fcf</guid>
      <description>&lt;p&gt;Most AI teams hit the same walls once they move past prototyping. The RAG pipeline that worked flawlessly in a demo starts hallucinating under real traffic. Inference costs climb without clear optimization levers. GPU resources sit underutilized while workloads spike elsewhere. &lt;/p&gt;

&lt;p&gt;Most of the time, the root cause traces back to architecture decisions that weren't pressure-tested for production. This month's &lt;a href="https://www.digitalocean.com/community/tutorials" rel="noopener noreferrer"&gt;DigitalOcean tutorials&lt;/a&gt; focus on diagnosing and fixing those failure points across the AI infrastructure stack.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.digitalocean.com/community/conceptual-articles/why-rag-systems-fail-in-production" rel="noopener noreferrer"&gt;Why RAG Systems Fail in Production&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Why do seemingly solid RAG demos collapse under real-world conditions? This article traces failures back to retrieval quality, latency tradeoffs, and embedding drift. You’ll get a clear picture of how upstream decisions—such as chunking strategy and ranking—directly affect downstream LLM outputs. If your team is building production pipelines, evaluation, monitoring, and retrieval engineering matter just as much as model choice.&lt;/p&gt;

&lt;p&gt;&lt;a 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%2Fogkanycez0ox4kj1fjmi.png" class="article-body-image-wrapper"&gt;&lt;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%2Fogkanycez0ox4kj1fjmi.png" alt="RAG System architecture" width="800" height="576"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.digitalocean.com/community/conceptual-articles/dedicated-vs-serverless-inference-at-scale" rel="noopener noreferrer"&gt;Dedicated vs. Serverless Inference as You Scale&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;The choice between serverless and dedicated inference isn't a one-time decision but an evolution driven by how your workload changes over time. Early on, serverless makes sense because traffic is unpredictable and iteration speed matters more than performance optimization. As usage stabilizes, the cracks show up—latency variability frustrates users and per-request pricing gets expensive for always-on systems. Walk-throughs of Modal and Together.ai show where that transition point hits and why delaying it costs you.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.digitalocean.com/community/conceptual-articles/serverless-fine-tuned-llms" rel="noopener noreferrer"&gt;Fine-Tuned LLMs on Serverless Architecture&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Parameter-efficient methods like LoRA let platforms serve hundreds of fine-tuned model variants from a single GPU by layering small adapter weights on top of a shared frozen base model. This makes serverless, pay-per-token inference possible for custom models without dedicated GPU deployments. The tradeoff is cold starts: idle adapters get evicted from VRAM and need to be reloaded, adding a few hundred milliseconds of latency to the first token. You’ll learn how to minimize that with keep-alive requests, adapter rank tuning, and smarter layer targeting.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.digitalocean.com/community/tutorials/model-silent-versioning-problem" rel="noopener noreferrer"&gt;The Silent Versioning Problem in AI Inference&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;This one is a cautionary tale about what happens when the model behind your endpoint changes and nobody tells you. The serving stack is full of moving parts that can shift independently of the model name, and the result is silent regressions that break prompt tuning and invalidate your evaluations before you even know something moved. It includes a practical buyer's checklist for pressing inference platforms on snapshot pinning, retention commitments, and how they handle disclosure when something in the stack changes.&lt;/p&gt;

&lt;p&gt;&lt;a 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%2Fai6i5tt8aydh7zx752l8.png" class="article-body-image-wrapper"&gt;&lt;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%2Fai6i5tt8aydh7zx752l8.png" alt="Silent versioning framework" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.digitalocean.com/community/conceptual-articles/bottlenecks-llm-inference-optimization" rel="noopener noreferrer"&gt;The Hidden Bottlenecks in LLM Inference and How to Fix Them&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Faster GPUs are not the answer if the rest of your serving stack can't keep up. Spoiler: the bottlenecks are GPU underutilization from rigid batching, memory bandwidth constraints during decode, KV cache fragmentation, and CPU-side overhead from tokenization and prompt assembly. Click through for a deeper look at each one and practical fixes.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.digitalocean.com/community/tutorials/ai-platform-security-review" rel="noopener noreferrer"&gt;We Built a Private-Document AI App to Test Platform Security. Here Is What We Could Actually Verify&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;AI security should always be treated as a first-class concern, not an afterthought. This tutorial puts that to the test by building a private-document chatbot and running the same workflow across six inference platforms: DigitalOcean, Baseten, Nebius, Fireworks AI, Modal, and Together AI. Each platform is evaluated on access controls, data retention defaults, network isolation, audit logging, and shared responsibility clarity. It doubles as a practical framework for figuring out what you can actually verify before sensitive data is in flight.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.digitalocean.com/community/tutorials/post-inference-querying-mongodb" rel="noopener noreferrer"&gt;Post-Inference Storage and Querying with MongoDB&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Many inference tutorials stop at the model response. This one keeps going. You'll build a FastAPI app that sends images through a vision model, stores the structured predictions in MongoDB, and then exposes endpoints that let you filter by detected labels and confidence scores or run aggregation pipelines across your full dataset. It's a practical blueprint for turning raw model output into something queryable and operational.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.digitalocean.com/community/tutorials/how-to-build-multi-agent-ai-system-docker-agent-digitalocean" rel="noopener noreferrer"&gt;How to Build a Multi-Agent AI System with Docker and DigitalOcean&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Instead of routing everything through a single model, multi-agent systems let you split a workflow across specialized agents that each handle a different part of the problem and pass results between them. The tradeoff is coordination complexity. This walkthrough covers how to containerize each agent with Docker, manage communication between them, and deploy the full system on DigitalOcean. You'll come away with a working deployment pattern you can adapt to your own orchestration needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://www.digitalocean.com/community/tutorials/gpu-fleet-optimizer" rel="noopener noreferrer"&gt;Building an AI-Powered GPU Fleet Optimizer with the DigitalOcean AI Platform ADK&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;A single idle GPU Droplet left running overnight can add hundreds of dollars to your monthly bill, and standard CPU monitoring won't catch it because it can't see whether the GPU is actually doing work. This tutorial builds an AI-powered agent using the DigitalOcean AI Platform ADK that scrapes NVIDIA DCGM metrics like VRAM usage, engine utilization, and power draw across your fleet in real time. It compares those metrics against configurable thresholds to flag idle resources before they inflate your cloud spend. The repo is designed to be forked and customized to your own workloads, including adding tools that let the agent take action like powering off idle nodes.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>infrastructure</category>
      <category>tutorial</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
