<?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: claire nguyen</title>
    <description>The latest articles on DEV Community by claire nguyen (@claire_nguyen).</description>
    <link>https://dev.to/claire_nguyen</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3864932%2F406e92e1-2c8d-4d65-a1f4-a8d4e8c2fd1d.jpg</url>
      <title>DEV Community: claire nguyen</title>
      <link>https://dev.to/claire_nguyen</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/claire_nguyen"/>
    <language>en</language>
    <item>
      <title>ML Infrastructure Renaissance: What Everyone's Missing About GPU Orchestration</title>
      <dc:creator>claire nguyen</dc:creator>
      <pubDate>Sun, 19 Apr 2026 20:25:34 +0000</pubDate>
      <link>https://dev.to/claire_nguyen/ml-infrastructure-renaissance-what-everyones-missing-about-gpu-orchestration-5fd5</link>
      <guid>https://dev.to/claire_nguyen/ml-infrastructure-renaissance-what-everyones-missing-about-gpu-orchestration-5fd5</guid>
      <description>&lt;h2&gt;
  
  
  What's Your Experience?
&lt;/h2&gt;

&lt;p&gt;I'm curious to hear from other infrastructure engineers: what's the most overlooked challenge you're seeing in ML infrastructure today? Are there tools or patterns that have worked particularly well for your teams?&lt;/p&gt;

</description>
      <category>machinelearning</category>
      <category>ai</category>
      <category>infrastructure</category>
    </item>
    <item>
      <title>When Your LLM Provider Pulls the Rug: Lessons from Anthropic's OAuth Shutdown</title>
      <dc:creator>claire nguyen</dc:creator>
      <pubDate>Sun, 19 Apr 2026 19:27:09 +0000</pubDate>
      <link>https://dev.to/claire_nguyen/when-your-llm-provider-pulls-the-rug-lessons-from-anthropics-oauth-shutdown-31hh</link>
      <guid>https://dev.to/claire_nguyen/when-your-llm-provider-pulls-the-rug-lessons-from-anthropics-oauth-shutdown-31hh</guid>
      <description>&lt;p&gt;On April 4th, 2026, Anthropic revoked OAuth access for OpenClaw, killing over 135,000 integrations overnight. Developers who built workflows around Claude Pro/Max subscriptions woke up to broken pipelines and a 10-50x cost increase to stay on Anthropic via API.&lt;/p&gt;

&lt;p&gt;This wasn't just another API change—it was a stark reminder that when your authentication and routing goes through a mechanism that your provider controls exclusively, they can pull the rug whenever their business priorities shift.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Hidden Dependency Trap
&lt;/h2&gt;

&lt;p&gt;We had two internal services that authenticated directly against Anthropic's API. When the OpenClaw situation happened, we weren't directly affected, but it prompted a thorough audit of our LLM infrastructure. What we found was concerning:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hardcoded provider logic&lt;/strong&gt;: Model names baked into agent configurations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Different auth patterns&lt;/strong&gt;: Each provider has unique token refresh flows&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Incompatible error handling&lt;/strong&gt;: Different auth failure codes across providers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost lock-in&lt;/strong&gt;: Subscription models vs API pricing created massive cost disparities&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Swapping from Anthropic to OpenAI or Gemini wasn't just a model change—it required rewriting authentication layers, updating response parsing, and redeploying services.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Gateway Pattern Solution
&lt;/h2&gt;

&lt;p&gt;We moved to routing everything through a centralized gateway that manages provider credentials. Our application code now authenticates against our own gateway API keys, and the gateway handles per-provider authentication.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Benefits we gained:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Provider agnosticism&lt;/strong&gt;: Swap models without touching application code&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Centralized monitoring&lt;/strong&gt;: Single point for health checks and metrics&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatic failover&lt;/strong&gt;: Gateway can reroute requests during outages&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost optimization&lt;/strong&gt;: Route to cheapest provider that meets quality thresholds&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Implementation Strategy
&lt;/h2&gt;

&lt;p&gt;Here's how we structured our gateway:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Simplified gateway routing logic
&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;LLMGateway&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;providers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;anthropic&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;AnthropicProvider&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
            &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;openai&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;OpenAIProvider&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
            &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;gemini&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;GeminiProvider&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;health_checker&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;HealthChecker&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;route_request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fallback_strategy&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cheapest_available&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="c1"&gt;# Check provider health and availability
&lt;/span&gt;        &lt;span class="n"&gt;healthy_providers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;health_checker&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_healthy_providers&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

        &lt;span class="c1"&gt;# Apply routing strategy
&lt;/span&gt;        &lt;span class="n"&gt;selected_provider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;_select_provider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;healthy_providers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
            &lt;span class="n"&gt;fallback_strategy&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;selected_provider&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Abstract provider specifics&lt;/strong&gt;: Don't let provider-specific logic leak into your application&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Assume instability&lt;/strong&gt;: Treat LLM providers as unreliable dependencies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build for portability&lt;/strong&gt;: Make swapping providers a config change, not a code change&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor everything&lt;/strong&gt;: Health checks should be continuous, not reactive&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plan for failure&lt;/strong&gt;: Have automatic fallback routes for every critical path&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Bigger Picture
&lt;/h2&gt;

&lt;p&gt;This pattern extends beyond LLMs. Any third-party service that could change pricing, access models, or business priorities should be abstracted through a gateway. Whether it's payment processors, email services, or cloud storage—the principle remains the same.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The most resilient systems aren't the ones that never fail. They're the ones that fail gracefully and recover automatically.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;By treating LLM providers as interchangeable components rather than foundational infrastructure, we build systems that can adapt to market changes without requiring massive rewrites.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;What provider abstraction patterns are you using in your AI infrastructure? Share your experiences in the comments!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>llm</category>
    </item>
  </channel>
</rss>
