I ship LLM and agentic systems into client environments — reading documents no template could parse, watching sensor streams no fixed rule could cover, and routing both through a pipeline a team can run unattended. I build with Claude Code every day, and I treat evaluation as part of the system, not an afterthought.
Scope the real data
Pull the actual documents or sensor feed first. Ground truth before a single prompt is written.
Build the pipeline
Ship behind a service, not a notebook — it has to keep running when I'm not watching it.
Evaluate alongside it
Regression tests, latency, cost, accuracy by field — built with the system, not bolted on after.
Verify against source
Every output traces back to where it came from, so it can be checked before anyone acts on it.
Alerting and clustering for a production line
An anomaly-detection system for a manufacturing client's sensor data. Operating curves are first clustered into regimes — day shift, night shift, rated throughput, start-up — so a threshold means the same thing in every one of them. A PyTorch autoencoder, trained only on healthy periods and conditioned on regime, reconstructs each variable from all the others: a machine that's failing but still inside its normal range shows up as a residual, not as an outlier that a simple rule would miss. Every alert traces back to one machine and one variable, and a recalibration agent re-checks the model on a schedule — deciding whether to retune or hold, never touching production without a dry run and a canary step first.
Sentiment & classification for insurance documents
Part of a multi-agent system built for a financial and insurance software vendor. Documents are parsed with spaCy, then run through a BERT model I fine-tuned in PyTorch to classify sentiment and intent on insurance correspondence, before an open-source LLM — served via Ollama, with retrieval through LangChain and ChromaDB — produces the analysis a case handler reads. Shipped as secured Python microservices behind REST APIs, with Docker and GitLab CI/CD, feeding a dashboard business teams use directly.
Document extraction & OCR pipeline
An LLM extraction pipeline for a public-sector client: incoming PDFs go through OCR, then an LLM (DeepSeek) turns the recognized text into structured, validated data — and the same pipeline drafts the client's reports automatically, instead of someone retyping numbers off a scan.
Distill — a small model, graded like a big one
Fine-tuned an open-weight 4B model (Qwen3-4B, QLoRA) into a 12-tool agent, served locally with vLLM and llama.cpp — no API calls. The harness is the point as much as the model: ground-truth labels, leakage-free train/test splits, a noisy regression set, accuracy scored per tool and per argument, p50/p95 latency, clarification and refusal tests, versioned schemas, and CI running on every push.
I'm a software engineer (Bac+5, ESPRIT, 2025) who ended up specializing in applied AI — the part of the job where a model has to survive contact with a client's real documents, real sensors, and real deadlines. I build with Claude Code every day, and most of what I ship runs behind an API or a scheduled job rather than in a demo.
Professional English, fluent French, native Arabic. Based in Tunis, Tunisia.