Staff AI Engineer @ VerveMarket
Former Senior ML Engineer @ Nubank
Former Senior AI Engineer @ Telepatia AI
Former Lead R&D Engineer in Agentic AI @ SoftServe
Staff AI Engineer / ML Engineer / Data Engineer
Staff AI Engineer who owns AI initiatives end-to-end: scoping the problem, designing the architecture, shipping to production, and measuring impact. Technical leader across healthcare, fintech, and e-commerce, from early-stage startups where I owned the AI/Data strategy outright to LATAM fintechs at scale.
Active open source contributor across the LLM and agent stack, working in orchestration and gateways (LangChain), serving and inference (vLLM, MLX), agent runtimes (Qwen Code, Harbor) and evaluation and observability (Inspect AI, OpenInference).
Led cross-functional delivery across healthcare, fintech, and e-commerce, working directly with CTOs and stakeholders to define what to build, not just how to build it. Track record of taking full ownership of AI/Data strategy at early-stage startups and delivering production systems at top LATAM fintechs serving tens of millions of users. Have worked extensively with international, distributed teams across the US and LATAM.
Mathematics degree from UNAM (GPA: 92/100). Strong fundamentals in ML theory, distributed systems, and software engineering, plus an NLP and deep-learning research internship.
Shaped by years in early-stage startups and other high-autonomy environments where ownership, speed, and sound technical judgment define success.
Owning and delivering production AI/ML systems end-to-end across industries
Set AI/Data technical direction company-wide, owning the model/architecture roadmap and defining the build-vs-buy and infra standards every AI project builds against, reporting directly to the CTO. Defined and delivered the product search experience end-to-end: a hybrid engine combining vector similarity (embeddings + reranking) with keyword retrieval, driving a 27% add-to-cart conversion improvement, serving ~100K multi-tenant requests/day at ~1s p95. Shipped a customer-facing autonomous agent embedded in the product that plans and executes multi-step tasks through multi-turn tool use for meal planning, cart building, and dietary profile tuning, acting on the live catalog and shopper's cart. Automated product cataloging across 500K+ products via LLM fine-tuning for NER. Established the AI infrastructure from scratch, including the vector store and MCP servers exposing internal tools to agents. Scaled LLM inference serving for production across text and multimodal models including image generation. Built evaluation infrastructure with deterministic, statistical, and LLM-as-judge pipelines, cutting the manual QA cycle from days to minutes.
LLMs Autonomous Agents Multi-turn Tool Use NER Hybrid Search Vector DB MCP Data Pipelines vLLM Multimodal Image Gen LLM-as-Judge Eval Pipelines Batch & RealtimeLed the AI product initiative from concept to production. Owned end-to-end architecture and delivery of multi-tool agents automating invoice generation, tax certificates, and compliance, cutting task turnaround from ~2 hours to under 10 minutes (~90% reduction). Designed and deployed MCP servers exposing enterprise APIs as agent tools, plus the agent host consuming them as MCP clients. Ran self-hosted inference (Ollama) for on-premise processing of sensitive financial data.
Agents LLMs MCP Ollama AutomationDrove an agentic AI platform for healthcare from zero to production MVP. Owned technical architecture: multi-agent orchestration integrating OCR, STT, and LLM services, reaching ~92% field extraction accuracy and cutting manual data entry by ~70%. Built MCP servers for the healthcare API tool layer and the multi-agent host acting as MCP client, with self-hosted inference (Ollama) keeping protected health information inside the client's infrastructure. Delivered in under 4 months.
Healthcare AI OCR STT Agents MCP OllamaOwned end-to-end delivery of a hallucination and missing information detector for AI-assisted medical form filling, flagging ~95% of hallucinated or missing fields. Scoped the problem, defined the approach, and shipped in under 5 weeks.
NLP Hallucination DetectionOwned the full model lifecycle for underwriting risk models serving 3M+ monthly credit decisions at ~150ms p99 under a 99.9% uptime SLA on K8s. Designed and shipped a Scala-based data integrity framework adopted across 8+ teams. Operated autonomously across multiple squads.
Scala K8s MLOps Risk ModelsTechnical lead for a 4+ PB Data Lake migration (Hadoop/Hive → S3/Snowflake), cutting query costs by ~35%. Defined migration strategy and drove execution across teams. Owned Spark job design on EKS processing 30+ TB daily.
Spark Snowflake S3 EKSReported directly to the CTO and VP of Engineering. Owned the data extraction platform powering content ingestion, scraping ~100K pages/week. Architected and shipped a document indexer API with vector storage (PostgreSQL/pgvector), the foundation of the RAG pipeline, indexing 1M+ documents at ~200ms p95 retrieval latency and serving 10+ customer chatbots across web app and Facebook. Exposed retrieval and ingestion as MCP servers so agents could consume document search as a standard tool interface. Drove LLM fine-tuning strategy (GPT, LLaMA, Gemini), improving answer relevance by ~30%.
RAG LLMs pgvector MCP FastAPI K8sTechnical lead for anti-money-laundering detection system: architected and deployed graph-based models processing 10M+ transactions, improving detection recall by ~25%. Set engineering standards for the team's PySpark codebase.
Graph ML PySpark Anti-fraudOwned the fraud prevention system end-to-end (real-time anomaly detection on GCP). Drove operational success rate from ~80% to 97%. Designed the data warehouse architecture improving data availability across all teams.
GCP Deep Learning Data WarehouseEnd-to-end AI/ML and Data Engineering at production scale
Open source work and personal projects on GitHub
Grammar Error Correction system developed using T5 transformer and OpenAI models for automated text correction.
T5 OpenAI NLPELT pipeline using Airflow, Docker, S3 and BigQuery to extract weather data from the Mexican water agency API.
Airflow Docker S3 BigQueryThe first MLX port of NVIDIA's Nemotron-Parse OCR architecture (C-RADIO encoder + mBART decoder), enabling it to run on Apple Silicon. The port is verified bit-exact against the HF reference on CPU, including the multi-step KV-cache path. In review.
MLX Quantization Computer VisionSame ELT pipeline rebuilt in Scala with Spark, demonstrating proficiency in both Python and Scala data stacks.
Scala SparkComplete coursework from DeepLearning.AI specialization sponsored by Google Developers ML Bootcamp LATAM 2022.
Deep Learning TensorFlow GoogleActive contributor to major AI/ML frameworks and tools. Datasets, fine-tuned adapters and quantized models on Hugging Face.
Built a 16K-row Spanish reasoning dataset for SFT, distilled from DeepSeek V4 Flash. Traces are natively generated in Spanish rather than machine-translated, and every row is gated on language dominance, section integrity, and truncation.
Dataset Building Distillation SFT Hugging FaceTrained three open models to do their chain-of-thought in Spanish on the dataset above, and published each for MLX, PEFT and GGUF. Measured on a held-out Spanish GSM8K split with paired McNemar tests rather than a single score: Qwen3-4B gains 7.4 accuracy points while switching to perfect Spanish (p = 0.0031), so the capability costs nothing; Gemma-3-4B gains 27.9 points and a thinking mode the base model does not have at all; Qwen3-1.7B trades 5.7 points of accuracy for it, and its model card leads with that. Each is published at a lowered LoRA scale, which interpolates between base and fine-tune using the same weights and beat every retrain.
LoRA / QLoRA MLX PEFT Distillation Paired EvaluationPublished 4/6/8-bit MLX quantizations of a 4.5B agentic VLM for Apple Silicon, each evaluated against the bf16 source on distributional fidelity (perplexity ratio, top-1 agreement, KL divergence), task accuracy, and blind pairwise LLM-judge quality with position swapping. All variants proved statistically indistinguishable on judged quality while BLEU-vs-source spanned 49.5–82.7, showing why output-similarity metrics misrank quantized models. 4-bit runs 3.3x faster at 2.5x less memory.
Quantization MLX Eval Methodology LLM-as-JudgeOngoing contributor to the Python bindings for the Apple Neural Engine, with 39 PRs merged and none outstanding. Numerics: linalg primitives (matrix norms, matrix_power, solve via on-ANE pivoted LU, expm by scaling and squaring, inv, QR least squares, polar, matrix_rank, cond, kron), special functions (erf as its own polynomial, digamma, beta, Bessel), irfft and the dsp signal generators. Models: GPT-2 on the ANE with a resident KV cache, CLIP zero-shot with both encoders on-engine, Gemma and Mistral adapters, RoBERTa and XLM-R rerankers. Compiler: layer_norm applied its affine inside the rank-4 body, which the compiler rejects from D=1024 up, so any real trained affine failed to compile on M1 and M2. Plus the roofline benchmark harness and the decode-throughput work behind it.
Decomposed Softplus in the TensorFlow frontend to avoid fp16 overflow on the Apple Neural Engine, where the native op's numeric range differs from the CPU and GPU backends. In review.
Enabled bfloat16 inference on Blackwell (sm_100) GPUs by removing a stale device-capability guard, after verifying the Triton and CUDA dequantization backends handle bf16 output correctly. Also merged: the merged-column and QKV weight loaders read the tensor-parallel rank from a keyword argument the v2 loader never passes, so under TP>1 every rank silently kept rank 0's shard and produced wrong output with no error. Both merged.
vLLM Inference Triton Tensor ParallelismTwo PRs merged in the Anthropic instrumentor. Prompt-cache read and write token details are now recorded on the streaming paths, so cached-token spend is visible in traces; and llm.token_count.total, previously emitted only when streaming, is derived on the non-streaming path so both paths report the same totals.
Router pre-call checks count embedding input as text so token limits apply, and the Anthropic adapter preserves reasoning_content across tool-call round trips. In review.
Six merged across the two repos. In MLX core: hadamard_transform failed to compile on the GPU for n = 12, 20 and 28, where a guard present on two of the three stages was missing on the third and left a divide-by-zero in the step count; and bytes() returned the wrong buffer for non-contiguous arrays. In mlx-lm: the LoRA trainer's batch shuffling now honors seed=0, which was silently ignored despite being the CLI default, so the most common value was the one that did not reproduce; wired_limit is gated on the active device; the pythonic tool parser handles single-quoted values containing commas; and the gated_delta_update q-scaling contract is documented and pinned with a reference test against the HF implementation. One more is in review, on single-element strided slice round-tripping.
Multi-engine search tool, memory summarization to keep long agent runs inside the context window, multi-turn chat_history on agent.run(), and preserving successful results when parallel tool calls partially fail. In review.
Two standalone packages bringing SearchApi.io's multi-engine web search (Google, News, Shopping, YouTube, Bing, Baidu) to agent frameworks: a LangChain integration with a search tool, RAG retriever, and full async support, and a LlamaIndex tool integration. Both published on PyPI, plus the official integration docs upstream in LangChain.
LangChain LlamaIndex PyPI SearchTwo fixes in review. service_tier support on ChatGoogleGenerativeAI, where the constructor argument was silently discarded and the value has to travel as a body field on one backend and a request header on the other, with the accompanying docs page. And schema-aware decoding of the JSON-encoded list and dict tool arguments Gemini returns, which reached Pydantic as strings and failed validation before the tool ever ran. The decode is gated on the declared parameter type, so a string argument carrying a JSON payload is left alone.
BpeBuilder::build() sized its scratch buffer to the longest token in the vocabulary, but a merge writes the concatenation of two, so a crafted tokenizer.json panicked with an out-of-range slice on load, before tokenizing anything. A second bug in the same loop underflowed a usize when the right token was shorter than the continuing-subword prefix. Verified by reverting the source hunks and keeping the tests, which reproduced the panic. In review.
Tools with an empty or all-optional parameter schema are called with an empty argument body, which some models emit with stray quotes attached, failing the parse and returning a tool error to the model. The issue placed the fault client-side; tracing the value from chat.completions.create() to the parser showed nothing accumulates or re-serializes in between, so the string arrives that way off the wire. That explains why two unrelated backends produced the identical artifact. Merged.
Multi-engine search tool for CrewAI agents supporting Google, YouTube, Bing, Baidu and more, with dynamic engine switching inside agent workflows. Also hardened error handling across config parsing, callbacks, and async execution. In review.
CrewAI Agents SearchMade the request timeout configurable in the MCP fetch server, improving reliability for long-running tool calls, with test coverage for the new configuration paths. In review.
MCP Python Agent ToolingTwo agent runtimes. In Alibaba's Qwen Code CLI, Vertex AI could only authenticate with an explicit key file, so Application Default Credentials, the standard path on GCP compute, were unusable. In Harbor, environment_content_hash raised OverflowError on files above 4 GB, breaking environment fingerprinting for any agent workspace holding a model checkpoint. Merged.
Scrapy's headless-browser integration read a download's body through path(), which is unavailable when the browser context is remote, so downloads silently produced empty responses. Reading through save_as() works in both the local and remote cases. Merged.
Designed and ran deep reinforcement learning experiments (PyTorch, OpenAI Baselines, Dopamine), comparing agent architectures against published baselines. Built an end-to-end NLP data pipeline (large-scale scraping, cleaning, annotation) for language-model training, working alongside faculty researchers.
Recommendations from colleagues. Verify on LinkedIn