Cambiando idioma
Carlos José Castro GalanteCarlos José Castro Galante
Carlos José Castro Galante
© 2026
Projects
AI

Tramo

An open source assistant that compares the analytic program of a passed course with the program of the course a student wants recognized, and drafts an equivalency report for the reviewing professor. Gemma 4, an open weights model running on the same computer through Ollama, extracts the topics of both programs, assesses every destination topic with evidence and explains each decision, while plain code computes the coverage and applies the 50 percent rule of the regulation. The professor can overrule any topic before signing, and no document ever leaves the machine. Submitted to the Hacktoberfest Open Source AI Challenge on DEV, where the full story of the project is told.

Tramo

Metrics

Model
Gemma 4
Documents sent to the internet
0
Time per analysis
~1,5 min
Automated tests
119
Equivalency rule
50% art. 87
Challenge
Hacktoberfest DEV 2026
Screenshots

The problem

When a student changes careers or universities, getting the courses they already passed recognized can take months. A professor has to read two long analytic programs side by side, decide topic by topic which content is already covered, compare the result with the percentage the regulation requires and write down which topics remain. It's repetitive work, hard to audit afterwards, and it delays students who have already studied that content.

The solution

Tramo takes both programs as text, PDF or Word and analyzes them in four stages. Gemma 4 extracts the topics of each program through structured outputs validated by a schema, assesses every destination topic against the whole origin program citing up to five topics as evidence, and drafts a recommendation from facts the code has already computed. Coverage and the 50 percent rule are resolved in Python with tests, so no text can change the verdict. Progress streams live to the browser, the professor can overrule any status and the numbers are recalculated on the spot. Everything runs locally, with no keys or external services.

Technical stack

Frontend
HTML · CSS · JavaScript · ES Modules
Backend
Python · FastAPI · Pydantic · Ollama · Gemma 4

Challenges

  • Discovering that with thinking mode on the model ignored the JSON schema and returned free text, and turning it off to recover structured outputs, which also cut the analysis from five and a half minutes to one and a half

  • Replacing a first rule based version that ended up proposing the names of the professors and the weekly hours as topics to retake, with model extraction and a visible fallback when the answer doesn't validate

  • Accepting that the same pair of programs gave coverage between 24 and 32 percent across runs, and designing the report so every topic shows its reasoning and the professor can correct it

  • Treating every file as hostile, rejecting PDFs with scripts or attachments and Word documents with macros, manipulated paths or abnormal expanded size, and warning in the report when a text tries to instruct the model

  • Streaming the actual progress of the analysis to the browser with newline delimited JSON events, so the percentage on screen reflects completed work and not a timer

Learnings

  • Letting the model propose while code decides is the rule that makes a tool assisting administrative decisions trustworthy

  • A structured output is only useful when it's validated, every topic must be assessed once and every cited source has to exist

  • Running an open weights model locally turns privacy into a property of the architecture instead of a promise

  • Measuring before optimizing saves days, a simple benchmark showed the speed problem came from a single model option

  • In tools that affect people, explaining the limits and who decides is as much part of the product as the features