Blog · 6 entries
Writing from the lab
Notes from research and engineering: urban video understanding, vision-language and retrieval systems, visual analytics, and the tooling that ships them.
Explore
All posts
EmbeddingGemma 2: one sub-1B model for text, code, images, video and audio
Google's open embedding model puts text, code, images, video and audio in one 768-d space at 740M params. Where it beats SOTA, where it doesn't, how to run it.
AI agent harnesses: the system around the model
What an AI agent harness actually does: the model–tool loop, context, state, permissions, and feedback that turn a capable model into a dependable agent.
PydanticAI vs. LangChain vs. LlamaIndex: picking an agent framework in 2026
PydanticAI vs. LangChain/LangGraph vs. LlamaIndex for production LLM agents: type safety, tool calling, retrieval, observability, and where each one breaks.
Copier vs. Cookiecutter: why your project templates should be living, not frozen
Copier vs. Cookiecutter for project scaffolding: why Copier's update story makes it the default for long-lived templates, with examples and migration notes.
Dagster vs. Airflow and Prefect: why asset-based orchestration wins
Dagster vs. Airflow, Prefect and Flyte for data and ML pipelines: why asset-based orchestration beats task DAGs, with code, a cost model and migration notes.
uv vs. conda and virtualenv: why the Rust-based Python installer wins
uv vs. conda vs. virtualenv/pip: why the Rust-based uv is becoming the default Python toolchain for engineers and ML teams, with benchmarks and migration tips.