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.

Sessions

0

Visibility

Public

Category

Reinvent the Wheel

Slug

handmade-chatgpt-2-providers

Duration

1 h

Judge reviews

~5 per session

Active session

No

Points

25–100

Tags
  • ai-chat
  • llm
  • web
  • handmade-chatgpt
  • campaign
  • 1

    Carry the project in and plan providers

    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 and test: 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
  • 2

    Settings with providers

    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) or
    Responses (POST <address>/responses), streamed either way
    address 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 editing

    Scenario: 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 apart

    Scenario: 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 gone

    Scenario: 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 sent

    Everything 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).