
1
1
Tunisia
5+ years of experience
I'm Omar Bounawara, a computer engineering graduate (ISI, University of Tunis El Manar) based in Tunisia. I build Python systems around data and LLMs: web crawlers, ETL pipelines and search tools. I recently delivered a data pipeline for a client as the sole owner, and I assembled and led a five-person team on Wasel, a product built around LLM guardrails and evaluation gates. I've had documentation and bug-fix pull requests merged into Scrapyd, Crawl4AI and Terrier. I work in Python, FastAPI, Docker and the OpenAI API, and I'm training on LangChain, LangGraph and MCP. I'm here to build fast and ship working demos.

Sellers in Tunisia take orders in chat and are paid in cash on delivery. A refused parcel is a wasted courier trip. Customers write in Darija (Arabic script or Arabizi), French or a mix, and give addresses like "near the mosque". Wasel reads the conversation, extracts the order and scores the refusal risk from 0 to 100, with reasons quoted from the customer's own words. It drafts the one question that would lower the risk: confirm, complete the address, or pay first. When the customer answers, the order is rescored and the page shows which reasons changed. Order #2601 goes from High 87 to Low 16 once a full address arrives. A person approves what is sent. The language model never picks a number. It fills a 12-field schema, code checks every quote against the original text, and an XGBoost model plus the rules in config/scoring.yaml compute the score. Drafts come from approved templates; any model rewrite must pass a prefilter, a classifier and a judge. Injected text in a message is flagged. Business value: in a simulation on 2,001 held-out orders, confirmation and prepayment questions cut refusals from 30.0 % to 23.6 %, worth 464 TND per 1,000 orders (labels simulated, assumptions shown in the app). Tested on every change: 279 extraction cases, 165 outbound drafts, 32 injection attempts and 737 tests that run without keys. AMD: the model call goes through a configurable route: AMD Token Factory (Gemma-4-31B-IT) first, hosted Groq (gpt-oss-120b) as a fast backup, then rules. On 40 extraction cases, Token Factory recognised 92.5 % of orders against 87.5 % for Groq (one run, synthetic data). It takes 7 to 13 s per call, so the route allows 16 s before falling back. We make no claim about the GPU. The demo uses synthetic data. Open source under the MIT licence.
18 Oct 2026