<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: realtime</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/realtime.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2025-09-01T17:34:55+00:00</updated><author><name>Simon Willison</name></author><entry><title>Introducing gpt-realtime</title><link href="https://simonwillison.net/2025/Sep/1/introducing-gpt-realtime/#atom-tag" rel="alternate"/><published>2025-09-01T17:34:55+00:00</published><updated>2025-09-01T17:34:55+00:00</updated><id>https://simonwillison.net/2025/Sep/1/introducing-gpt-realtime/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://openai.com/index/introducing-gpt-realtime/"&gt;Introducing gpt-realtime&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Released a few days ago (August 28th), &lt;code&gt;gpt-realtime&lt;/code&gt; is OpenAI's new "most advanced speech-to-speech model". It looks like this is a replacement for the older &lt;code&gt;gpt-4o-realtime-preview&lt;/code&gt; model that was released &lt;a href="https://openai.com/index/introducing-the-realtime-api/"&gt;last October&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This is a slightly confusing release. The previous realtime model was clearly described as a variant of GPT-4o, sharing the same October 2023 training cut-off date as that model.&lt;/p&gt;
&lt;p&gt;I had expected that &lt;code&gt;gpt-realtime&lt;/code&gt; might be a GPT-5 relative, but its training date is still October 2023 whereas GPT-5 is September 2024.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;gpt-realtime&lt;/code&gt; also shares the relatively low 32,000 context token and 4,096 maximum output token limits of &lt;code&gt;gpt-4o-realtime-preview&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The only reference I found to GPT-5 in the documentation for the new model was a note saying "Ambiguity and conflicting instructions degrade performance, similar to GPT-5."&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://platform.openai.com/docs/guides/realtime-models-prompting#general-usage-tips"&gt;usage tips&lt;/a&gt; for &lt;code&gt;gpt-realtime&lt;/code&gt; have a few surprises:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Iterate relentlessly&lt;/strong&gt;. Small wording changes can make or break behavior.&lt;/p&gt;
&lt;p&gt;Example: Swapping “inaudible” → “unintelligible” improved noisy input handling. [...]&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Convert non-text rules to text&lt;/strong&gt;: The model responds better to clearly written text.&lt;/p&gt;
&lt;p&gt;Example: Instead of writing, "IF x &amp;gt; 3 THEN ESCALATE", write, "IF MORE THAN THREE FAILURES THEN ESCALATE."&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;There are a whole lot more prompting tips in the new &lt;a href="https://cookbook.openai.com/examples/realtime_prompting_guide"&gt;Realtime Prompting Guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;OpenAI list several key improvements to &lt;code&gt;gpt-realtime&lt;/code&gt; including the ability to configure it with a list of MCP servers, "better instruction following" and the ability to send it images.&lt;/p&gt;
&lt;p&gt;My biggest confusion came from &lt;a href="https://openai.com/api/pricing/"&gt;the pricing page&lt;/a&gt;, which lists separate pricing for using the Realtime API with &lt;code&gt;gpt-realtime&lt;/code&gt; and GPT-4o mini. This suggests to me that the old &lt;a href="https://platform.openai.com/docs/models/gpt-4o-mini-realtime-preview"&gt;gpt-4o-mini-realtime-preview&lt;/a&gt; model is still available, despite it no longer being listed on the &lt;a href="https://platform.openai.com/docs/models"&gt;OpenAI models page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;gpt-4o-mini-realtime-preview&lt;/code&gt; is a &lt;strong&gt;lot&lt;/strong&gt; cheaper:&lt;/p&gt;
&lt;table&gt;
    &lt;thead&gt;
        &lt;tr&gt;
            &lt;th&gt;Model&lt;/th&gt;
            &lt;th&gt;Token Type&lt;/th&gt;
            &lt;th&gt;Input&lt;/th&gt;
            &lt;th&gt;Cached Input&lt;/th&gt;
            &lt;th&gt;Output&lt;/th&gt;
        &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td rowspan="3"&gt;gpt-realtime&lt;/td&gt;
            &lt;td&gt;Text&lt;/td&gt;
            &lt;td&gt;$4.00&lt;/td&gt;
            &lt;td&gt;$0.40&lt;/td&gt;
            &lt;td&gt;$16.00&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;Audio&lt;/td&gt;
            &lt;td&gt;$32.00&lt;/td&gt;
            &lt;td&gt;$0.40&lt;/td&gt;
            &lt;td&gt;$64.00&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;Image&lt;/td&gt;
            &lt;td&gt;$5.00&lt;/td&gt;
            &lt;td&gt;$0.50&lt;/td&gt;
            &lt;td&gt;-&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td rowspan="2"&gt;gpt-4o-mini-realtime-preview&lt;/td&gt;
            &lt;td&gt;Text&lt;/td&gt;
            &lt;td&gt;$0.60&lt;/td&gt;
            &lt;td&gt;$0.30&lt;/td&gt;
            &lt;td&gt;$2.40&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;Audio&lt;/td&gt;
            &lt;td&gt;$10.00&lt;/td&gt;
            &lt;td&gt;$0.30&lt;/td&gt;
            &lt;td&gt;$20.00&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;The mini model also has a much longer 128,000 token context window.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: Turns out that was &lt;a href="https://twitter.com/_agamble/status/1962839472837361807"&gt;a mistake in the documentation&lt;/a&gt;, that mini model has a 16,000 token context size.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update 2&lt;/strong&gt;: OpenAI's &lt;a href="https://twitter.com/pbbakkum/status/1962901822135525695"&gt;Peter Bakkum clarifies&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;There are different voice models in API and ChatGPT, but they share some recent improvements. The voices are also different.&lt;/p&gt;
&lt;p&gt;gpt-realtime has a mix of data specific enough to itself that its not really 4o or 5&lt;/p&gt;
&lt;/blockquote&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/audio"&gt;audio&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/realtime"&gt;realtime&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/openai"&gt;openai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llm-pricing"&gt;llm-pricing&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/multi-modal-output"&gt;multi-modal-output&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llm-release"&gt;llm-release&lt;/a&gt;&lt;/p&gt;



</summary><category term="audio"/><category term="realtime"/><category term="ai"/><category term="openai"/><category term="generative-ai"/><category term="llms"/><category term="llm-pricing"/><category term="multi-modal-output"/><category term="llm-release"/></entry><entry><title>twitter-to-sqlite 0.6, with track and follow</title><link href="https://simonwillison.net/2019/Oct/6/twitter-to-sqlite/#atom-tag" rel="alternate"/><published>2019-10-06T04:54:33+00:00</published><updated>2019-10-06T04:54:33+00:00</updated><id>https://simonwillison.net/2019/Oct/6/twitter-to-sqlite/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.6"&gt;twitter-to-sqlite 0.6, with track and follow&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
I shipped a new release of my twitter-to-sqlite command-line tool this evening. It now includes experimental features for subscribing to the Twitter streaming API: you can track keywords or follow users and matching Tweets will be written to a SQLite database in real-time as they come in through the API. Since Datasette supports mutable databases now you can run Datasette against the database and run queries against the tweets as they are inserted into the tables.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/projects"&gt;projects&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/realtime"&gt;realtime&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/twitter"&gt;twitter&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/dogsheep"&gt;dogsheep&lt;/a&gt;&lt;/p&gt;



</summary><category term="projects"/><category term="realtime"/><category term="twitter"/><category term="dogsheep"/></entry><entry><title>Realtime Election Tweets</title><link href="https://simonwillison.net/2010/May/6/realtime/#atom-tag" rel="alternate"/><published>2010-05-06T21:20:00+00:00</published><updated>2010-05-06T21:20:00+00:00</updated><id>https://simonwillison.net/2010/May/6/realtime/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://jay.gooby.org/post/realtime-election-tweets"&gt;Realtime Election Tweets&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Jay Caines-Gooby’s realtime election tweet service, using Node.js, nginx and WebSocket with a Flash fallback.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/comet"&gt;comet&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/flash"&gt;flash&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/nodejs"&gt;nodejs&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/realtime"&gt;realtime&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/twitter"&gt;twitter&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/websockets"&gt;websockets&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/recovered"&gt;recovered&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/election"&gt;election&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jay-caines-gooby"&gt;jay-caines-gooby&lt;/a&gt;&lt;/p&gt;



</summary><category term="comet"/><category term="flash"/><category term="javascript"/><category term="nodejs"/><category term="realtime"/><category term="twitter"/><category term="websockets"/><category term="recovered"/><category term="election"/><category term="jay-caines-gooby"/></entry><entry><title>Quoting Neil Fraser</title><link href="https://simonwillison.net/2009/Aug/14/neil/#atom-tag" rel="alternate"/><published>2009-08-14T10:38:57+00:00</published><updated>2009-08-14T10:38:57+00:00</updated><id>https://simonwillison.net/2009/Aug/14/neil/#atom-tag</id><summary type="html">
    &lt;blockquote cite="http://neil.fraser.name/news/2009/08/14/"&gt;&lt;p&gt;Last night I woke up at 2am and realized that there was a fundamental problem with cursor preservation in today’s real-time collaborative applications [...] MobWrite now has what I believe to be the most advanced cursor preservation algorithm available.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="http://neil.fraser.name/news/2009/08/14/"&gt;Neil Fraser&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/collaboration"&gt;collaboration&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mobwrite"&gt;mobwrite&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/neil-fraser"&gt;neil-fraser&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/realtime"&gt;realtime&lt;/a&gt;&lt;/p&gt;



</summary><category term="collaboration"/><category term="mobwrite"/><category term="neil-fraser"/><category term="realtime"/></entry><entry><title>The Pushbutton Web: Realtime Becomes Real</title><link href="https://simonwillison.net/2009/Jul/24/pushbutton/#atom-tag" rel="alternate"/><published>2009-07-24T18:30:01+00:00</published><updated>2009-07-24T18:30:01+00:00</updated><id>https://simonwillison.net/2009/Jul/24/pushbutton/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://dashes.com/anil/2009/07/the-pushbutton-web-realtime-becomes-real.html"&gt;The Pushbutton Web: Realtime Becomes Real&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Anil Dash is excited by the potential for PubSubHubBub and Webhooks to make near-real-time scalable event publishing accessible to regular web developers. So am I.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/anil-dash"&gt;anil-dash&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pubsubhubbub"&gt;pubsubhubbub&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pushbutton"&gt;pushbutton&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/realtime"&gt;realtime&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/realtimeweb"&gt;realtimeweb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webhooks"&gt;webhooks&lt;/a&gt;&lt;/p&gt;



</summary><category term="anil-dash"/><category term="pubsubhubbub"/><category term="pushbutton"/><category term="realtime"/><category term="realtimeweb"/><category term="webhooks"/></entry><entry><title>EtherPad</title><link href="https://simonwillison.net/2009/Jul/24/etherpad/#atom-tag" rel="alternate"/><published>2009-07-24T00:35:25+00:00</published><updated>2009-07-24T00:35:25+00:00</updated><id>https://simonwillison.net/2009/Jul/24/etherpad/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://etherpad.com/"&gt;EtherPad&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Outstanding implementation of an online real-time collaborative text editor—basically SubEthaEdit in your browser. I can see myself using this a lot.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/appjet"&gt;appjet&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/comet"&gt;comet&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/etherpad"&gt;etherpad&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/realtime"&gt;realtime&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/subethaedit"&gt;subethaedit&lt;/a&gt;&lt;/p&gt;



</summary><category term="appjet"/><category term="comet"/><category term="etherpad"/><category term="javascript"/><category term="realtime"/><category term="subethaedit"/></entry><entry><title>pubsubhubbub</title><link href="https://simonwillison.net/2009/Apr/20/pubsubhubbub/#atom-tag" rel="alternate"/><published>2009-04-20T18:49:45+00:00</published><updated>2009-04-20T18:49:45+00:00</updated><id>https://simonwillison.net/2009/Apr/20/pubsubhubbub/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://code.google.com/p/pubsubhubbub/"&gt;pubsubhubbub&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
From Brad Fitzpatrick, a simple but clever way of using web hooks (HTTP callbacks) to inform subscribers that an Atom feed has updated in almost real-time—solving the constant polling problem and making it easier for small sites to offer publish-subscribe APIs. Any Atom feed can delegate subscriber updates to a “hub” server. An example hub server implementation is provided running on App Engine.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/atom"&gt;atom&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/brad-fitzpatrick"&gt;brad-fitzpatrick&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/google-app-engine"&gt;google-app-engine&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pubsub"&gt;pubsub&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pubsubhubbub"&gt;pubsubhubbub&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/realtime"&gt;realtime&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webhooks"&gt;webhooks&lt;/a&gt;&lt;/p&gt;



</summary><category term="atom"/><category term="brad-fitzpatrick"/><category term="google-app-engine"/><category term="pubsub"/><category term="pubsubhubbub"/><category term="python"/><category term="realtime"/><category term="webhooks"/></entry><entry><title>Giant, Python Powered Robots</title><link href="https://simonwillison.net/2009/Jan/28/robots/#atom-tag" rel="alternate"/><published>2009-01-28T10:35:44+00:00</published><updated>2009-01-28T10:35:44+00:00</updated><id>https://simonwillison.net/2009/Jan/28/robots/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://entitycrisis.blogspot.com/2009/01/giant-python-powered-robots.html"&gt;Giant, Python Powered Robots&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
“They each weigh about 11 tonnes and have a 17 meter reach. The control system is written in Python, with small sections of C which run in hard-real-time to guarantee safety.”


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/awesome"&gt;awesome&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/realtime"&gt;realtime&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/robots"&gt;robots&lt;/a&gt;&lt;/p&gt;



</summary><category term="awesome"/><category term="python"/><category term="realtime"/><category term="robots"/></entry><entry><title>Simple Update Protocol: Update</title><link href="https://simonwillison.net/2008/Dec/18/friendfeed/#atom-tag" rel="alternate"/><published>2008-12-18T23:33:46+00:00</published><updated>2008-12-18T23:33:46+00:00</updated><id>https://simonwillison.net/2008/Dec/18/friendfeed/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://blog.friendfeed.com/2008/12/simple-update-protocol-update.html"&gt;Simple Update Protocol: Update&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Already implemented by more than five services, each of which now have near-real-time updates in to the FriendFeed syndication engine.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/friendfeed"&gt;friendfeed&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/realtime"&gt;realtime&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sup"&gt;sup&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/syndication"&gt;syndication&lt;/a&gt;&lt;/p&gt;



</summary><category term="friendfeed"/><category term="realtime"/><category term="sup"/><category term="syndication"/></entry><entry><title>FriendFeed launch a real-time API</title><link href="https://simonwillison.net/2008/Oct/22/friendfeed/#atom-tag" rel="alternate"/><published>2008-10-22T14:18:56+00:00</published><updated>2008-10-22T14:18:56+00:00</updated><id>https://simonwillison.net/2008/Oct/22/friendfeed/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://blog.friendfeed.com/2008/10/keeping-it-real-with-friendfeed-real_21.html"&gt;FriendFeed launch a real-time API&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
This is huge: JSONP plus long polling Comet, with “everything since X” tokens to ensure you don’t miss anything. This is the first open Comet API I’ve seen anywhere. Combine this with FriendFeed’s regular API (which allows arbitrary message posting) and you’ve got a really powerful tool for hackers who want to experiment with Comet without rigging up their own infrastructure.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/apis"&gt;apis&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/comet"&gt;comet&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/friendfeed"&gt;friendfeed&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/json"&gt;json&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jsonp"&gt;jsonp&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/realtime"&gt;realtime&lt;/a&gt;&lt;/p&gt;



</summary><category term="apis"/><category term="comet"/><category term="friendfeed"/><category term="javascript"/><category term="json"/><category term="jsonp"/><category term="realtime"/></entry></feed>