<?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: Adha AK</title>
    <description>The latest articles on DEV Community by Adha AK (@adha_ak_d60b39fbb66769fd1).</description>
    <link>https://dev.to/adha_ak_d60b39fbb66769fd1</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%2F4054162%2Fa715028a-9b89-4110-9d9e-968a51851d36.jpg</url>
      <title>DEV Community: Adha AK</title>
      <link>https://dev.to/adha_ak_d60b39fbb66769fd1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/adha_ak_d60b39fbb66769fd1"/>
    <language>en</language>
    <item>
      <title>How EvalPort's Grader System Works: 11 Types for LLM Evaluation</title>
      <dc:creator>Adha AK</dc:creator>
      <pubDate>Tue, 04 Aug 2026 20:59:13 +0000</pubDate>
      <link>https://dev.to/adha_ak_d60b39fbb66769fd1/how-evalports-grader-system-works-11-types-for-llm-evaluation-1m06</link>
      <guid>https://dev.to/adha_ak_d60b39fbb66769fd1/how-evalports-grader-system-works-11-types-for-llm-evaluation-1m06</guid>
      <description>&lt;h1&gt;
  
  
  How EvalPort's Grader System Works
&lt;/h1&gt;

&lt;p&gt;When designing EvalPort, the grader system was the hardest part to get right. Every eval framework has its own way of scoring LLM outputs — DeepEval uses metric classes, Promptfoo uses assertion objects, Inspect AI uses solver functions. We needed a system expressive enough to cover 90%+ of real-world eval needs, but simple enough that any framework could implement it.&lt;/p&gt;

&lt;p&gt;The result: 11 grader types that carry their own semantics. A grader isn't just a name — it specifies its parameters, its model, its threshold. An eval suite is self-describing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 11 Grader Types
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;exact_match — Compare output to expected output, optionally ignoring case.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;contains — Check if the output contains a substring.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;regex — Match against a regular expression.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;semantic_similarity — Embed output and expected output, compare cosine similarity against a threshold.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;llm_judge — Use an LLM to evaluate the output against a prompt template. The most powerful grader.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;json_schema — Validate that the output is valid JSON matching a JSON Schema.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;json_path — Extract a value from JSON output using a JSONPath expression, then compare it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;code — Run a function to evaluate the output.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;human — Defer to human review.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;model_graded — Compare the output to a reference answer using a model.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;custom — Escape hatch for graders not covered by built-in types.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  How Graders Connect to Test Cases
&lt;/h2&gt;

&lt;p&gt;A test case references graders by ID. Multiple graders can evaluate the same test case. The ResultSet records each grader's score separately.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Design Works
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Self-describing: An eval suite carries everything a framework needs to execute it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Framework-agnostic: Any framework can implement any subset of grader types.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Extensible: The custom type lets frameworks bring their own graders.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Comparable: Results from different frameworks use the same grader IDs.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;pip install evalport-sdk&lt;/p&gt;

&lt;p&gt;npm install evalport-sdk&lt;/p&gt;

&lt;p&gt;Spec: &lt;a href="https://github.com/adhabnr-ux/evalport/blob/main/spec/SPEC.md" rel="noopener noreferrer"&gt;https://github.com/adhabnr-ux/evalport/blob/main/spec/SPEC.md&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/adhabnr-ux/evalport" rel="noopener noreferrer"&gt;https://github.com/adhabnr-ux/evalport&lt;/a&gt;&lt;/p&gt;

</description>
      <category>llm</category>
      <category>evaluation</category>
      <category>testing</category>
      <category>opensource</category>
    </item>
    <item>
      <title>OpenEval: Why LLM Evaluation Needs a Standard Format</title>
      <dc:creator>Adha AK</dc:creator>
      <pubDate>Thu, 30 Jul 2026 03:40:11 +0000</pubDate>
      <link>https://dev.to/adha_ak_d60b39fbb66769fd1/openeval-why-llm-evaluation-needs-a-standard-format-50di</link>
      <guid>https://dev.to/adha_ak_d60b39fbb66769fd1/openeval-why-llm-evaluation-needs-a-standard-format-50di</guid>
      <description>&lt;p&gt;Every LLM evaluation framework today invents its own test case format, its own grader definitions, and its own results schema. DeepEval, Promptfoo, Inspect AI, and lm-evaluation-harness all solve the same core problem (checking whether a model's output is correct) but none of them can read each other's eval datasets.&lt;/p&gt;

&lt;p&gt;That means every time a team wants to compare frameworks, or move from a notebook prototype to a production eval pipeline, they end up hand-rewriting the same test cases over and over.&lt;/p&gt;

&lt;p&gt;OpenEval is an attempt to fix that by defining a small, portable JSON Schema for eval test cases, graders, and results, plus tooling to move data between frameworks instead of retyping it.&lt;/p&gt;

&lt;p&gt;What's in the repo:&lt;/p&gt;

&lt;p&gt;A versioned JSON Schema spec for test cases, grader configs, and result records.&lt;/p&gt;

&lt;p&gt;TypeScript and Python SDKs for reading and writing OpenEval-formatted datasets.&lt;/p&gt;

&lt;p&gt;A CLI with validate, convert, init, and summarize commands.&lt;/p&gt;

&lt;p&gt;Converters for popular frameworks so existing datasets can be brought in or exported out without a manual rewrite.&lt;/p&gt;

&lt;p&gt;The project just published v1.0.0 to npm and PyPI, and issues are open on 17+ framework integrations if anyone wants to help wire up a converter for a framework not yet covered.&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/adhabnr-ux/openeval" rel="noopener noreferrer"&gt;https://github.com/adhabnr-ux/openeval&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Would love feedback from anyone who has hit this same portability problem while switching between eval tools.&lt;/p&gt;

</description>
      <category>llm</category>
      <category>evaluation</category>
      <category>ai</category>
      <category>testing</category>
    </item>
  </channel>
</rss>
