<?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: Arjun M</title>
    <description>The latest articles on DEV Community by Arjun M (@unreadlogs).</description>
    <link>https://dev.to/unreadlogs</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%2F4023478%2Fc1f7f65c-fa20-4d7b-8fc3-7d4c4eaf79d8.png</url>
      <title>DEV Community: Arjun M</title>
      <link>https://dev.to/unreadlogs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/unreadlogs"/>
    <language>en</language>
    <item>
      <title>I Got Tired of Comparing AI Models Across Multiple Browser Tabs, So I Built AutarkChat</title>
      <dc:creator>Arjun M</dc:creator>
      <pubDate>Mon, 13 Jul 2026 23:17:20 +0000</pubDate>
      <link>https://dev.to/unreadlogs/i-got-tired-of-comparing-ai-models-across-multiple-browser-tabs-so-i-built-autarkchat-p5k</link>
      <guid>https://dev.to/unreadlogs/i-got-tired-of-comparing-ai-models-across-multiple-browser-tabs-so-i-built-autarkchat-p5k</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Most AI chat apps are built for conversations.&lt;br&gt;
I wanted one built for experimentation.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Every time I wanted to compare models, my workflow looked something like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open ChatGPT.&lt;/li&gt;
&lt;li&gt;Open Gemini.&lt;/li&gt;
&lt;li&gt;Open another tab for DeepSeek.&lt;/li&gt;
&lt;li&gt;Maybe another for OpenRouter.&lt;/li&gt;
&lt;li&gt;Copy the same prompt into each.&lt;/li&gt;
&lt;li&gt;Wait.&lt;/li&gt;
&lt;li&gt;Compare responses manually.&lt;/li&gt;
&lt;li&gt;Forget which model used fewer tokens or responded faster.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After doing this enough times, it became obvious that the problem wasn't the models—it was the workflow.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;AutarkChat&lt;/strong&gt;.&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%2Fsiyuletj3gg944ol54ek.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%2Fsiyuletj3gg944ol54ek.png" alt="AutarkChat chat workspace showing a conversation with an AI model and developer-focused interface" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;The AI ecosystem has exploded over the past year.&lt;/p&gt;

&lt;p&gt;We now have hundreds of models available through dozens of providers.&lt;/p&gt;

&lt;p&gt;OpenAI.&lt;br&gt;
Anthropic.&lt;br&gt;
DeepSeek.&lt;br&gt;
Gemini.&lt;br&gt;
Mistral.&lt;br&gt;
Groq.&lt;br&gt;
OpenRouter.&lt;br&gt;
Together AI.&lt;br&gt;
Tencent.&lt;/p&gt;

&lt;p&gt;Each has different strengths, different costs, different latency, and different output quality.&lt;/p&gt;

&lt;p&gt;Yet most chat applications still assume you'll only talk to &lt;strong&gt;one model at a time&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;As a developer, that's rarely what I want.&lt;/p&gt;

&lt;p&gt;Sometimes I want to know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which model follows my instructions best?&lt;/li&gt;
&lt;li&gt;Which one is fastest?&lt;/li&gt;
&lt;li&gt;Which one is cheapest?&lt;/li&gt;
&lt;li&gt;Which one produces cleaner code?&lt;/li&gt;
&lt;li&gt;Which one wastes the fewest tokens?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Answering those questions shouldn't require six browser tabs.&lt;/p&gt;




&lt;h2&gt;
  
  
  Building AutarkChat
&lt;/h2&gt;

&lt;p&gt;AutarkChat isn't another AI wrapper.&lt;/p&gt;

&lt;p&gt;It's a &lt;strong&gt;developer workspace&lt;/strong&gt; focused on comparing, testing, and evaluating language models.&lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;Instead of asking &lt;em&gt;"What did this model say?"&lt;/em&gt;, ask &lt;em&gt;"How did these models perform against each other?"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That small shift completely changes how the interface is designed.&lt;/p&gt;




&lt;h2&gt;
  
  
  Side-by-Side Comparison
&lt;/h2&gt;

&lt;p&gt;The core feature is the comparison workspace.&lt;/p&gt;

&lt;p&gt;Instead of switching between conversations, you select multiple models and send a single prompt.&lt;/p&gt;

&lt;p&gt;Each model begins streaming independently.&lt;/p&gt;

&lt;p&gt;No model waits for another.&lt;/p&gt;

&lt;p&gt;If one provider is slower, the others continue streaming normally.&lt;/p&gt;

&lt;p&gt;This turned out to be far more useful than I expected.&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%2Fmj9re6kqv7g036vuvisj.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%2Fmj9re6kqv7g036vuvisj.png" alt="AutarkChat side-by-side model comparison displaying simultaneous responses from multiple AI models" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You immediately start noticing differences:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reasoning style&lt;/li&gt;
&lt;li&gt;verbosity&lt;/li&gt;
&lt;li&gt;formatting&lt;/li&gt;
&lt;li&gt;hallucinations&lt;/li&gt;
&lt;li&gt;instruction following&lt;/li&gt;
&lt;li&gt;response speed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;without constantly switching tabs.&lt;/p&gt;




&lt;h2&gt;
  
  
  Streaming Shouldn't Be Fragile
&lt;/h2&gt;

&lt;p&gt;One thing I noticed while experimenting with different providers is that streaming failures happen more often than you'd expect.&lt;/p&gt;

&lt;p&gt;Sometimes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the provider times out&lt;/li&gt;
&lt;li&gt;your network disconnects&lt;/li&gt;
&lt;li&gt;a request is cancelled&lt;/li&gt;
&lt;li&gt;one provider fails while another succeeds&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Many chat applications treat these situations as "everything failed."&lt;/p&gt;

&lt;p&gt;I didn't want that.&lt;/p&gt;

&lt;p&gt;Instead, AutarkChat treats every model independently.&lt;/p&gt;

&lt;p&gt;If two models finish successfully and one crashes,&lt;/p&gt;

&lt;p&gt;the successful responses are already saved.&lt;/p&gt;

&lt;p&gt;Nothing is lost.&lt;/p&gt;

&lt;p&gt;If a request fails,&lt;/p&gt;

&lt;p&gt;your prompt is restored automatically,&lt;/p&gt;

&lt;p&gt;so you don't have to rewrite it.&lt;/p&gt;

&lt;p&gt;It sounds like a small detail,&lt;/p&gt;

&lt;p&gt;but after using it for weeks,&lt;/p&gt;

&lt;p&gt;I don't think I could go back.&lt;/p&gt;




&lt;h2&gt;
  
  
  Supporting Multiple Providers
&lt;/h2&gt;

&lt;p&gt;Another goal was flexibility.&lt;/p&gt;

&lt;p&gt;I didn't want the application tied to a single vendor.&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%2Fi8w0ablu44w835o2bjoo.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%2Fi8w0ablu44w835o2bjoo.png" alt="AutarkChat model registry for configuring AI providers, API endpoints, and available models" width="799" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AutarkChat supports configuring custom OpenAI-compatible endpoints, allowing you to connect services like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OpenAI&lt;/li&gt;
&lt;li&gt;OpenRouter&lt;/li&gt;
&lt;li&gt;DeepSeek&lt;/li&gt;
&lt;li&gt;Mistral&lt;/li&gt;
&lt;li&gt;Together AI&lt;/li&gt;
&lt;li&gt;Groq&lt;/li&gt;
&lt;li&gt;Tencent&lt;/li&gt;
&lt;li&gt;and other compatible APIs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Switching providers shouldn't require switching applications.&lt;/p&gt;




&lt;h2&gt;
  
  
  Measuring More Than Just Responses
&lt;/h2&gt;

&lt;p&gt;When experimenting with prompts, quality is only part of the picture.&lt;/p&gt;

&lt;p&gt;Cost matters.&lt;/p&gt;

&lt;p&gt;Latency matters.&lt;/p&gt;

&lt;p&gt;Token usage matters.&lt;/p&gt;

&lt;p&gt;That's why every response includes token information directly inside the interface.&lt;/p&gt;

&lt;p&gt;Instead of opening dashboards later, you can immediately compare:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prompt tokens&lt;/li&gt;
&lt;li&gt;Completion tokens&lt;/li&gt;
&lt;li&gt;Total tokens&lt;/li&gt;
&lt;/ul&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%2Fits5ce86lpnb5ek8jz5l.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%2Fits5ce86lpnb5ek8jz5l.png" alt="AutarkChat token usage analytics showing prompt, completion, and total token consumption" width="799" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This makes it much easier to understand the trade-offs between models.&lt;/p&gt;




&lt;h2&gt;
  
  
  Personalization
&lt;/h2&gt;

&lt;p&gt;Most people repeatedly type the same context into new conversations.&lt;/p&gt;

&lt;p&gt;Things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;who they are&lt;/li&gt;
&lt;li&gt;what they work on&lt;/li&gt;
&lt;li&gt;preferred programming languages&lt;/li&gt;
&lt;li&gt;writing preferences&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AutarkChat lets you create reusable profiles and global instructions.&lt;/p&gt;

&lt;p&gt;Every conversation automatically includes that context, eliminating repetitive prompt setup.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tech Stack
&lt;/h2&gt;

&lt;p&gt;AutarkChat is built using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Next.js 15&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;MongoDB&lt;/li&gt;
&lt;li&gt;Tailwind CSS&lt;/li&gt;
&lt;li&gt;Framer Motion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal was to keep the stack modern while keeping the interface responsive during multiple concurrent streams.&lt;/p&gt;




&lt;h2&gt;
  
  
  Challenges Along the Way
&lt;/h2&gt;

&lt;p&gt;Building the UI wasn't actually the hardest part.&lt;/p&gt;

&lt;p&gt;The interesting engineering problems were things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;synchronizing multiple streaming responses&lt;/li&gt;
&lt;li&gt;safely persisting completed generations&lt;/li&gt;
&lt;li&gt;preventing one failed provider from affecting others&lt;/li&gt;
&lt;li&gt;restoring interrupted requests&lt;/li&gt;
&lt;li&gt;managing different provider capabilities behind one consistent interface&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those details aren't immediately visible, but they're what make the application feel reliable.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;This is just the beginning.&lt;/p&gt;

&lt;p&gt;Some ideas I'm exploring include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;conversation branching&lt;/li&gt;
&lt;li&gt;better prompt history&lt;/li&gt;
&lt;li&gt;benchmark workflows&lt;/li&gt;
&lt;li&gt;reusable prompt collections&lt;/li&gt;
&lt;li&gt;model capability detection&lt;/li&gt;
&lt;li&gt;richer analytics&lt;/li&gt;
&lt;li&gt;additional provider integrations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal isn't to become another chatbot.&lt;/p&gt;

&lt;p&gt;The goal is to build a workspace developers actually enjoy using when working with multiple LLMs.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try It Out
&lt;/h2&gt;

&lt;p&gt;If you're someone who regularly compares AI models, I'd love to hear what you think.&lt;/p&gt;

&lt;p&gt;⭐ GitHub:&lt;br&gt;
&lt;a href="https://github.com/unreadlogs/AutarkChat" rel="noopener noreferrer"&gt;https://github.com/unreadlogs/AutarkChat&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feedback, issues, feature requests, and contributions are always welcome.&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>opensource</category>
      <category>llm</category>
    </item>
  </channel>
</rss>
