Evaluating a C# LLM Eventparser with Promptfoo A developer built a C# LLM event parser called EventParser and tested it using Promptfoo's LLM-as-a-judge evaluation. The project separates the prompt file from the code, allowing Promptfoo to test the same prompt used in production. The evaluation uses a rubric-based approach where a judge model grades the LLM's output against plain-English rules rather than exact matches. If you’re a developer, your first instinct when testing code is simple: That works great for normal code. But with LLMs, the answer is not always the same . One response might say "3 PM" , another might say "15:00" , and another might say "Friday afternoon" . Depending on your rules, all three might be acceptable. So the question becomes less about does this text match exactly? and more about is this answer actually good? To keep this practical, we’ll use a small throwaway app called EventParser . The job of the app is simple: take a casual message like “Team sync on Friday at 3 PM in the Lagos office” and ask an LLM to extract the event details as structured data. Here’s the project layout: EventParser/ ├── EventParser.sln ├── src/ │ └── EventParser/ │ ├── EventParser.csproj │ ├── Program.cs console entry point │ └── Services/ │ ├── ILlmClient.cs tiny abstraction over your LLM call │ └── EventParserService.cs loads the prompt, calls the model └── prompts/ ├── extract event.txt THE PROMPT — shipped by C , graded by Promptfoo └── eval/ ├── promptfooconfig.yaml models under test + the judge model └── golden set.json test cases: input + llm-rubric The important file here is extract event.txt . That prompt lives in one place. The C service reads it at runtime, and Promptfoo reads the same file when it runs the eval. That means we are testing the real prompt used by the app, not a copied version written only for tests. You can get a sample of the default project here https://github.com/bigboybamo/EventParser Observing EventParserService , we can see the exact prompt we're trying to test. It loads the prompt from extract event.txt , inserts the user’s message, and sends the final prompt to the LLM. public Task