AI/ML engineer, 8+ years shipping production systems. I build
agentic LLM applications with real evaluation behind them,
real-time computer vision tuned to run on edge silicon, and the
manufacturing analytics that connect the two. Most of my recent work is
about a single question: when should a model be trusted?
Three companies, one throughline: taking models out of notebooks and making them survive contact with production.
AI/ML Engineer · eMoldinoNow
APR 2025 โ PRESENT · SEOUL, SOUTH KOREA
Built a Production Insight LLM agent (AWS Bedrock Claude, LangGraph, Snowflake) with intent-driven routing and real-time streaming into a React frontend.
Designed a Manufacturing MCP Server exposing four analytics tools โ ROI, RunRate, Capacity, CT Efficiency โ over FastAPI with async job queues and multi-user sessions.
Shipped an LLM evaluation suite: 210+ tests across four modules using LLM-as-Judge and DeepEval (faithfulness, hallucination, answer relevancy) over six scored criteria, tracked in Snowflake.
Built cycle-time deviation detection with adaptive windows and Mann-Whitney U / Chi-square testing, plus a capacity-risk dashboard using Physics-of-Loss methodology and OLS forecasting.
Deployed a scrap-rate prediction pipeline that cut test MAE by 33%, from 16.3% to 10.9%.
Ran AI delivery under SAFe, improving sprint velocity and release consistency across the team.
Built real-time railway pantograph monitoring with YOLOv8 and edge processing at 95.5% fault-detection accuracy โ awarded an Innovation Award.
Designed a sorting-robot vision pipeline at 99.5% mAP@50, raising manufacturing efficiency by 20%.
Built LSTM and gradient-boosting models for fan-speed control and energy-anomaly detection, saving 12.3% in energy.
Delivered CV applications for golf-swing analysis, face/fire/hand detection, and OCR from drone video.
YOLOv8Edge AILSTMSAFeTensorRTTeam leadership
AI Research & Development Engineer · Pittasoft
SEP 2017 โ APR 2022 · SEOUL, SOUTH KOREA
Led ADAS development for dashcam products: forward vehicle detection, traffic-light recognition, and Forward Vehicle Start Alarm.
Built a Driver Monitoring System, training YOLO models to detect distraction and drowsiness.
Applied a VGG-based U-Net to medical image segmentation with optimized real-time inference.
Built end-to-end video pipelines (OpenCV, FFmpeg) for streaming, enhancement, and feature matching.
OpenCVADASDMSU-NetTensorFlowFFmpeg
02 โ PROJECTS
Selected work
Independent builds, each one taken far enough to produce measurements rather than a demo.
Uncertainty Quantification for LLMs
PYTORCH · HUGGING FACE · OPEN SOURCE
Token- and sentence-level uncertainty for a local Qwen2.5-1.5B: predictive entropy, perplexity, max-softmax, and semantic entropy via NLI meaning-clustering โ benchmarked on factual QA and math.
0.945AUROC from one free forward pass
0.900AUROC from 10-sample semantic entropy
71%of the compute, for 80% of the gain
Error-detection AUROC, ECE with reliability diagrams, risk-coverage curves, bootstrap CIs โ all hand-implemented and unit-tested.
The free signal beat the expensive one, and I traced why rather than shrugging: question-conditioned NLI collapses on comparative questions, so meaning-clustering merges answers that genuinely differ.
An uncertainty-gated cascade spends the sampling budget only where the model is actually unsure, instead of uniformly across every prompt.
Real-time DMS/OMS inferring eleven signals โ drowsiness, distraction, gaze zone, yawning, phone use, drinking, smoking, seatbelt, glasses, cap, and occupant count โ from a single camera feed.
11signals from one camera feed
7.4 msper frame on CPU, ~135 FPS
6โ10รslower under INT8, not faster
Fuses ONNX face detection, 98-point landmarks, 6DRepNet head pose, L2CS gaze, EAR/MAR/PERCLOS geometry, and localized YOLO detectors into one temporally-smoothed state.
Found the phone classifier firing at p90 โ 0.99 on a clip containing no phone โ a whole-image head has no concept of absence. Moved object-like classes to localized detectors, keeping classifiers only for genuine face attributes and geometry for yawn.
INT8 turned out to be a size win and a speed loss โ dequantization overhead swamps a MobileNetV3's tiny convolutions. So fp32 ships where compute is the constraint and INT8 only where flash and RAM are, with the benchmark script in the repo instead of a claim.
Driver-ROI scheduling runs detectors on ~half the pixels (141/145 frames ROI-only) with periodic full-frame sweeps to recount occupants; one consolidated YOLOv8n covers three classes in a single inference to keep the SoC budget flat.
same retrieval, same guardrails, only the generator swapped ยท both scored faithfulness 1.00
Agentic RAG with Guardrails
LANGGRAPH · FASTAPI · FULLY LOCAL
A local agentic RAG assistant over enterprise documents where refusing is a first-class outcome โ and a harness that measures whether it refuses correctly.
1.00faithfulness โ every answer entailed
0.94abstention accuracy, up from 0.69
0access-control retrieval leaks
Clearance is enforced inside the vector-store filter, not the prompt, so protected text never enters the model's context at all. That is the difference between a policy and a guardrail โ and the one that survives an audit.
Pure NLI over-abstained on valid paraphrases; an embedding-cosine rescue fixed it with faithfulness held at 1.00. NLI catches contradictions, cosine rescues restatements. Sentence-level premises moved entailment on a grounded pair from 0.0003 to 0.988.
Hybrid retrieval (dense + BM25 via RRF), prompt-injection defense, and document-level access control.
Judge-free retrieval and answer-quality harness โ hit@k, MRR, nDCG, NLI faithfulness โ plus a two-model accuracy/latency/cost comparison.
The streaming content-discovery stack end to end on MovieLens-1M โ candidate generation, learning-to-rank, bandit re-ranking, cold start, and search โ built to find out which stage the wins actually come from.
2.3รNDCG@10 over the popularity baseline
+12%more NDCG@10 from the ranker
67รthe latency that ranker costs
Retrieval does the heavy lifting, and it also widens the catalogue: coverage goes 0.08 โ 0.74 of all titles. A logQ correction on the in-batch negatives โ which otherwise punish popular items for being popular โ more than doubled Recall@10 (0.033 โ 0.085).
The ranker's 12% costs 7.3 ms: retrieval alone answers in 0.11 ms p50, the full two-stage request in 7.4 ms. That trade is the actual engineering decision โ worth paying on a homepage, not on typeahead.
The ranker's strongest feature by gain was neither popularity nor any embedding score โ it was how many retrievers independently surfaced the same item. LinUCB, meanwhile, tied the greedy ranker on offline replay (0.387 vs 0.388): a bandit cannot prove itself against a static log, so it ships behind the replay estimator rather than a chart pretending otherwise.
Cold start via bge content embeddings (a brand-new title is retrievable with zero interactions), hybrid dense + BM25 search fused by RRF (28 ms p50), MMR diversity (intra-list similarity 0.45 โ 0.41), PSI drift monitoring, and FastAPI serving โ with Spark/Airflow/Kubernetes scale-out documented rather than stubbed.