Live demo · credit risk agent
Recorded AI run · live decision engine
Muster Logistik GmbH · working capital and fleet renewal
Six documents in. One decision out, with the reasoning attached and every figure traceable to the page it came from. The AI's reading is a recording, but the decision built on it is calculated right here, by the same code the risk team runs. Change any figure and watch it move.
Approve €375,000
with conditions
75% of the amount requested · grade B policy
Policy threshold: 70 (not met)
What the answer cost (measured during the recorded run)
Almost all of that time was the AI reading six documents, the part you actually want to pay for. Finding the data, putting the steps in the right order and moving results between them took a rounding error.
What we had to write
We name what we want. We never say where it lives, what order to fetch it in, or how to stitch it together. That is the entire point.
With mloda
scores = mloda.run_all([ Feature("FinancialScoring", options) ])
Ask for the scored decision by name. mloda works out the rest.
Without it, the same line is a project
Ask something else
mloda starts from the answer you asked for and works backwards to what it needs. Ask something smaller and the extra steps simply never run. Nobody has to go and remove them. Try it:
The one line above is the whole API surface. Everything else is context and wiring that stays identical no matter which question you pick. Note that the plugin catalog lists all four feature groups every time, and mloda picks the subset the answer needs:
Where the AI stops
The model's only job was to find eight numbers in the paperwork and write them down. It is not asked for an opinion, and it never touches the arithmetic that produces the score. Which is exactly why the arithmetic can run live on this page: drag anything on the left.
What the AI returned: 8 fields, nothing else
Drag a figure to test a what-if. The AI is not re-run.
It fills a fixed form. Free text is not an option it has.
What your risk team's code does with them
Recalculated live, by the real scoring code.
Same figures in, same score out. Every time, by construction.
Swap the model for a different one tomorrow and the score is still calculated the way your risk team wrote it. The reader can change. The arithmetic doesn't.
The audit trail (as recorded during the run)
There is an answer for all of them. The grade came from a score, the score from three ratios, the ratios from eight figures, the figures from six documents, each step recorded as it ran, not reconstructed afterwards. These rows are the original run, so they stay put when you change the figures above.
Every row above is captured from the run itself: the feature group that produced it, its content-hashed version, the exact columns in and out, row counts, and wall-clock duration.
Step 3 emits nine columns: FinancialExtraction~revenue through ~interest_expense, plus ~llm_summary. Step 4 consumes all nine and emits FinancialScoring~health_score, ~risk_grade and ~policy_json, among others.
The scoring on this page is a faithful browser port of health_score.py and policy_segment.py, same weights, same weakest-link cap, same grade bands. A test in the repo runs both against the same inputs so they cannot drift apart.
Run on PandasDataFrame, mloda 0.11.2, scenario demo_unsure. The AI provider is one environment variable: LLM_BACKEND, and changing it leaves every other step untouched.
This demo is a credit desk. The library underneath it doesn't care: it is an open-source entry point between an AI agent and whatever data it needs.