AI Engineer / Istanbul, Turkey

AI that earnsits place.

I build LLM applications, Arabic NLP, and retrieval systems, with the Python engineering that brings them into products.

Explore my work
Ahmad Nouh, AI Engineer
Ahmad NouhAI / ML Engineer

MENT / AI pipeline

15 → <3 min

Parallel LLM extraction with Python mapping and validation. Approximate recorded runtime.

Professional AI engineering

≈6 years

Arabic NLP, LLM applications, retrieval, and Python services. Experience through July 2026.

Lableb / spam service

30,000/day

Up to 30,000 requests per day; about 90% of spam queries filtered.

Experience, with the details.

What I worked on, how I contributed, and what the results mean.

Oct 2023 - Oct 2025

MENT

AI Engineer
Remote

Company HQ: Falls Church, Virginia, USFull case study

Enrichment & relationship intelligence

Better context. Less waiting.

MENT is a privacy-first network-intelligence platform. My work covered collecting and enriching information, attributing it to the right profile, extracting structured fields, and exposing relationship insights through backend and conversational services.

  • Reduced a core AI pipeline from about 15 minutes to under 3 through parallel asynchronous extraction.
  • Improved data-to-profile attribution by approximately 33% versus the prior system.
  • Built a Neo4j relationship graph and contributed to n8n multi-agent enrichment with MCP tools.
  • Python
  • Azure OpenAI
  • Celery
  • Neo4j
  • n8n
  • MCP
  • RabbitMQ
  • Grafana

Shortening the extraction pipeline

The core AI pipeline was taking about 15 minutes. I parallelized asynchronous LLM calls that extracted different schema sections, such as professional and personal fields, and handled mapping and validation in Python. The pipeline then ran in under 3 minutes, enabling interactions closer to real time.

Attributing information to the right person

Similar or identical names made data-to-profile attribution ambiguous. I improved attribution by approximately 33% versus the prior system, working on profile disambiguation and enrichment quality.

More engineering detail & measurement context

Shortening the extraction pipeline: This result belongs to asynchronous extraction and Python processing. It is separate from the Neo4j graph and multi-agent contributions. The workload size, percentile latency, and measurement protocol are not recorded.

Attributing information to the right person: The exact metric definition, sample size, and relative-versus-absolute interpretation are not documented. This is an attribution result, not a 33-percentage-point accuracy gain or a knowledge-graph benchmark.

Enrichment through cooperating workflows

I contributed to multi-agent enrichment in n8n, integrated Model Context Protocol tools, and contributed RabbitMQ integration and retries. Grafana tracing supported visibility into the workflows.

I also built and deployed Python microservices and Celery workers for background collection, enrichment, insight generation, and AI workloads. Azure OpenAI integrations supported retrieval and conversational services. Exact agent topology and agent counts are not established.

Relationships that can be queried

I designed and implemented a Neo4j graph of contact profiles and relationships. It supported insights around shared interests, employers, and multi-hop network connections.

This demonstrates graph data modeling and relationship traversal. The available evidence does not establish a production GraphRAG deployment or a causal link between the graph and the attribution measurement.

Aug 2020 - Sep 2023

Lableb

AI Engineer
Remote

Company HQ: Dubai, UAEFull case study

Arabic NLP & service engineering

Arabic language, practical systems.

At Lableb, I worked on Arabic NLP and search-related B2B systems, moving between model research, comparative experiments, data preparation, and service development. I first joined as an AI Engineer Intern in April-July 2020, then started the full-time role in August.

  • Built a production B2B spam-classification service handling up to 30,000 requests per day.
  • Filtered about 90% of spam queries, with attention to valid traffic and false positives.
  • Compared spelling-correction approaches and trained/evaluated Arabic NER, POS, and transliteration models.
  • Python
  • TensorFlow
  • Hugging Face
  • KenLM
  • DVC
  • Azure ML
  • Go / Fiber
  • Java / Spring Boot

Filtering spam in a production service

I built a B2B spam-classification service handling up to 30,000 requests per day and detecting/filtering about 90% of spam queries. The work connected classification models with production service engineering, with attention to minimizing false positives on legitimate queries.

Comparing approaches to Arabic spelling

I compared NLTK n-gram models and neural noisy-channel approaches through iterative spelling-correction experiments. Moving to KenLM improved runtime with comparable results. DVC versioned related datasets and model artifacts.

More engineering detail & measurement context

Filtering spam in a production service: The 90% figure describes spam filtering. It is not established as overall accuracy, precision, or F1; no measured false-positive rate, customer count, or service-level objective is supplied.

Comparing approaches to Arabic spelling: I researched, trained, and evaluated Arabic named entity recognition, part-of-speech tagging, transliteration, and spelling correction in Azure Machine Learning, using task-appropriate F1, precision, recall, and accuracy. These research activities are distinct from the production spam service.

Serving language capabilities

I built microservices for synonym extraction, spam filtering, English-to-Arabic transliteration, and converting unstructured text to structured data. Service work spanned Python/Flask, Go/Fiber, and Java/Spring Boot.

Data preparation and analysis used pandas, NumPy, Matplotlib, and Seaborn. I worked with other engineers on model and service delivery; the record does not assign every framework to a particular service or establish throughput for every NLP component.

Oct 2018 - Jan 2020

Code Experts

Web Developer / Damascus, Syria / On-site

At Code Experts, I built Angular interfaces and contributed Node.js backend work for Vooliom, a video-on-demand product. For Alo Taxi, I built the Ionic mobile app and Angular 8 administration panel, and contributed to a WebSocket chat feature connecting drivers and riders.

  • Angular
  • Ionic
  • Node.js
  • WebSockets

Independent work

Built to explore. Built to use.

Personal applications and experiments, from retrieval to model evaluation.

Second Memory returning saved notes for a natural-language search
Themed preview / Synthetic sample notes. View the original.

Second Memory.

Save the discovery.
Find the connection.

Save online discoveries, organize editable summaries and tags, and retrieve them through hybrid search and a tool-using assistant.

  • Hybrid vector/full-text retrieval with Reciprocal Rank Fusion and account-scoped filters.
  • LangGraph search/listing tools, streamed responses, and server-validated saved-item references.
  • Editable titles, summaries, and reusable tags; JSON/CSV import/export with duplicate skipping.
  • Python
  • FastAPI
  • PostgreSQL
  • pgvector
  • LangGraph
  • Gemini embeddings
  • Groq
  • Flutter
  • Docker Compose
Watch the 48-second walkthrough & see the assistant

A recorded walkthrough of the running application: search, note details, and an assistant response with retrieved sources. Uses eight synthetic sample notes; pauses are trimmed. Silent video, with the steps described below.

  1. Browse the saved-note library.
  2. Search with a paraphrased question and open the matching note.
  3. Ask the assistant to compare two notes and inspect its source cards.
Second Memory assistant comparing two saved notes and returning source cards
Actual assistant response and retrieved saved-item cards / Synthetic sample notes.
How Second Memory retrieves saved knowledge
  1. Save & organizeEditable titles, summaries, tags
  2. Retrieve within accountVector + full-text search, filters
  3. Fuse rankingsReciprocal Rank Fusion
  4. Answer with referencesLangGraph tools, validated item cards

Searches saved titles, metadata, and summaries. The application and database are self-hosted; Groq and Google APIs provide inference and embeddings.

Explore retrieval, reliability & evaluation

Saving useful context, not just links

Saving a URL extracts public metadata/descriptions and produces editable titles, summaries, and tags. Tags can be reused, listed, renamed, or removed. The Flutter client supports web and locally configured Android share intents; saved items can be filtered by type and tags, with dates supported by the list API.

JSON and CSV import/export skip duplicates. Current ingestion works with metadata and summaries: it does not transcribe videos or index complete article bodies.

Combining semantic and keyword retrieval

The backend uses PostgreSQL 16 and pgvector. Gemini gemini-embedding-001 produces 768-dimensional embeddings with RETRIEVAL_DOCUMENT for saved titles/summaries and RETRIEVAL_QUERY for questions. Cosine-similarity candidates and PostgreSQL full-text results are fused with Reciprocal Rank Fusion, using constant 60.

Account ownership and tag/type filters are applied inside database queries before candidate limits. Specified embedding-provider failures fall back to keyword search; database errors still propagate. Search is over saved metadata/summaries, without a claim of passage-level document QA.

References grounded in authorized results

A LangGraph/LangChain assistant uses search and listing tools, with hosted Groq inference and the current documented default openai/gpt-oss-120b. SSE streams answers to Flutter. The server resolves saved-item cards from authorized tool results, discarding invented IDs and duplicate references.

Backend work includes Pydantic schemas/settings, SQLAlchemy asynchronous access, asyncpg, and Alembic migrations. The Flutter client uses Dart, Riverpod, go_router, and Freezed. Tests cover ranking, filters, ownership, provider fallback, streaming, and reference validation.

Delivery and a small retrieval check

Docker Compose and migrations support self-hosting, with a documented VPS deployment path. GitHub Actions is documented for backend/Flutter tests, analysis, and the release web build. The application and database are self-hosted; Groq inference and Google embeddings remain external dependencies.

A recorded September 11, 2026 smoke run used eight manually labeled queries over eight synthetic notes: Recall@5 and MRR@5 were both 1.0, with median API latency 324.7 ms. This was one sequential pass with real Google embeddings after warmup/import, not a general accuracy, production-scale, or baseline-superiority result.

Personal fine-tuning experiment

SILA-4B

An Arabic tool-calling QLoRA experiment on Qwen3-4B using an 8 GB laptop GPU. Synthetic data, leakage checks, pinned inputs, and resumable paired evaluation made the result inspectable.

  • PyTorch
  • Transformers
  • PEFT
  • TRL
  • bitsandbytes
  • uv
Result & scope

I built a workflow for synthetic-data preparation, QLoRA training, and controlled base-versus-adapter evaluation on an 8 GB GPU. With pinned inputs, leakage checks, and resumable benchmarks, I could inspect training outcomes and prepare a revised dataset for the next experiment.

Personal ML / MLOps pipeline

Topic Classification

An end-to-end topic-classification workflow connecting model training, hyperparameter tuning, prediction, and evaluation through MLflow, with a Streamlit interface for exploring data and running inference.

  • Python
  • scikit-learn
  • MLflow
  • Snorkel
  • Streamlit
Topic Classification using an MLflow run to predict a topic in Streamlit
Themed preview / From an MLflow run to a prediction. View the original.
Explore the pipeline’s three interface views

The Streamlit interface connects the pipeline’s outputs: inspect labeled data, review overall/class/slice metrics, and try a prediction. These repository captures illustrate the workflow; they are separate from the saved evaluation run.

Topic Classification Streamlit data view
Explore labeled data and predictions / Actual application screenshot. Click to enlarge.
Topic Classification Streamlit performance view
Inspect overall, class, and slice evaluation / Actual application screenshot. Click to enlarge.
Topic Classification Streamlit inference view
Try topic prediction / Actual application screenshot. Click to enlarge.
Result & scope

I connected training, hyperparameter tuning, prediction, and performance reporting in an MLflow pipeline, with experiment artifacts available for review. Through Streamlit and Snorkel slice analysis, users can explore the data, try predictions, and inspect model behavior across topic classes, emoji tweets, and short tweets.

Personal retrieval demo

IMDb Semantic Search

Find movies by meaning using all-MiniLM-L6-v2 sentence embeddings and ChromaDB, with a Streamlit interface over movie descriptions, titles, genres, dates, and crew metadata.

  • Python
  • ChromaDB
  • Sentence Transformers
  • Streamlit
Result & scope

I built a movie-discovery demo that lets users search by meaning. The implementation connects IMDb data processing, sentence embeddings, and ChromaDB indexing with a Streamlit interface, covering the path from preparing movie metadata to querying a vector database and presenting results.

Local computer-vision application

OnePass Face Recognition

A local webcam/DroidCam application to detect, capture, and recognize previously seen faces. OpenCV-only fallback, optional MediaPipe detection, and DeepFace FaceNet512 embeddings support different environments.

  • Python
  • OpenCV
  • MediaPipe
  • DeepFace
  • uv
Result & scope

I built a local application that connects camera input, face detection, capture, and recognition of previously seen faces. Users can configure the camera source and matching thresholds; I added local storage for face crops, embeddings, and capture metadata, plus an OpenCV-only fallback for environments without TensorFlow.

The model is only
part of the work.

My work connects applied AI with backend engineering: understanding model behavior, preparing data, designing APIs, and handling the latency and failures that appear in a real product. I have approximately six years of professional AI engineering experience through July 2026, preceded by web development.

I work best with clear outcomes, technical ownership, and time for focused execution. At Blink, that meant collaborating with product, frontend, mobile, QA, and backend colleagues to bring AI features through tests and staged releases.

My path started in web development, moved into Arabic NLP, and grew into LLM applications and the backend systems around them. I care about making the result useful, measurable, and maintainable.

View public CV

The path so far

Nov 2025 - Jul 2026BlinkAI Engineer / Remote
Oct 2023 - Oct 2025MENTAI Engineer / Remote
Aug 2020 - Sep 2023LablebAI Engineer / Remote
Apr 2020 - Jul 2020LablebAI Engineer Intern
Oct 2018 - Jan 2020Code ExpertsWeb Developer / On-site, Damascus

A toolkit with a track record.

Technologies connected to the work they supported. Professional experience and personal experiments are called out separately.

LLM applications & agents

Blink beta workflow, MENT enrichment, and Second Memory

Tool boundaries, structured outputs, OCR-assisted document extraction, model APIs, and asynchronous workflows that connect AI with product services.

  • LangGraph
  • LangChain
  • MCP
  • n8n
  • Azure OpenAI
  • Groq
  • Gemini
  • OCR
  • Docling

Retrieval & recommendations

Blink recommendations, MENT graph, and personal search projects

Content-based recommendations, vector and full-text search, RRF ranking, and graph relationship traversal.

  • PostgreSQL
  • pgvector
  • Embeddings
  • Hybrid retrieval
  • RRF
  • Neo4j
  • ChromaDB
  • Sentence Transformers

Backend & data

Python services across AI roles; earlier web and NLP services

Python is my primary language. I build APIs, workers, validation, messaging, and streaming around models and data.

  • Python
  • SQL
  • FastAPI
  • Flask
  • Celery
  • RabbitMQ
  • SQLAlchemy
  • Pydantic
  • Alembic
  • SSE
  • Go / Fiber
  • Java / Spring Boot
  • Node.js

Machine learning & Arabic NLP

Lableb research, Topic Classification, and SILA-4B

Spelling, NER, POS tagging, transliteration, classification, and comparative evaluation. QLoRA/PyTorch work is a personal experiment.

  • TensorFlow
  • Keras
  • Hugging Face
  • KenLM
  • NLTK
  • PyTorch
  • QLoRA / PEFT
  • TRL
  • scikit-learn
  • pandas
  • NumPy
  • MLflow
  • DVC
  • Snorkel

Cloud, delivery & evaluation

Azure model work, Blink GPU feasibility, and personal deployments

Automated checks, staged releases, tracing, and benchmarks chosen for the task: retrieval ranks, classification F1, or inference latency.

  • Azure ML
  • AWS EC2 G5
  • Docker / Compose
  • GitHub Actions
  • Grafana
  • Ollama
  • Recall@k / MRR@k
  • BFCL / AST
  • TTFT / throughput
  • Cloudflare Pages

Programming tools & workflow

Daily engineering and AI-assisted personal projects

I used Claude Code at Blink for code, tests, documentation, and reports, alongside Git and automated checks. My broader toolset includes Codex, Cursor, Jupyter, and Python development tools.

  • Git
  • GitHub
  • GitLab
  • Claude Code
  • Codex
  • Cursor
  • uv
  • Jupyter
  • pytest
  • Ruff
  • Node test runner

Interfaces & application development

Code Experts, Second Memory, and this portfolio

Angular/Ionic from earlier professional work; Flutter/Dart and TypeScript/Vite from personal applications. This portfolio uses native HTML/CSS.

  • Angular
  • Ionic
  • JavaScript
  • TypeScript
  • Flutter
  • Dart
  • Riverpod
  • Streamlit
  • Vite
  • HTML / CSS

Education

Bachelor’s degree in Information Technology Engineering, Artificial Intelligence specialization. Damascus University, 2015-2021.

Selected training

  • DeepLearning.AI TensorFlow Developer / July 2021
  • Introduction to Machine Learning in Production / DeepLearning.AI
  • Natural Language Processing in TensorFlow / DeepLearning.AI / June 2021
  • Natural Language Processing with Probabilistic Models / DeepLearning.AI / March 2021
  • Python for Data Science and AI / IBM / September 2020

Languages

  • Arabic - Native or bilingual proficiency
  • English - Professional working proficiency
  • Turkish - Elementary proficiency

Go deeper with
my AI Twin.

Explore the implementation, compare projects, or ask how my experience fits a role. Answers draw on the same public facts as this portfolio.

Have something
in mind?

I’m open to applied AI, LLM, NLP/search, and AI backend opportunities across EMEA.

Submitting sends these details to Ahmad by email. Privacy details.

Powered by public portfolio facts

Ahmad’s AI Twin AI

The details behind
the work.

I am the AI assistant for Ahmad. Ask about implementations, results, tradeoffs, or role fit. I share documented details from Ahmad’s public profile.

Start with a question. Follow your curiosity.

Answers draw on Ahmad’s public profile. AI can make mistakes. Groq or Cloudflare processes your messages. Public suggested answers may be cached; chats are not stored.