Case Study

Multilingual AI agent-powered chatbot supporting journalist training

Vstorm built a RAG-based agentic system that speaks English and Arabic, to support ARIJ Network in training investigative journalists from ARIJ's own fact-checked knowledge — and to open a paid-answer income stream.

  • Media & Journalism
The outcome

From one percent of inquiries answered, to all of them

ARIJ trains investigative journalists across 22 countries. Staff could answer no more than 1% of requests by hand. The agent had to sit inside Moodle, reply only from ARIJ's own materials, and never mix English with Arabic.

The figures are from the live Moodle agent, not a side demo. Gemini 2.5 Pro, PydanticAI, a RAG tool, and a language-check tool. Small talk is answered without a retrieval call, so a thank-you does not spend a full query.

Of journalist inquiries ARIJ could answer by hand

1%

No automation. No room to scale the training load.

22

Countries in the ARIJ network

The agent follows the language of the turn: English or Arabic, not a blend.

About the client

Arab Reporters for Investigative Journalism (ARIJ) Network connects and trains investigative journalists who are native speakers of Arabic and work throughout the Middle East and North Africa. It supports working and aspiring journalists alike.

ARIJ was founded in Jordan in 2005 and now operates in 22 countries. In that time it has trained thousands of journalists and published more than 1,000 investigative journalism materials.

Vstorm's impact

Vstorm's impact, the TL;DR

  • Inquiry response rose from 1% handled by hand to 100% handled by the agent
  • Bilingual English and Arabic, without mixing the two languages in a turn
  • Agent lives in Moodle, the LMS ARIJ already used — it did not force a new classroom
  • PydanticAI agent with two tools: RAG over ARIJ materials, and a language check
  • Limited free answers, then paid — a new income stream beside the training itself

The challenge

A training desk that could answer one inquiry in a hundred

As a knowledge provider, ARIJ needed a smoother learning path. The team could process no more than 1% of journalist requests, all by hand. That capped automation and scale. Questions and answers sit at the centre of the training, so a chatbot was the right shape of solution — if it replied from ARIJ's own knowledge and only that.

Four constraints sat on that brief. LLMs hallucinate, and an education network has almost no margin for invented facts that a journalist will take into the field. The knowledge base was scattered: student manuals and lecture transcripts, awkward for a conventional search. The agent had to enrich the Moodle workflows already in use, not replace them. And it had to work in English and Arabic for an international, Arabic-native community.

How we delivered

TriStorm inside the Moodle ARIJ already ran

The agent had to answer from ARIJ's own materials, in the language of the turn, without asking staff to leave their LMS.

Map the 1% bottleneck

Workshops locked the brief: manuals and transcripts as the exclusive source, Moodle as the classroom, English and Arabic without mixing, and no invented citations a journalist might trust.

  • Moodle constraint
  • Bilingual brief
  • Exclusive-source rule

Proof of Value on real ARIJ files

Chunk, vectorize, cluster. Then a PydanticAI agent with two tools — RAG retrieval and a language check — on Gemini 2.5 Pro. The first Proof of Value returned page numbers; a leaner reply was enough, so that extra field dropped.

  • Chunked ARIJ corpus
  • Two-tool agent
  • Gemini 2.5 Pro bilingual path

Ship in Moodle, with a paid-answer lane

Moodle is PHP and JavaScript, so the component had to fit that stack. Sign-in, then a free-answer cap with paid top-ups, so the same agent that trains journalists also supports ARIJ's income.

  • Moodle embed
  • Sign-in
  • Free-to-paid answers

How it works

Chunk the corpus, then two tools under one agent

The corpus is the foundation. Variable texts were split into batches, vectorized so the agent could search them, and clustered so related topics sit near each other in vector space. That cuts the work the model spends hunting for an answer.

Source docs Manuals, lecture transcripts
Chunking Variable texts split into batches
Vectorization Batches become embeddings
Clustering Related content grouped by topic

Vstorm × ARIJ — corpus the agent is allowed to read

On that store, Vstorm built a RAG path in PydanticAI: the agent, a tool that talks to the database, and a tool that validates the answer and its language. Gemini 2.5 Pro was chosen because it held up in English and Arabic in testing, and is strong enough for educational replies. If the turn is small talk — a thank-you — the agent answers itself and skips retrieval, which saves the cost of a full query.

Journalist in Moodle Types a question
Agent · Gemini 2.5 Pro Small talk, or a domain query?
Small talk Direct reply — no RAG call
Domain query Tool 1 RAG, then Tool 2 language check
Response in the user’s language English or Arabic, not mixed

Vstorm × ARIJ — two-tool agent in Moodle

Results

What changed for ARIJ's newsroom trainees

Inquiry response rate
100× coverage
Manual replies
1%
With the ARIJ agent
100%

The agent is live in Moodle, where course participants already work. They no longer hunt through a scattered corpus: the agent takes the query and returns the best answer it can ground in ARIJ's materials. It follows the language of the conversation and does not mix English with Arabic.

For ARIJ it is training support and a commercial lane: a limited number of free answers per user, with more available to purchase.

Work with us

Ready to see how agentic AI transforms training and knowledge workflows?

Meet directly with our founders and PhD AI engineers. We will walk through real implementations from 30+ agentic projects and the practical steps to integrate them into your workflows.