{{define "signup"}} Sign up · llmgw

Create an account

An operator approves it before it can be used.

{{if .Done}}

Thank you. Your account is waiting for approval.

You will not get an email from this gateway — it does not send any. Tell whoever you asked for access that you have signed up.

Sign in once you have been approved.

{{/* The same page whether or not the address already had an account, so it says what to do in either case without saying which this was. */}}

If this address already had an account, nothing new was made: sign in with it, or, if you have forgotten its password, ask an operator to reset it.

{{else}} {{if .Error}}

{{.Error}}

{{end}}

At least {{.MinPassword}} characters. Length is the only rule — a long phrase beats a short one with punctuation in it.

Already have an account? Sign in.

{{end}}
{{end}} {{define "login"}} Sign in · llmgw

Sign in

{{if .Error}}

{{.Error}}

{{end}}
{{if .SignupOpen}}

No account? Sign up.

{{end}}
{{end}} {{define "profile"}} Account · llmgw

Your account

{{.User.Email}}{{if ne .User.Name .User.Email}} ({{.User.Name}}){{end}}

{{template "nav" .Nav}}
{{if .Error}}

{{.Error}}

{{end}} {{if .NewKey}}

Your new key

This is shown once. Nothing can produce it again — only its hash is kept.

{{.NewKey}}

Put it in a password manager now.

curl {{.BaseURL}}/v1/chat/completions \
  -H "Authorization: Bearer {{.NewKey}}" \
  -H "Content-Type: application/json" \
  -d '{"model": "{{.ExampleModel}}", "messages": [{"role":"user","content":"hello"}]}'
{{end}} {{with .Connect}}

{{.ToolName}} is ready to connect

A key was made for it, shown this once — it is in everything below. Nothing can produce it again.

{{if .Command}}

One command

Writes the file below{{if eq .Tool "codex"}} into your Codex configuration{{end}}, keeping a copy of anything it replaces.

{{.Command}}
{{end}} {{range .Files}}

Or by hand: {{.Path}}

{{.Body}}
{{end}} {{if .Fields}}

Settings to fill in

{{range .Fields}} {{end}}
{{.Label}}{{.Value}}
{{end}}

Then

{{if eq .Tool "codex"}}{{.Run}}{{else}}{{.Run}}{{end}}

{{range .Notes}}

{{.}}

{{end}}
{{end}}

Connect your editor

A key of its own for the tool, and its configuration with the key, this gateway and a model already in it. Revoke the key below to disconnect it.

{{if .Contexts}}{{end}}

Create a key

{{if .Contexts}} {{else}}

You are in no project yet, and personal keys are off here. Ask an administrator to add you to one.

{{end}}

Keys

{{if .Keys}} {{range .Keys}}{{end}}
NameKeySpends againstCreatedLast usedState
{{.Name}} {{.Prefix}} {{if .ProjectID}}{{or (index $.Where .ProjectID) "a project you have left"}}{{else}}Personal{{end}} {{date .CreatedAt}} {{ago .LastUsedAt}} {{state .}} {{if eq (state .) "active"}}
{{end}}

Revoking takes effect within the gateway's cache window, up to a minute. To rotate: create the new key, switch over, wait for "last used" on the old one to stop moving, then revoke it.

{{else}}

You have no keys yet.

{{end}}

Where you are

{{if .Memberships}}

{{range $i, $m := .Memberships}}{{if $i}} · {{end}}{{$m.Path}} {{$m.Scope}}{{end}}

{{else}}

You are not a member of any organization, team or project.

{{end}}

Your use and limits

{{with .Own}}
{{compact .Requests}}
requests · 30 days
{{compact .Tokens}}
tokens · 30 days
{{.Spend}}
spend · 30 days
{{with .Chart}}

Tokens per day

{{.}}
{{end}} {{end}} {{range .LimitsBy}}

{{.Label}}{{with .Use}} — {{compact .Requests}} requests, {{compact .Tokens}} tokens in 30 days{{end}}

{{range .Budgets}}
{{.Label}}{{.Used}} of {{.Budget}} {{.Period}}
{{end}} {{if .Rows}} {{range .Rows}}{{end}}
LimitValue
{{.Name}}{{.Value}}
{{else}}

No limits here.

{{end}} {{else}}

Nowhere to spend yet.

{{end}}

Everything that applies, from the organization down to you: the strictest value wins.

Password

{{if .PasswordChanged}}

Your password was changed. Any other browser you were signed in on has been signed out.

{{end}} {{if .PasswordError}}

{{.PasswordError}}

{{end}}

Changing it signs out every other browser, which is the point if you are changing it because something went wrong.

{{end}}