About Me
Applied AI engineer shipping LLM agents, evaluation harnesses, and Python research tooling from prototype to production. Hands-on with retrieval, debugging, and measured outcomes across startup and enterprise settings. C…
Applied AI engineer shipping LLM agents, evaluation harnesses, and Python research tooling from prototype to production. Hands-on with retrieval, debugging, and measured outcomes across startup and enterprise settings. Comfortable explaining technical tradeoffs to engineers and non-specialists.
Experience
Community Builder
<p>Built product apps and features in React, Next.js, and Apollo GraphQL as part of the part-time engineering work alongside community.<br>
Created tutorial videos and wrote blog posts explaining product usage, building an ongoing content pipeline for user onboarding.<br>
Interacted directly with clients, including Linkup, Monderal, and Visum, and relayed their feedback to the development team.</p>
AI Intern: NL2SQL (Neuro-Symbolic Schema Linking)
<p>Built an 8-stage LangGraph pipeline that profiles PostgreSQL databases into an OWL/SKOS ontology and infers foreign keys directly from the data, recovering the roughly 37% of benchmark joins that the schema metadata never declares.<br>
Converted gold SQL into training subgraphs for a dual-tower contrastive retriever (frozen bge-small-en-v1.5, PyTorch, InfoNCE), using a leakage-safe split that groups questions by query skeleton so train and test never share a pattern.<br>
Found that about a third of the gold nodes were structural bridge tables that similarity search cannot reach, and fixed it by combining the scorer with Steiner-tree assembly, adaptive thresholding and table gating, which keeps retrieved subgraphs small and always joinable.<br>
Integrated the retriever into Qwery’s LangGraph SQL agent with schema validation and LangSmith tracing. Execution accuracy rose from 32.5% to 59% on BIRD dev and from 29% to 66.4% on Mini-Dev across six LLMs, while token usage dropped to about 0.38x of the baseline.</p>
Research Intern: Insurance Policy Design
<p>Built product apps in React, Next.js, and Apollo GraphQL for the part-time internship delivery surface around the policy-design system.<br>
Built a 1.9K-node Neo4j knowledge graph from OCR-processed Tunisian and EU insurance regulations, enabling cross-border compliance queries via graph traversal instead of keyword search.<br>
Improved recall@10 from 0.62 to 0.77 across 30 labeled queries by injecting each retrieved clause’s graph neighborhood before generation.<br>
Reduced inference cost and kept data on-premise by routing queries through an 85%-accurate LangChain planner and generating on a self-hosted 2.6B LFM2 model, which outperformed six other sub-4B models tested.<br>
Architected the stack behind swappable storage/retrieval interfaces, running on MinIO/Qdrant/Neo4j locally at no cost and portable to S3/Neptune/ECS on AWS.</p>
AI Intern: Network Issue Classification with MLOps
<p>Cleaned 5,525 eNodeB KPI records, cut 107 columns to 52 via correlation analysis, and engineered temporal features (peak hours, weekends) that shaped cell behavior.<br>
Labeled the unlabeled dataset using per-issue K-Means clustering and iterative feature selection, then tuned per-issue decision thresholds (0.10-0.60) with SMOTE to correct severe class imbalance.<br>
Deployed real-time fault classification serving 10,000+ records/sec at under 100ms by fusing seven per-issue KNN/Random Forest models into one multi-label FastAPI service, with Prefect retraining weekly, MLflow tracking, and Docker CI/CD.</p>
AI Intern: Brain Tumor Classification
<p>Diagnosed a 26-point validation-test accuracy gap in a ResNet50 MRI classifier as overfitting, then closed it with rotation-based augmentation, reaching 98.2% test accuracy.<br>
Built a DCGAN from scratch to generate synthetic MRIs, then recommended against using it for classifier training after tracing the residual artifacts the model was exploiting as shortcuts.<br>
Deployed both models behind a Swagger-documented Gradio API, letting the team test the pipeline from a browser instead of running notebooks.</p>