Handmade ChatGPT 2/5 — Providers
Part two of the Handmade ChatGPT campaign: the provider stops being a config file. A settings page lets a person add the model servers they pay for — several of them, on either of the two protocols in the wild, Chat Completions or Responses — and the chat streams from whichever one a conversation was started on, blind to which protocol is on the wire. Keys are written once and never shown again.
You start in the folder where part one left off, or in an empty one and your streaming chat is fetched for you. The setup rung re-confirms it still runs and its tests still pass, so a campaign carried honestly builds on solid ground.
The shape
Two tasks: the setup that re-anchors the carried project, then the build you decide is done, scored by a judge panel against the brief's scenarios.
0
Public
Reinvent the Wheel
handmade-chatgpt-2-providers
1 h
~5 per session
No
25–100
- ai-chat
- llm
- web
- handmade-chatgpt
- campaign
1
Carry the project in and plan providers
+25 pts per passing check · +10 for completing the task
25
pts / check
+25 pts per passing check · +10 for completing the task
This part continues the Handmade ChatGPT you built before — its code is
carried into this folder. Setup only; the build is the next task.Confirm AGENTS.md still declares, each at the start of its own line:
stack: <language, framework, storage>
run:
test:They should already be there from the streaming chat you carried in. Make sure
run:still starts the product andtest:still runs a suite that passes —
a part carried honestly starts from working code.Then plan THIS part in TODO.md: add the steps for settings with the model providers you use, on either protocol, in
product terms, and check them off as they land. AGENTS.md and TODO.md are
read by every judge of this part as evidence of how you work.Judged by
The Debrief 2
Settings with providers
Open-ended — a panel of 4 judges splits a 100-pt budget
100
pt budget
Open-ended — a panel of 4 judges splits a 100-pt budget
The provider stops being a config file. A settings page lets a person add
the servers they pay for — several of them, on either of the two
protocols in the wild. You decide when it is done; a judge panel scores
the result.field meaning name how the person knows it: "OpenAI", "Local", … protocol Chat Completions ( POST <address>/chat/completions) orResponses ( POST <address>/responses), streamed either wayaddress the base URL, e.g. https://api.openai.com/v1 key the API key; may be empty for a local server Scenarios:
Scenario: A provider is added
When someone adds a provider in settings
Then it appears in the list with its name, protocol and address
And the key is never shown again — not in the list, not when editingScenario: Two protocols, one chat
Given one provider on Chat Completions and one on Responses
Then a conversation on either streams its replies the same way
And nothing on the chat page tells them apartScenario: A provider is changed
When someone edits the address or the key of a provider
Then the next message uses the new values
And when a provider is removed, its conversations stay, and say their provider is goneScenario: A provider that does not answer
When the address is wrong, or the key is refused
Then settings say so when the provider is saved or tested
And the chat says so when a message is sentEverything beyond the scenarios is yours: how settings are laid out, how
a provider is tested, which of them a new conversation uses.When you are done, write .ololo/chatgpt-providers-done.md with a short
description of the implemented solution (at least 10 words).