Berkay
Köklü

AI EngineerML Engineer

Building production AI systems, and researching how agents learn from generated worlds.

AI ENGINEER
since Jan 2025
Bizzbee — production LLM systems
M.SC. CANDIDATE
Boğaziçi
Electrical & Electronics Engineering
OPEN SOURCE
2 live systems
deployed, measured, documented
PRODUCTION PATH01/6
UserRouteRetrievalGenerationGuardrailResponse

A question arrives, with the tenant and language it came in.

What I build

One production AI platform, part by part. Pick one to see what it does and which case study it belongs to.

8 parts of one platform. Pick one.

Production work

Systems running for real users at Bizzbee. Diagrams first; the method is one click away.

AGENTIC RAG / ROUTING

A retriever that decides how to retrieve

Routerretrieve? which way?no retrieval neededVectormeaningLexicalidentifiersGraphentities, hopsFuse & rankenough → answerreflectAnswer

where is order 84-5512?An identifier has nothing to embed. Lexical search finds it exactly; the vector arm returns other order enquiries.

Built retrieval as an agent rather than a fixed pipeline: it decides whether to retrieve at all, which strategy fits the question, and whether what came back is enough to answer with.

PythonAgentic RAGQuery routingSelf-reflectionLangChainVector searchBM25
GRAPH RAG

Questions whose answer is spread across documents

MULTI-HOP · WHAT FLAT RETRIEVAL MISSES0 / 3 hops
placedships fromaffected byCustomerdoc 1Order 84-5512doc 2İzmir warehousedoc 3Delay incidentdoc 4no single chunk holds this chain

Extracted entities and relations from the corpus into a graph, so questions that need several facts connected can be answered by traversal rather than similarity.

PythonGraph RAGEntity extractionRelation extractionMulti-hop retrieval
SAFETY / GUARDRAILS

Safety constraints and PII anonymisation on model output

InputPre-checkModelGuardrailResponseRELEASED

Nothing identifying, nothing unsafe. The response goes out unchanged.

Built moderation and personal-data anonymisation into the output path itself, with constraints configurable per deployment.

PythonModerationPII detectionFastAPI
DATA / INGESTION

Document ingestion and chunking

DocumentParseChunkMetadataEmbedVector storestructured and unstructured sources, one path

Built ingestion and chunking pipelines for structured and unstructured sources, shaping chunk boundaries so retrieved context stays coherent.

PythonDocument parsingChunkingMongoDB
EVALUATION

Evaluation pipelines and feedback loops

WITHOUT MEASUREMENT / WITH

CHANGE → ?

A prompt or retriever is edited. Behaviour moves. Nobody can say in which direction, or whether to keep it.

CHANGE → SCORE → KEEP / REVERT

The same change is scored against a fixed set before it ships, and production feedback goes back into the set.

Built evaluation pipelines and feedback loops that quantify model behaviour in production, so each iteration is judged rather than guessed.

PythonLLM evaluationFeedback loops

No performance figures appear on these four. The work is under NDA-shaped constraints and nothing was measured into a number I can publish and stand behind. The measured results are in the open-source work below, where anyone can reproduce them.

Open source

Built outside work, deployed, and measured. Both publish what they found — including where the result went against me.

a crowd running toward a glowing hole, isometric diorama, miniature style, mobile game ad
a crowd running toward a glowing hole, isometric diorama, miniature style, mobile game ad
a crowd running toward a glowing hole, isometric diorama, miniature style, mobile game ad
a crowd running toward a glowing hole, isometric diorama, miniature style, mobile game ad
a crowd running toward a glowing hole, 3d mobile game render, soft lighting, mobile game a
a crowd running toward a glowing hole, 3d mobile game render, soft lighting, mobile game a
a crowd running toward a glowing hole, 3d mobile game render, soft lighting, mobile game a
a crowd running toward a glowing hole, 3d mobile game render, soft lighting, mobile game a
a crowd running toward a glowing hole, hand-painted casual game art, mobile game ad
a crowd running toward a glowing hole, hand-painted casual game art, mobile game ad
a crowd running toward a glowing hole, 3d mobile game render, soft lighting, mobile game a
a crowd running toward a glowing hole, 3d mobile game render, soft lighting, mobile game a
a giant hole swallowing tiny cartoon people, isometric diorama, miniature style, mobile ga
a giant hole swallowing tiny cartoon people, isometric diorama, miniature style, mobile ga
one cartoon person falling into a hole, arms up, 3d mobile game render, soft lighting, mob
one cartoon person falling into a hole, arms up, 3d mobile game render, soft lighting, mob
a crowd running toward a glowing hole, hand-painted casual game art, mobile game ad
a crowd running toward a glowing hole, hand-painted casual game art, mobile game ad
a crowd running toward a glowing hole, 3d mobile game render, soft lighting, mobile game a
a crowd running toward a glowing hole, 3d mobile game render, soft lighting, mobile game a
a crowd running toward a glowing hole, 3d mobile game render, soft lighting, mobile game a
a crowd running toward a glowing hole, 3d mobile game render, soft lighting, mobile game a

GENERATED ON-DEVICE · THE ELEVEN THAT SCORED HIGHEST WHEN RATED BLIND

ML / DECISION SYSTEMSLive

churn-decisions — a probability is not yet a decision

WHAT EACH MODEL SAYS THE CHURN RATE IS, AGAINST 20.4% WHO ACTUALLY LEFT

Plain19.4%
Class-weighted34.1%
Calibrated19.4%

The line is the rate that actually occurred, at 20.4%.

947 vs 431
customers sent an offer at the same threshold — from models whose AUC differs by 0.004

Trained a churn model, checked whether its probabilities mean what they say, then derived the decision threshold from what a retention offer costs rather than defaulting to 0.5.

Pythonscikit-learnCalibrationDecision theorypandasNumPy
EXPERIMENTATION / STATISTICSLive

experiment-audit — what an A/B test could and could not detect

SHARE OF A/A EXPERIMENTS SHOWING A FALSE RESULT, BY HOW OFTEN THEY WERE CHECKED

Checked once4.8%
Checked 5 times14.1%
Checked 12 times20.2%
Checked 30 times28.0%

The line is the error rate the test promises, at 5.0%.

0.59 / 0.93
effect measured against the smallest this sample could detect

Audited a real mobile-game experiment with 90,189 players: the significance test, the effect sizes it was equipped to find, and what watching the dashboard would have done to the answer.

PythonNumPypandasHypothesis testingPower analysisMonte Carlo
GENERATIVE AI / EVALUATIONLive

creative-eval — do automatic quality filters agree with a human?

MEAN HUMAN RATING OF EACH FILTER'S TOP TEN, OUT OF 5

Button-area clarity2.70
CLIP (600 MB model)2.60
Brand colour2.00
Distinctiveness1.70
My own control3.30

The line is no filter at all, at 2.23.

5 lines
of arithmetic beat a 600 MB vision model — then a control beat both

Generated sixty ad creatives, scored them four ways automatically, rated all sixty blind, and measured whether the scores agree with the human.

PyTorchDiffusersCLIPNumPyNext.js
AGENTS / RETRIEVALLive

equity-research-agent — notes that cannot cite what does not exist

ANNUAL REPORTS PARSED WITH NO WRONG CONTENT, OUT OF 20

Pure regex14
Model picks, code cuts20

The line is the regex parser it replaced, at 14.

0
wrong chapters across 20 filings, against 14 of 20 before

A LangGraph agent that turns a ticker into a research note where every claim carries the filing passage behind it and every figure comes from the company's own filed data.

LangGraphPythonpgvectorFastAPIOpik

Where I'm going next

M.Sc. thesis direction, and the chain of work leading into it. Early research — there are no results here yet.

A learned simulator to plan inside.

If the simulator is good enough, planning no longer needs the real environment.

THE OPEN QUESTION

A world model that generates plausible trajectories lets a policy be trained and tested without acting in the real environment — which matters most exactly where acting to learn is expensive or unsafe. The part I care about is constraint: a generated trajectory is only useful if it could actually have happened.

ts-worldmodel-lab — benchmarking harness

Experience

Jan 2025 — now

AI Engineer

Bizzbee

Production LLM systems for a multi-tenant AI customer service platform: retrieval, generation, safety and the evaluation loops around them.

Stack

CORE

PythonPyTorchFastAPIDockerSQL

AI / ML

Agentic RAGGraph RAGHybrid retrievalQuery routingEmbeddingsTransformersDiffusionEvaluationOffline RL

DATA

pandasNumPyscikit-learnA/B testingPower analysisCalibrationMongoDB

INFRASTRUCTURE

GitHub ActionsGitLangChainHugging Face

Building an AI team?

Open to AI engineering, ML engineering and data science roles.