IBM

IBM

Software Developer Intern • May 2026 - Aug 2026 • San Jose, California

Worked inside an internal LLM evaluation platform that stress-tests IBM's AI coding assistants on mainframe modernization tasks: code explanation, COBOL to Java transformation, and generation. Shipped an automated grading layer, collapsed two assistant surfaces into one, and took the evaluation service from crashing at 4 concurrent users to 512 users with zero failures.

A Streamlit wizard on the front, an evaluation service on the back, talking over HTTP. The wizard owns pipeline construction; the service owns execution.

Front: Python / Streamlit Wizard

  • 01 Pick the modernization task family
  • 02 Select the dataset and sample set
  • 03 Choose the assistant models to put head to head
  • 04 Configure scoring and judging behaviour
  • 05 Review, then dispatch the run

Back: Evaluation Service

  • Receives the assembled pipeline over HTTP
  • Runs candidate assistants against each sample
  • Hands generated code to the judging layer
  • Returns scores and comparisons for the run

The HTTP boundary is what let the wizard and the service evolve independently, and what made the service's load behaviour measurable in isolation later on.

Additional Contributions

Reusable load harness

The concurrency-ramping, RSS-sampling harness built to find the leak outlived the investigation and became a repeatable way to check the service under load.

Single source of truth

Consolidating the duplicated benchmarking logic gave the platform one definition of what a benchmark is, which every later change builds on.

Evaluation as measurement

Moving grading from manual review to rubric-driven automation changed model comparison from a discussion into a number that can be tracked over time.

Python Streamlit LLM-as-a-Judge HTTP Services COBOL to Java Performance Engineering Refactoring
Back to Portfolio