A user copied the curl from the profile page and sent it as it stood. Every other field in that snippet is filled in for them — the base URL, the key they had just been issued — so "model": "MODEL" reads as a value rather than a blank, and they got: no endpoint serves "MODEL" which is true and useless. It reads the same whether the name was a typo, a placeholder left in from the documentation, or a real outage, and it never says what would have worked. The message now lists what is being served, capped at ten with a count for the rest, and says plainly when nothing is. That list is what /v1/models already returns to the same caller, so it discloses nothing new. The profile page's example now names a model that is actually running, real ones before simulated — the point of an example someone can run is that it runs, and sending a first request to the sim engine would answer in Greek letters. The landing and claim pages keep a placeholder, because they are served without a key and deliberately say nothing about what is here; theirs is <model-name>, which cannot be mistaken for a value, with a line saying where to get the real one. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
49 lines
1.8 KiB
HTML
49 lines
1.8 KiB
HTML
{{define "claim"}}<!doctype html>
|
|
<html lang="en"><head>
|
|
<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
|
|
<meta name="robots" content="noindex, nofollow">
|
|
<title>Your llmgw key</title><link rel="stylesheet" href="/_static/base.css">
|
|
</head><body><div class="wrap">
|
|
<header>
|
|
<h1>Your API key</h1>
|
|
<p class="sub">llmgw · {{.BaseURL}}</p>
|
|
</header>
|
|
|
|
{{if .Secret}}
|
|
<p>This is shown once. Nothing can produce it again — only its hash was kept.</p>
|
|
<pre>{{.Secret}}</pre>
|
|
<p>Store it in a password manager now, then close this page.</p>
|
|
|
|
<h2>Using it</h2>
|
|
<pre>export LLMGW_API_KEY={{.Secret}}
|
|
|
|
curl {{.BaseURL}}/v1/chat/completions \
|
|
-H "Authorization: Bearer $LLMGW_API_KEY" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"model": "<model-name>", "messages": [{"role":"user","content":"hello"}]}'</pre>
|
|
<p class="note">
|
|
Replace <model-name> with a name from
|
|
<code>GET {{.BaseURL}}/v1/models</code>, which needs your key. Sending the
|
|
placeholder unchanged is answered with the list of models that are available.
|
|
</p>
|
|
<pre>from openai import OpenAI
|
|
client = OpenAI(base_url="{{.BaseURL}}/v1", api_key=os.environ["LLMGW_API_KEY"])</pre>
|
|
<p class="note"><code>GET {{.BaseURL}}/v1/models</code> lists what this key may use.
|
|
<code>GET {{.BaseURL}}/me</code> shows its limits and what it has spent.</p>
|
|
|
|
{{else if .Gone}}
|
|
<p>{{.Message}}</p>
|
|
<p class="note">A link works once and then expires. Ask whoever sent it for a new one.</p>
|
|
|
|
{{else}}
|
|
<p>A key was issued for you. Revealing it uses up this link, and the key is
|
|
shown only this once.</p>
|
|
<form method="post">
|
|
<button type="submit">Reveal my key</button>
|
|
</form>
|
|
<p class="note">Expires {{.ExpiresAt}}.</p>
|
|
{{end}}
|
|
|
|
<footer><span>llmgw {{.Version}}</span><span>{{.Now}}</span></footer>
|
|
</div></body></html>{{end}}
|