* fix(ai): make chat fallback reach streamed Claude calls and rank Azure explicitly - ClaudeProvider opens the upstream stream and awaits its connection before returning the populator, so an overloaded or rate-limited route throws from complete() and reaches the driver's fallback loop instead of surfacing as an error frame on a 200 - the OpenAI-compatible chat and completions routes only pin a provider when the caller sent one, so they get the same preferred healthy route puter.js callers do and unhealthy-route skipping applies to their first attempt - Azure is ranked ahead of the vendors it fronts by an explicit tier in modelRouting rather than a price tie plus registration order - drop Together's synthetic always-failing model-fallback-test-1 entry - test that a 4xx leaves a route in rotation while a 503 marks it Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * fix(ai): surface swallowed Claude stream errors, keep compat-route defaults Review follow-ups on the fallback work. - The pre-created event iterator only receives an error if a reader is already waiting on it, so a failure landing between the connect and the populator's first pull ended the stream cleanly — truncated content billed and reported as a success. Rethrow when the stream is errored. - A refused stream deleted its Anthropic uploads but left the caller's message parts pointing at those file ids, so the fallback route was handed handles it cannot resolve. processPuterPathUploads now returns a restore() that both failure paths call. - The OpenAI-compat routes keep pinning OpenAI when the caller sends no model at all, so the default model stays put instead of moving to Azure's. - Say why /openai/v1/responses and /anthropic/v1/messages stay pinned: each translates one provider's native shape by hand. - PREFERRED_PROVIDERS is unexported and its doc now states the rank is unconditional; the duplicated hidden-model list is one constant. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix(ai): undo the puter_path rewrite by field instead of snapshotting the part Copying the content part kept whatever the caller sent on it — a large inline `source` or `text` alongside `puter_path` — reachable until the request ended, where overwriting the field used to make it garbage right away. The only fields this function writes are `type`/`source` on success and `type`/`text` on failure, and the fallback uploader keys off `puter_path` alone, so restore undoes those three by name. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
The Open-Source Internet Computer!
« LIVE DEMO »
Puter.com
·
App Store
·
Developers
·
X
Puter
Puter is an advanced, open-source, self-hostable internet computer designed to be feature-rich, fast, and highly extensible.
For Users
Puter's goal is to provide you with every app and feature you need to work, create, and play under one roof. From a simple Notepad and Voice Recorder to Spreadsheet and Camera, Puter wants to be the all-in-one solution for your digital life.
For Developers
Puter provides everything you need to build and publish web apps and games. From AI to Cloud Storage and Database to Serverless Workers, Puter has you covered. Puter also helps you get users! Once you build your app, you can publish it on our App Store to reach and monetize users.
Getting Started
💻 Local Development
git clone https://github.com/HeyPuter/puter
cd puter
npm install
npm start
→ This should launch Puter at http://puter.localhost:4100
🚀 Self-Hosting
Linux/macOS
curl -fsSL https://puter.com/selfhost | sh
Windows
irm https://puter.com/selfhost?os=windows | iex
→ For more details, see Self-Hosting Puter.
☁️ Puter.com
Puter is available as a hosted service at puter.com.
Support
Connect with the maintainers and community through these channels:
- Bug report or feature request? Please open an issue.
- X (Twitter): x.com/HeyPuter
- Security issues or abuse reports? security@puter.com
- Email maintainers at hi@puter.com
We are always happy to help you with any questions you may have. Don't hesitate to ask!
License
This repository, including all its contents, sub-projects, modules, and components, is licensed under AGPL-3.0 unless explicitly stated otherwise. Third-party libraries included in this repository may be subject to their own licenses.
Translations
- Arabic / العربية
- Armenian / Հայերեն
- Bengali / বাংলা
- Chinese / 中文
- Danish / Dansk
- English
- Farsi / فارسی
- Finnish / Suomi
- French / Français
- German / Deutsch
- Hebrew/ עברית
- Hindi / हिंदी
- Hungarian / Magyar
- Indonesian / Bahasa Indonesia
- Italian / Italiano
- Japanese / 日本語
- Korean / 한국어
- Malay / Bahasa Malaysia
- Malayalam / മലയാളം
- Dutch / Nederlands
- Polish / Polski
- Odia / ଓଡ଼ିଆ
- Portuguese / Português
- Punjabi / ਪੰਜਾਬੀ
- Romanian / Română
- Russian / Русский
- Spanish / Español
- Swedish / Svenska
- Tamil / தமிழ்
- Telugu / తెలుగు
- Thai / ไทย
- Turkish / Türkçe
- Ukrainian / Українська
- Urdu / اردو
- Vietnamese / Tiếng Việt

