<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="atom.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://docs.acruxcore.com/blog</id>
    <title>Acrux Core blog</title>
    <updated>2026-07-13T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://docs.acruxcore.com/blog"/>
    <subtitle>LLM-ops articles and comparisons from the Acrux Core team.</subtitle>
    <icon>https://docs.acruxcore.com/img/favicon.ico</icon>
    <rights>Copyright © 2026 Acrux Core.</rights>
    <entry>
        <title type="html"><![CDATA[How much overhead does an LLM gateway add?]]></title>
        <id>https://docs.acruxcore.com/blog/llm-gateway-overhead</id>
        <link href="https://docs.acruxcore.com/blog/llm-gateway-overhead"/>
        <updated>2026-07-13T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[We benchmarked the Acrux Core gateway against raw OpenAI with the same model and prompt. The gateway software adds about 26 ms — the rest is network distance you control.]]></summary>
        <content type="html"><![CDATA[<p>Putting a gateway in front of your model providers buys you a lot: one endpoint
for every provider, cost accounting, caching, virtual keys, and budgets. But it
raises an obvious worry — <strong>am I paying for that with latency?</strong> Every request now
takes an extra hop, and for a user-facing app, milliseconds matter.</p>
<p>So we measured it. Same model, same prompt, the same call sent three ways, and the
answer is clearer than we expected: <strong>the gateway's own software adds about 26
milliseconds. Everything else you might see is network distance — and that's in
your hands, not ours.</strong></p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_SAay" id="the-setup">The setup<a href="https://docs.acruxcore.com/blog/llm-gateway-overhead#the-setup" class="hash-link" aria-label="Direct link to The setup" title="Direct link to The setup" translate="no">​</a></h2>
<p>The trick to a fair latency test is holding everything constant except the thing
you're measuring. So all three runs below hit the <strong>same upstream</strong> — OpenAI
<code>gpt-4o-mini</code> — with the <strong>exact same prompt</strong> and parameters:</p>
<div class="language-json codeBlockContainer_ZGJx theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_kX1v"><pre tabindex="0" class="prism-code language-json codeBlock_TAPP thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_AdAo"><div class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"model"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"gpt-4o-mini"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"messages"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token property" style="color:#36acaa">"role"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"user"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token property" style="color:#36acaa">"content"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Reply with the single word: pong."</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"max_tokens"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">5</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"temperature"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<p>Because every path ends at the same OpenAI model, the model's own response time is
a shared constant across all three. Whatever difference is left over is the
gateway, not the model.</p>
<p>The three paths:</p>
<ol>
<li class=""><strong>OpenAI direct</strong> — call <code>api.openai.com</code> straight from the test machine. This
is the baseline.</li>
<li class=""><strong>Local Acrux</strong> — the same call through an Acrux gateway running on
<code>localhost</code>, which forwards to OpenAI.</li>
<li class=""><strong>Hosted Acrux</strong> — the same call through our hosted gateway at
<code>api.acruxcore.com</code>, which forwards to OpenAI.</li>
</ol>
<p>Each path ran <strong>60 interleaved rounds</strong> (the paths take turns, so a passing
network blip hits all three equally), after a warm-up that we discarded.
Connections were pooled, so no path pays a fresh handshake on every call. We
report the <strong>median</strong> and the <strong>p95/p99 tails</strong>, not the average — averages hide
the spikes that actually annoy users.</p>
<div class="theme-admonition theme-admonition-note admonition_IZjC alert alert--secondary"><div class="admonitionHeading_uVvU"><span class="admonitionIcon_HiR3"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_bl22"><p>The local gateway ran in development mode (an unoptimized dev server). That makes
its overhead a slight <em>over</em>-estimate, so the real software cost is, if anything,
a little lower than the number below.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SAay" id="the-headline-the-software-adds-26-ms">The headline: the software adds ~26 ms<a href="https://docs.acruxcore.com/blog/llm-gateway-overhead#the-headline-the-software-adds-26-ms" class="hash-link" aria-label="Direct link to The headline: the software adds ~26 ms" title="Direct link to The headline: the software adds ~26 ms" translate="no">​</a></h2>
<p>Here is the clean comparison — OpenAI direct versus the same call through a gateway
on the same machine. Same machine means the gateway's call to OpenAI travels the
<em>identical</em> network path as the direct baseline, so the gap between them is purely
the gateway's own code.</p>
<figure>
<svg viewBox="0 0 720 170" role="img" aria-label="Median latency: OpenAI direct 801 ms, Local Acrux 827 ms" style="max-width:100%;height:auto;font-family:system-ui,sans-serif;font-size:15px">
  <line x1="180" y1="20" x2="180" y2="140" stroke="currentColor" stroke-opacity="0.25"></line>
  <!-- -->
  <text x="170" y="52" text-anchor="end" fill="currentColor">OpenAI direct</text>
  <rect x="180" y="35" width="463" height="30" rx="5" fill="#10a37f"></rect>
  <text x="653" y="55" fill="currentColor" font-weight="700">801 ms</text>
  <!-- -->
  <text x="170" y="112" text-anchor="end" fill="currentColor">Local Acrux</text>
  <rect x="180" y="95" width="478" height="30" rx="5" fill="#6366f1"></rect>
  <text x="668" y="115" fill="currentColor" font-weight="700">827 ms</text>
  <!-- -->
  <text x="180" y="158" fill="currentColor" fill-opacity="0.6" font-size="12px">0</text>
  <text x="480" y="158" text-anchor="middle" fill="currentColor" fill-opacity="0.6" font-size="12px">500 ms</text>
</svg>
<figcaption><em>Median of 60 interleaved rounds. The gap is <strong>+26 ms</strong> — the gateway's software cost.</em></figcaption>
</figure>
<p>That's it: <strong>26 milliseconds</strong> for routing, resolving your model name, applying
your key, and logging the call. On a request that already takes ~800 ms of model
time, the gateway is roughly <strong>3%</strong> of what you were already going to wait.</p>
<h2 class="anchor anchorTargetStickyNavbar_SAay" id="but-the-hosted-number-looks-bigger--heres-why">"But the hosted number looks bigger" — here's why<a href="https://docs.acruxcore.com/blog/llm-gateway-overhead#but-the-hosted-number-looks-bigger--heres-why" class="hash-link" aria-label="Direct link to &quot;But the hosted number looks bigger&quot; — here's why" title="Direct link to &quot;But the hosted number looks bigger&quot; — here's why" translate="no">​</a></h2>
<p>Run the same test against our hosted gateway and the number jumps to a median of
<strong>1221 ms</strong>. Before you read that as "the gateway is slow," look at where the extra
time actually goes — because almost none of it is gateway code.</p>
<p>To prove it, we ran a second test that makes <strong>no model call at all</strong>: a plain
round-trip to the hosted server (a 404), and a lightweight authenticated read.
That isolates each layer without the model's response time on top. Here's the
hosted 1221 ms broken into its real parts:</p>
<figure>
<svg viewBox="0 0 720 150" role="img" aria-label="Breakdown of the 1221 ms hosted request" style="max-width:100%;height:auto;font-family:system-ui,sans-serif;font-size:14px">
  <!-- -->
  <rect x="20" y="30" width="496" height="44" fill="#94a3b8"></rect>
  <rect x="516" y="30" width="79" height="44" fill="#f59e0b"></rect>
  <rect x="595" y="30" width="51" height="44" fill="#d97706"></rect>
  <rect x="646" y="30" width="14" height="44" fill="#6366f1"></rect>
  <line x1="653" y1="30" x2="653" y2="14" stroke="currentColor" stroke-opacity="0.5"></line>
  <text x="653" y="10" text-anchor="middle" fill="currentColor" font-size="12px" font-weight="700">gateway code: 26 ms</text>
  <!-- -->
  <rect x="20" y="100" width="12" height="12" fill="#94a3b8"></rect><text x="38" y="110" fill="currentColor">The model call — ~947 ms (you pay this calling OpenAI directly too)</text>
  <rect x="20" y="122" width="12" height="12" fill="#f59e0b"></rect><text x="38" y="132" fill="currentColor">Network, test machine ↔ server — ~150 ms (your geography)</text>
  <rect x="430" y="122" width="12" height="12" fill="#d97706"></rect><text x="448" y="132" fill="currentColor">Auth + database — ~98 ms</text>
</svg>
<figcaption><em>The hosted 1221 ms, decomposed. The gateway's own code is the thin bar on the right.</em></figcaption>
</figure>
<p>The two big slices have nothing to do with our software:</p>
<ul>
<li class=""><strong>The model call itself (~947 ms)</strong> is work you pay no matter what. Call OpenAI
directly and you still wait for the model to think.</li>
<li class=""><strong>The network hop (~150 ms)</strong> is the distance between the <em>test machine</em> and the
<em>server</em>. We ran this from a developer laptop that sits far from the hosted box.
A user who deploys their app near the gateway would see a fraction of this.</li>
</ul>
<p>Only the last two slices are the platform's own doing: ~98 ms for authentication
and a database lookup, and ~26 ms of gateway code. Put differently — <strong>the gateway
software is about 2% of that 1221 ms.</strong></p>
<div class="theme-admonition theme-admonition-tip admonition_IZjC alert alert--success"><div class="admonitionHeading_uVvU"><span class="admonitionIcon_HiR3"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_bl22"><p>The portable takeaway isn't the 1221 ms — that number is specific to one laptop's
distance from one server. It's the <strong>26 ms</strong>. Wherever you run, the gateway's code
adds tens of milliseconds; the rest is network distance you control by deploying
close to your callers.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SAay" id="dont-forget-the-tail">Don't forget the tail<a href="https://docs.acruxcore.com/blog/llm-gateway-overhead#dont-forget-the-tail" class="hash-link" aria-label="Direct link to Don't forget the tail" title="Direct link to Don't forget the tail" translate="no">​</a></h2>
<p>Medians tell you the typical case, but users remember the slow one. Here's the full
distribution:</p>





























<table><thead><tr><th>Path</th><th style="text-align:right">median</th><th style="text-align:right">p95</th><th style="text-align:right">p99</th></tr></thead><tbody><tr><td>OpenAI direct</td><td style="text-align:right">801 ms</td><td style="text-align:right">1050 ms</td><td style="text-align:right">1318 ms</td></tr><tr><td>Local Acrux</td><td style="text-align:right">827 ms</td><td style="text-align:right">1076 ms</td><td style="text-align:right">1540 ms</td></tr><tr><td>Hosted Acrux</td><td style="text-align:right">1221 ms</td><td style="text-align:right">2013 ms</td><td style="text-align:right">3743 ms</td></tr></tbody></table>
<p>Local Acrux tracks the OpenAI baseline closely all the way out to p95 — the gateway
doesn't just add a small median cost, it adds a small <em>tail</em> cost too. The hosted
p99 (3743 ms) is wider, and that widening is the network again: a long-distance hop
has more room to occasionally stall than a loopback call does.</p>
<h2 class="anchor anchorTargetStickyNavbar_SAay" id="what-this-means-for-you">What this means for you<a href="https://docs.acruxcore.com/blog/llm-gateway-overhead#what-this-means-for-you" class="hash-link" aria-label="Direct link to What this means for you" title="Direct link to What this means for you" translate="no">​</a></h2>
<p>A gateway earns its keep — provider routing, cost tracking, caching, budgets — and
the fear that it taxes every request turns out to be mostly unfounded:</p>
<ul>
<li class=""><strong>The gateway's software cost is small</strong> — roughly 26 ms, a few percent of a
typical model call.</li>
<li class=""><strong>Most real-world latency is network distance</strong>, which you control by deploying
the gateway near the app that calls it.</li>
<li class=""><strong>The tail stays tight</strong> when the network is short.</li>
</ul>
<p>If you're weighing whether to route your LLM traffic through a gateway, latency
isn't the reason to hesitate. Deploy it close to your callers and the overhead
disappears into the noise of the model call you were already waiting for.</p>
<div class="theme-admonition theme-admonition-note admonition_IZjC alert alert--secondary"><div class="admonitionHeading_uVvU"><span class="admonitionIcon_HiR3"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_bl22"><p>Want to reproduce this? Every path used the same model, prompt, and parameters
shown above, over pooled connections, 60 interleaved rounds. Point the same script
at your own gateway and provider to measure your own numbers.</p></div></div>]]></content>
        <author>
            <name>The Acrux Core Team</name>
            <uri>https://github.com/talhaanwarch/acruxcore</uri>
        </author>
        <category label="Gateway" term="Gateway"/>
        <category label="Performance" term="Performance"/>
        <category label="LLM Ops" term="LLM Ops"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Acrux Core vs LangSmith: prompts, gateway, and tracing]]></title>
        <id>https://docs.acruxcore.com/blog/acrux-core-vs-langsmith</id>
        <link href="https://docs.acruxcore.com/blog/acrux-core-vs-langsmith"/>
        <updated>2026-07-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[An honest, feature-by-feature comparison of Acrux Core and LangSmith across prompt versioning, the model gateway, tracing, tools, and evaluation.]]></summary>
        <content type="html"><![CDATA[<p>If you're building on LLMs, you eventually need four things: prompts you can change
without redeploying, a reliable path to model providers, visibility into what each
call did, and a way to tell whether a change helped. <strong>LangSmith</strong> and <strong>Acrux
Core</strong> both address this space from different starting points. This is an honest
look at where they overlap and where they differ.</p>
<!-- -->
<div class="theme-admonition theme-admonition-note admonition_IZjC alert alert--secondary"><div class="admonitionHeading_uVvU"><span class="admonitionIcon_HiR3"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_bl22"><p>LangSmith is a mature, widely used product from the LangChain team. This post
compares product <em>shape</em>, not quality — the goal is to help you pick the tool that
fits how you work.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_SAay" id="the-one-line-difference">The one-line difference<a href="https://docs.acruxcore.com/blog/acrux-core-vs-langsmith#the-one-line-difference" class="hash-link" aria-label="Direct link to The one-line difference" title="Direct link to The one-line difference" translate="no">​</a></h2>
<p><strong>LangSmith</strong> grew up around <strong>tracing and evaluation</strong>, with deep ties to the
LangChain/LangGraph ecosystem, and later added prompt management.</p>
<p><strong>Acrux Core</strong> is built around a <strong>runtime gateway plus prompt versioning</strong> as the
spine, with tracing, a tool catalog, and evaluation layered on the same
team-scoped model — one continuous line from authoring to measurement.</p>
<h2 class="anchor anchorTargetStickyNavbar_SAay" id="prompt-versioning">Prompt versioning<a href="https://docs.acruxcore.com/blog/acrux-core-vs-langsmith#prompt-versioning" class="hash-link" aria-label="Direct link to Prompt versioning" title="Direct link to Prompt versioning" translate="no">​</a></h2>
<p>Both let you store prompts and version them.</p>
<ul>
<li class=""><strong>Acrux Core</strong> treats every version as <strong>immutable</strong> and uses <strong>aliases</strong>
(<code>production</code>, <code>staging</code>) that you move between versions. Your app fetches
<code>my-prompt@production</code> at runtime via the SDK; promoting a new version changes
behavior with <strong>no redeploy</strong>. Prompts can also bind a default model.</li>
<li class=""><strong>LangSmith</strong> offers a prompt hub with commits and tags, and is especially
convenient if you're already pulling prompts through LangChain.</li>
</ul>
<p>If "change the live prompt without shipping code" is a core workflow, Acrux Core's
alias model is built around exactly that.</p>
<h2 class="anchor anchorTargetStickyNavbar_SAay" id="the-model-gateway">The model gateway<a href="https://docs.acruxcore.com/blog/acrux-core-vs-langsmith#the-model-gateway" class="hash-link" aria-label="Direct link to The model gateway" title="Direct link to The model gateway" translate="no">​</a></h2>
<p>This is the biggest structural difference.</p>
<ul>
<li class=""><strong>Acrux Core</strong> ships an <strong>OpenAI-compatible gateway</strong>: one endpoint in front of
OpenAI, Anthropic, Gemini, and any OpenAI-compatible provider (OpenRouter,
Together, local servers). You bring your own keys (encrypted at rest), register
public model names, and get routing, cost accounting, caching, virtual keys, and
budgets. Your app can even send a <strong>stored-prompt reference</strong> and let the gateway
render and route in one call.</li>
<li class=""><strong>LangSmith</strong> does not position itself as a proxy/gateway; you typically call
providers directly (often through LangChain) and send traces to LangSmith.</li>
</ul>
<p>If you want a single audited, cost-visible path to every provider, that's a
first-class feature in Acrux Core rather than something you assemble yourself.</p>
<h2 class="anchor anchorTargetStickyNavbar_SAay" id="tracing">Tracing<a href="https://docs.acruxcore.com/blog/acrux-core-vs-langsmith#tracing" class="hash-link" aria-label="Direct link to Tracing" title="Direct link to Tracing" translate="no">​</a></h2>
<ul>
<li class=""><strong>LangSmith</strong> has deep, mature tracing — rich support for nested runs, and
automatic instrumentation when you use LangChain/LangGraph.</li>
<li class=""><strong>Acrux Core</strong> traces <strong>every gateway call automatically</strong> (model, tokens,
latency, cost) and accepts <strong>your own OTel-shaped spans</strong> via the SDK's <code>trace()</code>
for whole chains. Traces can be grouped into sessions, and feedback attaches to
traces and spans.</li>
</ul>
<p>For LangChain-heavy apps, LangSmith's automatic instrumentation is hard to beat.
For framework-agnostic apps, Acrux Core gives you tracing for free the moment you
route through the gateway.</p>
<h2 class="anchor anchorTargetStickyNavbar_SAay" id="tools">Tools<a href="https://docs.acruxcore.com/blog/acrux-core-vs-langsmith#tools" class="hash-link" aria-label="Direct link to Tools" title="Direct link to Tools" translate="no">​</a></h2>
<ul>
<li class=""><strong>Acrux Core</strong> has a <strong>tool catalog</strong>: callable functions versioned exactly like
prompts, attached to a prompt version, with a client-side <code>runToolLoop</code> in the
SDK or a gateway-run HTTP executor.</li>
<li class=""><strong>LangSmith</strong> leans on LangChain's large library of tool integrations.</li>
</ul>
<p>Different philosophies: a governed, versioned in-house catalog versus a broad
ecosystem of ready-made integrations.</p>
<h2 class="anchor anchorTargetStickyNavbar_SAay" id="evaluation">Evaluation<a href="https://docs.acruxcore.com/blog/acrux-core-vs-langsmith#evaluation" class="hash-link" aria-label="Direct link to Evaluation" title="Direct link to Evaluation" translate="no">​</a></h2>
<p>Both support datasets and experiments.</p>
<ul>
<li class=""><strong>Acrux Core</strong> builds datasets <strong>from real production feedback</strong> (thumbs
up/down + comments on traces), then runs experiments that sweep
version × model grids with an automatic production baseline.</li>
<li class=""><strong>LangSmith</strong> has a rich, well-established evaluation suite with many built-in
and custom evaluators.</li>
</ul>
<p>LangSmith's eval tooling is broader today; Acrux Core's angle is tight coupling
between the feedback you already collect and the datasets you evaluate against.</p>
<h2 class="anchor anchorTargetStickyNavbar_SAay" id="hosting">Hosting<a href="https://docs.acruxcore.com/blog/acrux-core-vs-langsmith#hosting" class="hash-link" aria-label="Direct link to Hosting" title="Direct link to Hosting" translate="no">​</a></h2>
<ul>
<li class=""><strong>Acrux Core</strong> is a standard <strong>Postgres + Node</strong> stack you can <strong>self-host</strong>;
BYOK keeps provider keys under your control.</li>
<li class=""><strong>LangSmith</strong> is primarily a managed cloud service (with enterprise
self-hosting options).</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_SAay" id="which-should-you-pick">Which should you pick?<a href="https://docs.acruxcore.com/blog/acrux-core-vs-langsmith#which-should-you-pick" class="hash-link" aria-label="Direct link to Which should you pick?" title="Direct link to Which should you pick?" translate="no">​</a></h2>
<ul>
<li class=""><strong>Choose LangSmith</strong> if you're deep in the LangChain/LangGraph ecosystem and
want the most mature tracing and evaluation available today.</li>
<li class=""><strong>Choose Acrux Core</strong> if you want prompts, a provider gateway, tracing, tools,
and evaluation as <strong>one integrated, self-hostable platform</strong> — and you value
runtime prompt swaps and a single cost-visible path to every model.</li>
</ul>
<p>Want to try the integrated story? The <a class="" href="https://docs.acruxcore.com/docs/getting-started/quickstart">Quickstart</a>
gets you from sign-up to a traced, gateway-routed call in about ten minutes.</p>]]></content>
        <author>
            <name>The Acrux Core Team</name>
            <uri>https://github.com/talhaanwarch/acruxcore</uri>
        </author>
        <category label="Comparison" term="Comparison"/>
        <category label="LangSmith" term="LangSmith"/>
        <category label="LLM Ops" term="LLM Ops"/>
    </entry>
</feed>