Portfolio
Applications
Libraries & Code
Python library for structured output from LLMs over tabular data. Combines prompt engineering via Jinja2 templates with Pydantic response models and concurrent batch execution over DataFrames. Supports OpenAI, Anthropic, and Google providers via LiteLLM. Used to build AI agents for automated data enrichment at Graphext and Apify actors for SEO research.
TypeScript companion to Cuery for structured output from LLMs with Zod schema validation. Ships pre-built AI-powered analytics tools for classification, entity extraction, sentiment analysis, topic modelling, and web search. Runs on Deno, Node.js, and in the browser. Published to JSR and npm.
Fast, intelligent parsing library for CSV files that handles messy real-world data with zero configuration. Automatically detects encodings, dialects, and preambles, then uses ML-informed type inference to identify column types more accurately than pandas or Arrow — correctly handling large integer IDs, nested lists, non-ISO timestamps, and semantic types like URLs. Battle-tested in production at Graphext across thousands of diverse data sources.
Schema-validated, backend-agnostic ML pipeline orchestration framework. Write transformation steps once using Ibis expressions and run them unchanged on DuckDB, PostgreSQL, Snowflake, BigQuery, or Spark. Steps declare input/output schemas with Arrow types, enabling static DAG validation before execution. Pipelines can be defined via Python, YAML, or a builder API — all three produce the same validated DAG. Used as the backbone for ML data pipelines at Graphext.
Sensorimotor Life draws on current theoretical developments in the enactive approach to life and mind. It examines and expands the premises of the sciences of the human mind, while developing an alternative picture closer to people’s daily experiences. Enactive ideas are applied and extended, providing a theoretically rich, naturalistic account of meaning and agency. The book includes a dynamical systems description of different types of sensorimotor regularities or sensorimotor contingencies; a dynamical interpretation of Piaget’s theory of equilibration to ground the concept of sensorimotor mastery; and a theory of agency as organized networks of sensorimotor schemes, as well as its implications for embodied subjectivity
NLP and graph analytics study of ideological communities around Spanish political parties and media outlets. Text analysis of tweet content combined with network clustering to reveal media consumption bias in retweet activity.








