A Dev Container for SQLAlchemy with SQLTools
SQLAlchemy 2.0 was recently released, with a few significant interface differences. I'm working on a video that walks through a SQLAlchemy 2.0 example, and in the process of making that video, I...
View ArticleStreaming ChatGPT with server-sent events in Flask
The Azure SDK team recently asked if I could create a sample using Flask to stream ChatGPT completions to the browser over SSE. I said, "sure, but what's SSE?" As I've now discovered, server-sent...
View ArticleProviding feedback on the VS Code Python experience
My current role as a Python cloud advocate at Microsoft is to make sure Python developers have a great experience using Microsoft products, including my current favorite IDE, VS Code. As much as I love...
View ArticleBest practices for prompting GitHub Copilot in VS Code
I've been using GitHub Copilot for the last six months in repositories large and small, old and new. For me, GitHub Copilot is the pair programmer that I never knew I wanted. It gives me great...
View ArticleTips for debugging Flask deployments to Azure App Service
.codeblock { border-top: 4px solid #eee; border-bottom: 4px solid #eee; padding: 8px; white-space: pre-wrap; } There are many ways to deploy Flask web apps to App Service: Azure CLI, VS Code Azure...
View ArticleAutomated accessibility audits for Python web apps (Part 1)
We all know by now the importance of accessibility for webpages. But it's surprisingly easy to create inaccessible web experiences, and unknowingly deploy those to production. How do we check for...
View ArticleAccessibility snapshot testing for Python web apps (Part 2)
In my previous post, I showed a technique that used axe-core along with pytest and Playwright to make sure that pages in your web apps have no accessibility violations. That's a great approach if it...
View ArticleFetching JSON over streaming HTTP
Recently, as part of my work on Azure OpenAI code samples, I've been experimenting with different ways of streaming data from a server into a website. The most well known technique is web sockets, but...
View ArticleMocking async openai package calls with pytest
As part of my role the Python advocacy team for Azure, I am now one of the maintainers on several ChatGPT samples, like my simple chat app and the very popular chat + search app. Both of those samples...
View ArticleBest practices for OpenAI Chat apps: Concurrency
As part of my role the Python advocacy team for Azure, I am now one of the maintainers on several ChatGPT samples, like my simple chat app and this popular chat + search app. In this series of blog...
View ArticleBest practices for OpenAI Chat apps: Streaming UI
As part of my role the Python advocacy team for Azure, I am now one of the maintainers on several ChatGPT samples, like my simple chat app and this popular chat + search app. In this series of blog...
View ArticleBest practices for OpenAI Chat apps: Go Keyless
As part of my role the Python advocacy team for Azure, I am now one of the maintainers on several ChatGPT samples, like my simple chat app and this popular chat + search app. In this series of blog...
View ArticleUsing SQLAlchemy 2.0 in Flask
Way back in January, the very popular Python ORM SQLAlchemy released version 2.0. This version makes SQLAlchemy code much more compatible with Python type checkers.Typed model classesHere's a...
View ArticleStrategies for managing dependencies for Python samples
A big part of my job in Python advocacy at Microsoft is to create and maintain code samples, like examples of how to deploy to Azure using FastAPI, Flask, or Django. We've recently undergone an effort...
View ArticleMy failed attempt at using a closet as an office
My partner and I both work from home. I'm very thankful for that as we have two young children and a commute would take up the same time we spend on getting them ready for the day. However, it's been...
View ArticleHow to document a native California garden
Ever since moving into our house in 2021 in the East Bay area, I’ve been replacing the exotic and invasive plants with native California plants, preferring pollinator-friendly keystone species in...
View ArticleSanta Tracker Tales: Nearly crashing Google's servers, Leaking Santa's data,...
Back when I worked at Google, from 2006-2011, I spent many a December on my 20% project, the Santa Tracker. In those days, the tracker was a joint collaboration with NORAD, with the Googlers focused on...
View ArticleUsing llamafile for local dev for an OpenAI Python web app
We're seeing more and more LLMs that can be run locally on a laptop, especially those with GPUs and multiple cores. Open source projects are also making it easier to run LLMs locally, so that you don't...
View ArticleUsing FastAPI for an OpenAI chat backend
When building web APIs that make calls to OpenAI servers, we really want a backend that supports concurrency, so that it can handle a new user request while waiting for the OpenAI server response....
View ArticleDeveloper relations & motherhood: Will they blend?
My very first job out of college was in developer relations at Google, and it was absolutely perfect for me; a way to combine my love for programming with my interest in teaching. I got to code, write...
View ArticleEvaluating a RAG chat app: Approach, SDKs, and Tools
When we’re programming user-facing experiences, we want to feel confident that we’re creating a functional user experience - not a broken one! How do we do that? We write tests, like unit tests,...
View ArticleConverting HTML pages to PDFs with Playwright
In this post, I'll share a fairly easy way to convert HTML pages to PDF files using the Playwright E2E testing library.Background: I am working on a RAG chat app solution that has a PDF ingestion...
View ArticleRAG techniques: Cleaning user questions with an LLM
When I introduce app developers to the concept of RAG (Retrieval Augmented Generation), I often present a diagram like this:The app receives a user question, uses the user question to search a...
View ArticleRAG techniques: Function calling for more structured retrieval
Retrieval Augmented Generation (RAG) is a popular technique to get LLMs to provide answers that are grounded in a data source. When we use RAG, we use the user's question to search a knowledge base...
View ArticleEvaluating RAG chat apps: Can your app say "I don't know"?
In a recent blog post, I talked about the importance of evaluating the answer quality from any RAG-powered chat app, and I shared my ai-rag-chat-evaluator repo for running bulk evaluations.In that...
View Article
More Pages to Explore .....