<?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: Interro</title>
    <description>The latest articles on DEV Community by Interro (@interro-ai).</description>
    <link>https://dev.to/interro-ai</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4141949%2Fd059b7a0-20eb-4245-a8ca-87af84b044ce.png</url>
      <title>DEV Community: Interro</title>
      <link>https://dev.to/interro-ai</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/interro-ai"/>
    <language>en</language>
    <item>
      <title>I Tested Cloudflare Workers AI Free Tier and Found 24 Powerful LLMs You Can Use Today</title>
      <dc:creator>Interro</dc:creator>
      <pubDate>Mon, 28 Sep 2026 05:16:12 +0000</pubDate>
      <link>https://dev.to/interro-ai/i-tested-cloudflare-workers-ai-free-tier-and-found-24-powerful-llms-you-can-use-today-511h</link>
      <guid>https://dev.to/interro-ai/i-tested-cloudflare-workers-ai-free-tier-and-found-24-powerful-llms-you-can-use-today-511h</guid>
      <description>&lt;p&gt;Most developers know about OpenAI, Anthropic, Groq, and Cerebras.&lt;br&gt;
What many developers don't realize is that Cloudflare Workers AI provides access to a large collection of open-source models through a single API endpoint.&lt;br&gt;
The interesting part?&lt;br&gt;
Many of these models are usable on Cloudflare's free tier.&lt;br&gt;
I recently decided to test Cloudflare Workers AI to answer three questions:&lt;/p&gt;

&lt;p&gt;Which models are actually available on the free plan?&lt;br&gt;
Which models are best for coding?&lt;br&gt;
How do Cloudflare's limits compare to Groq, Cerebras, and other providers?&lt;/p&gt;

&lt;p&gt;The results were honestly surprising.&lt;/p&gt;

&lt;p&gt;The Experiment&lt;br&gt;
Cloudflare exposes a model catalog API:&lt;br&gt;
Invoke-RestMethod &lt;code&gt;&lt;br&gt;
  -Uri "https://api.cloudflare.com/client/v4/accounts/$AccountId/ai/models/search"&lt;/code&gt;&lt;br&gt;
  -Headers $Headers&lt;/p&gt;

&lt;p&gt;My account returned more than 300 models.&lt;br&gt;
Initially, I assumed that every model listed would be available.&lt;br&gt;
I was wrong.&lt;br&gt;
Some models appeared in the catalog but were blocked when inference requests were executed.&lt;br&gt;
For example:&lt;br&gt;
zai-org/glm-5.3&lt;br&gt;
zai-org/glm-5.3-flash&lt;br&gt;
zai-org/glm-5.2&lt;br&gt;
moonshotai/kimi-k2.6&lt;br&gt;
moonshotai/kimi-k2.7-code&lt;/p&gt;

&lt;p&gt;returned:&lt;br&gt;
{&lt;br&gt;
  "code": 5035,&lt;br&gt;
  "message": "Model is not available on the Workers Free plan"&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;This led me to create a discovery script that:&lt;/p&gt;

&lt;p&gt;Enumerated all available models&lt;br&gt;
Executed a test inference&lt;br&gt;
Recorded successful responses&lt;br&gt;
Recorded paid-plan restrictions&lt;/p&gt;

&lt;p&gt;Models That Worked on the Free Tier&lt;br&gt;
After testing, these models successfully accepted inference requests.&lt;br&gt;
OpenAI&lt;br&gt;
openai/gpt-oss-20b&lt;br&gt;
openai/gpt-oss-120b&lt;/p&gt;

&lt;p&gt;Qwen&lt;br&gt;
qwen/qwen2.5-coder-32b-instruct&lt;br&gt;
qwen/qwen3-30b-a3b-fp8&lt;br&gt;
qwen/qwen3.8-27b&lt;br&gt;
qwen/qwq-32b&lt;/p&gt;

&lt;p&gt;DeepSeek&lt;br&gt;
deepseek-ai/deepseek-r1-distill-qwen-32b&lt;/p&gt;

&lt;p&gt;Meta Llama&lt;br&gt;
meta/llama-3.1-8b-instruct-fp8&lt;br&gt;
meta/llama-3.2-1b-instruct&lt;br&gt;
meta/llama-3.2-3b-instruct&lt;br&gt;
meta/llama-3.3-70b-instruct-fp8-fast&lt;br&gt;
meta/llama-4-scout-17b-16e-instruct&lt;/p&gt;

&lt;p&gt;Google Gemma&lt;br&gt;
google/gemma-2b-it-lora&lt;br&gt;
google/gemma-7b-it-lora&lt;br&gt;
google/gemma-4-26b-a4b-it&lt;br&gt;
aisingapore/gemma-sea-lion-v4-27b-it&lt;/p&gt;

&lt;p&gt;Mistral&lt;br&gt;
mistral/mistral-7b-instruct-v0.2-lora&lt;br&gt;
mistralai/mistral-small-3.1-24b-instruct&lt;/p&gt;

&lt;p&gt;ZAI&lt;br&gt;
&lt;a class="mentioned-user" href="https://dev.to/cf"&gt;@cf&lt;/a&gt;/zai-org/glm-4.7-flash&lt;/p&gt;

&lt;p&gt;IBM&lt;br&gt;
ibm-granite/granite-4.0-h-micro&lt;/p&gt;

&lt;p&gt;NVIDIA&lt;br&gt;
nvidia/nemotron-3-120b-a12b&lt;/p&gt;

&lt;p&gt;Biggest Surprise&lt;br&gt;
I initially started testing because I wanted access to GLM 5.3 Flash.&lt;br&gt;
The result?&lt;br&gt;
GLM 4.7 Flash ✅&lt;br&gt;
GLM 5.2 ❌&lt;br&gt;
GLM 5.3 ❌&lt;br&gt;
GLM 5.3 Flash ❌&lt;/p&gt;

&lt;p&gt;GLM 4.7 Flash was available on the free tier while all newer GLM models required a paid plan.&lt;/p&gt;

&lt;p&gt;Best Models For Coding&lt;br&gt;
After testing many providers over the last year, this is how I would rank the Cloudflare free models for software development.&lt;br&gt;
🥇 GPT-OSS-120B&lt;br&gt;
&lt;a class="mentioned-user" href="https://dev.to/cf"&gt;@cf&lt;/a&gt;/openai/gpt-oss-120b&lt;/p&gt;

&lt;p&gt;Best overall coding model.&lt;br&gt;
Excellent at:&lt;/p&gt;

&lt;p&gt;Terraform&lt;br&gt;
Kubernetes&lt;br&gt;
DevOps&lt;br&gt;
AWS Architecture&lt;br&gt;
Refactoring&lt;br&gt;
Multi-file repositories&lt;/p&gt;

&lt;p&gt;If I could pick only one model, it would be GPT-OSS-120B.&lt;/p&gt;

&lt;p&gt;🥈 Qwen2.5-Coder-32B&lt;br&gt;
&lt;a class="mentioned-user" href="https://dev.to/cf"&gt;@cf&lt;/a&gt;/qwen/qwen2.5-coder-32b-instruct&lt;/p&gt;

&lt;p&gt;Purpose-built coding model.&lt;br&gt;
Excellent at:&lt;/p&gt;

&lt;p&gt;Generating code&lt;br&gt;
Reviewing pull requests&lt;br&gt;
Fixing bugs&lt;br&gt;
Understanding repositories&lt;br&gt;
Continue.dev&lt;br&gt;
Cline&lt;/p&gt;

&lt;p&gt;This model consistently performs above its size class.&lt;/p&gt;

&lt;p&gt;🥉 DeepSeek-R1-Distill-Qwen-32B&lt;br&gt;
&lt;a class="mentioned-user" href="https://dev.to/cf"&gt;@cf&lt;/a&gt;/deepseek-ai/deepseek-r1-distill-qwen-32b&lt;/p&gt;

&lt;p&gt;Best reasoning model.&lt;br&gt;
Excellent at:&lt;/p&gt;

&lt;p&gt;Root cause analysis&lt;br&gt;
Complex debugging&lt;br&gt;
Architecture reviews&lt;br&gt;
Agent workflows&lt;/p&gt;

&lt;p&gt;This is the model I would use when a pipeline breaks at 2 AM and nobody knows why.&lt;/p&gt;

&lt;p&gt;Honorable Mentions&lt;br&gt;
QWQ-32B&lt;br&gt;
&lt;a class="mentioned-user" href="https://dev.to/cf"&gt;@cf&lt;/a&gt;/qwen/qwq-32b&lt;/p&gt;

&lt;p&gt;Very strong reasoning.&lt;/p&gt;

&lt;p&gt;Llama 4 Scout&lt;br&gt;
&lt;a class="mentioned-user" href="https://dev.to/cf"&gt;@cf&lt;/a&gt;/meta/llama-4-scout-17b-16e-instruct&lt;/p&gt;

&lt;p&gt;Excellent balance of speed and intelligence.&lt;/p&gt;

&lt;p&gt;Llama 3.3 70B&lt;br&gt;
&lt;a class="mentioned-user" href="https://dev.to/cf"&gt;@cf&lt;/a&gt;/meta/llama-3.3-70b-instruct-fp8-fast&lt;/p&gt;

&lt;p&gt;Great for reviews, documentation, and system design.&lt;/p&gt;

&lt;p&gt;Understanding Cloudflare Limits&lt;br&gt;
One thing I wanted to understand was whether Cloudflare behaves like Groq.&lt;br&gt;
The answer is no.&lt;br&gt;
Groq commonly applies limits per model.&lt;br&gt;
For example:&lt;br&gt;
Model A → X RPM&lt;br&gt;
Model B → Y RPM&lt;/p&gt;

&lt;p&gt;Cloudflare works differently.&lt;br&gt;
Cloudflare's free tier provides:&lt;br&gt;
10,000 Neurons per day&lt;/p&gt;

&lt;p&gt;This is effectively a daily AI budget shared across your account.&lt;br&gt;
Cloudflare also documents:&lt;br&gt;
300 requests per minute&lt;/p&gt;

&lt;p&gt;for text generation workloads.&lt;br&gt;
So the practical model looks like:&lt;br&gt;
Account Level Daily Budget&lt;br&gt;
+&lt;br&gt;
Text Generation RPM&lt;br&gt;
+&lt;br&gt;
Model-Specific Overrides&lt;/p&gt;

&lt;p&gt;This is much closer to an account-level quota system than Groq's model-centric approach.&lt;/p&gt;

&lt;p&gt;Why This Matters&lt;br&gt;
Many developers assume they need:&lt;br&gt;
OpenAI Subscription&lt;br&gt;
Anthropic Subscription&lt;br&gt;
GPU Server&lt;br&gt;
RunPod&lt;br&gt;
AWS Inference Endpoint&lt;/p&gt;

&lt;p&gt;before they can build an AI product.&lt;br&gt;
For many projects, that's no longer true.&lt;br&gt;
A single free Cloudflare account can already provide access to:&lt;/p&gt;

&lt;p&gt;GPT-OSS-120B&lt;br&gt;
Qwen Coder 32B&lt;br&gt;
DeepSeek R1&lt;br&gt;
QWQ 32B&lt;br&gt;
Llama 4 Scout&lt;br&gt;
Gemma 4&lt;/p&gt;

&lt;p&gt;through a single API.&lt;br&gt;
That's enough to power:&lt;/p&gt;

&lt;p&gt;Coding assistants&lt;br&gt;
AI agents&lt;br&gt;
Internal copilots&lt;br&gt;
RAG applications&lt;br&gt;
Startup MVPs&lt;br&gt;
Developer tools&lt;/p&gt;

&lt;p&gt;without touching a GPU.&lt;/p&gt;

&lt;p&gt;Final Thoughts&lt;br&gt;
I started this experiment trying to use GLM 5.3 Flash on the Cloudflare free plan.&lt;br&gt;
Instead, I discovered something much more valuable.&lt;br&gt;
Cloudflare Free currently provides access to some genuinely powerful models, including GPT-OSS-120B, Qwen Coder 32B, DeepSeek R1 Distill, QWQ 32B, and Llama 4 Scout.&lt;br&gt;
For indie hackers, startup founders, and developers building agents, Cloudflare Workers AI might be one of the most underrated free inference platforms available today.&lt;br&gt;
If you're experimenting with AI tooling, it is absolutely worth testing before paying for another inference provider.&lt;/p&gt;

&lt;p&gt;What I Plan To Test Next&lt;/p&gt;

&lt;p&gt;How many real coding requests fit within 10,000 free neurons?&lt;br&gt;
Which free model provides the best cost-to-quality ratio?&lt;br&gt;
Cloudflare vs Groq vs Cerebras benchmarks&lt;br&gt;
Using Cloudflare Workers AI with Continue.dev&lt;br&gt;
Building AI agents entirely on free infrastructure&lt;/p&gt;

&lt;p&gt;Stay tuned.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Fixing Bedrock ToolResult Ordering Errors</title>
      <dc:creator>Interro</dc:creator>
      <pubDate>Sat, 26 Sep 2026 17:19:18 +0000</pubDate>
      <link>https://dev.to/interro-ai/fixing-bedrock-toolresult-ordering-errors-a6d</link>
      <guid>https://dev.to/interro-ai/fixing-bedrock-toolresult-ordering-errors-a6d</guid>
      <description>&lt;p&gt;A tool executed successfully, but Bedrock rejected the next message because &lt;code&gt;toolResult&lt;/code&gt; IDs did not match the preceding &lt;code&gt;toolUse&lt;/code&gt; order.&lt;/p&gt;

&lt;p&gt;INC-004 is easy to create when tools run in parallel. Async completion order is not protocol order, and checkpoint restore or middleware can shuffle result blocks.&lt;/p&gt;

&lt;p&gt;The fix is to derive result order from the assistant's &lt;code&gt;toolUseId&lt;/code&gt; sequence, fill missing results with explicit error blocks, and validate the assembled message before sending it to the provider.&lt;/p&gt;

&lt;p&gt;Test at least three cases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Results complete in reverse order.&lt;/li&gt;
&lt;li&gt;One result is missing.&lt;/li&gt;
&lt;li&gt;A checkpoint restores shuffled results.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not rely on dictionary insertion order or the order in which futures complete. The provider contract owns the final ordering rule.&lt;/p&gt;

&lt;p&gt;Run a source review with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;prevention-scanner scan &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;--format&lt;/span&gt; json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Read the &lt;a href="https://github.com/InterroAI/interro-awesome-agent-incidents/blob/main/INC-004-toolresult-ordering.md" rel="noopener noreferrer"&gt;full INC-004 incident&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  AI #AWS #Bedrock #LangGraph
&lt;/h1&gt;

</description>
      <category>ai</category>
      <category>aws</category>
      <category>nlp</category>
      <category>devops</category>
    </item>
    <item>
      <title>Why AWS Bedrock Returned an Empty Agent Response</title>
      <dc:creator>Interro</dc:creator>
      <pubDate>Sat, 26 Sep 2026 17:12:34 +0000</pubDate>
      <link>https://dev.to/interro-ai/why-aws-bedrock-returned-an-empty-agent-response-383g</link>
      <guid>https://dev.to/interro-ai/why-aws-bedrock-returned-an-empty-agent-response-383g</guid>
      <description>&lt;p&gt;Bedrock reported generated output tokens, but the user received an empty assistant message. No exception explained the failure.&lt;/p&gt;

&lt;p&gt;INC-003 came from an adapter that only extracted ordinary text blocks. Bedrock Converse can return &lt;code&gt;reasoningContent&lt;/code&gt;, &lt;code&gt;guardContent&lt;/code&gt;, &lt;code&gt;toolUse&lt;/code&gt;, empty text, and unknown future block types. A second layer discarded the message because it used a truthiness check instead of preserving an empty string.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adapter controls
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Validate the provider content-block schema.&lt;/li&gt;
&lt;li&gt;Preserve empty text when a message exists.&lt;/li&gt;
&lt;li&gt;Log reasoning and guardrail diagnostics without exposing internal reasoning.&lt;/li&gt;
&lt;li&gt;Add fixtures for reasoning-only, guardrail, tool-use, empty-text, and unknown blocks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Provider adapters are reliability boundaries. A graph can be correct while its translation layer silently drops the response.&lt;/p&gt;

&lt;p&gt;Review source patterns with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;prevention-scanner scan &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;--format&lt;/span&gt; json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Confirm the fix with provider contract tests, not only a happy-path mock.&lt;/p&gt;

&lt;p&gt;Read the &lt;a href="https://github.com/InterroAI/interro-awesome-agent-incidents/blob/main/INC-003-empty-bedrock-response.md" rel="noopener noreferrer"&gt;full INC-003 incident&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  AI #AWS #Bedrock #LLMOps
&lt;/h1&gt;

</description>
      <category>ai</category>
      <category>aws</category>
      <category>azure</category>
      <category>agents</category>
    </item>
    <item>
      <title>When an AI Agent Context Reaches 261k Tokens</title>
      <dc:creator>Interro</dc:creator>
      <pubDate>Sat, 26 Sep 2026 17:04:45 +0000</pubDate>
      <link>https://dev.to/interro-ai/how-to-stop-an-ai-agent-infinite-loop-3i03</link>
      <guid>https://dev.to/interro-ai/how-to-stop-an-ai-agent-infinite-loop-3i03</guid>
      <description>&lt;p&gt;One research request grew to 261,834 tokens and failed against a 128,000-token model limit. The context did not become large in one prompt. Replayed tool results accumulated across checkpoints.&lt;/p&gt;

&lt;p&gt;INC-002 exposed three missing controls: no hard token budget, no message cap, and no pruning policy for old tool observations. Large search and file results were also inserted without compression.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical prevention stack
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Set a maximum context-token budget on every graph.&lt;/li&gt;
&lt;li&gt;Cap messages and replayable tool results.&lt;/li&gt;
&lt;li&gt;Compress observations before model re-entry.&lt;/li&gt;
&lt;li&gt;Check the budget after every node, not only before invocation.&lt;/li&gt;
&lt;li&gt;Test a long multi-tool request with realistic result sizes.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The important metric is context size at each boundary. A final failure log is too late to explain where growth started.&lt;/p&gt;

&lt;p&gt;Run a heuristic review with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;prevention-scanner scan &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;--format&lt;/span&gt; json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then confirm the result with a test that simulates 50 or more tool calls and asserts the context remains bounded.&lt;/p&gt;

&lt;p&gt;Read the &lt;a href="https://github.com/InterroAI/interro-awesome-agent-incidents/blob/main/INC-002-context-explosion.md" rel="noopener noreferrer"&gt;full INC-002 incident&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  AI #Agents #LangGraph #LLMOps
&lt;/h1&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>rag</category>
      <category>langchain</category>
    </item>
    <item>
      <title>How to Stop an AI Agent Infinite Loop</title>
      <dc:creator>Interro</dc:creator>
      <pubDate>Sat, 26 Sep 2026 16:24:07 +0000</pubDate>
      <link>https://dev.to/interro-ai/how-to-stop-an-ai-agent-infinite-loop-1ajd</link>
      <guid>https://dev.to/interro-ai/how-to-stop-an-ai-agent-infinite-loop-1ajd</guid>
      <description>&lt;p&gt;A simple planning request triggered 105 calls to the same goal tool. The system did not crash immediately. It kept spending tokens until the turn limit stopped it, without producing a useful answer.&lt;/p&gt;

&lt;p&gt;This was INC-001: goal tools were exposed globally instead of being scoped to the node that owned goal state. Every model node could ask for the same incomplete goal, so the graph kept returning to the same decision.&lt;/p&gt;

&lt;h3&gt;
  
  
  Controls that matter
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Give each tool an explicit owning node.&lt;/li&gt;
&lt;li&gt;Add maximum turns and per-tool call limits.&lt;/li&gt;
&lt;li&gt;Detect no-progress transitions.&lt;/li&gt;
&lt;li&gt;Test the real plan-to-execute route with a small request.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A configuration value is not a guard unless the live loop reads and enforces it. The regression test should assert that a 4+4 request terminates and that planning nodes cannot call goal-state tools.&lt;/p&gt;

&lt;p&gt;PreventAI can flag source patterns associated with this incident:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;prevention-scanner scan &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;--format&lt;/span&gt; json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The scanner is heuristic. Pair it with graph, load, and termination tests.&lt;/p&gt;

&lt;p&gt;Read the &lt;a href="https://github.com/InterroAI/interro-awesome-agent-incidents/blob/main/INC-001-goal-loop.md" rel="noopener noreferrer"&gt;full INC-001 incident&lt;/a&gt;, then audit which node owns every tool in your agent.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>langgraph</category>
      <category>sre</category>
    </item>
  </channel>
</rss>
