package adminapi
import (
"context"
"encoding/json"
"fmt"
"html/template"
"net/http"
"net/url"
"strconv"
"strings"
"time"
"aigw/internal/controlplane"
)
type publicModelExample struct {
Name string
Endpoint string
Code string
}
type publicModelPageData struct {
Model controlplane.PublicModel
Title string
Description string
CanonicalURL string
CatalogURL string
SignInURL string
RegistrationURL string
RegistrationEnabled bool
CSSURL string
HealthLabel string
HealthClass string
InputPrice string
OutputPrice string
CacheReadPrice string
ContextWindow string
MaxOutputTokens string
ReleasedAt string
Tags []string
Examples []publicModelExample
}
var publicModelTemplate = template.Must(template.New("public-model").Parse(`
Back to models
{{.Description}}
{{range .Tags}}{{.}}{{end}}
Model details
- Input price
- {{.InputPrice}} / 1M tokens
- Output price
- {{.OutputPrice}} / 1M tokens
- Cached input
- {{.CacheReadPrice}} / 1M tokens
- Context window
- {{.ContextWindow}} tokens
- Max output
- {{.MaxOutputTokens}} tokens
- Regions
- {{if .Model.Regions}}{{range $index,$region := .Model.Regions}}{{if $index}}, {{end}}{{$region}}{{end}}{{else}}Global{{end}}
- Released
- {{.ReleasedAt}}
- Lifecycle
- {{.Model.Lifecycle}}
SUPPORTED APIS
Code examples
{{range .Examples}}
{{.Code}}
{{end}}
`))
func (a *API) findPublicModel(ctx context.Context, wanted string) (controlplane.PublicModel, bool, error) {
models, err := a.store.ListPublicModels(ctx)
if err != nil {
return controlplane.PublicModel{}, false, err
}
a.addPublicModelHealth(models)
for _, item := range models {
if item.PublicID == wanted {
return item, true, nil
}
}
return controlplane.PublicModel{}, false, nil
}
func (a *API) publicModelPage(w http.ResponseWriter, r *http.Request) {
wanted := strings.Trim(strings.TrimSpace(r.PathValue("id")), "/")
model, found, err := a.findPublicModel(r.Context(), wanted)
if err != nil {
a.logger.Error("public_model_page_failed", "error", err)
http.Error(w, "Model catalog unavailable", http.StatusServiceUnavailable)
return
}
if !found {
http.NotFound(w, r)
return
}
data := buildPublicModelPageData(model, a.publicURL, a.inferencePublicURL, a.prefix, a.registrationEnabled)
w.Header().Set("Content-Type", "text/html; charset=utf-8")
w.Header().Set("Cache-Control", "public, max-age=30, stale-while-revalidate=120")
if err := publicModelTemplate.Execute(w, data); err != nil {
a.logger.Error("render_public_model_page_failed", "model", model.PublicID, "error", err)
}
}
func buildPublicModelPageData(model controlplane.PublicModel, publicURL, inferenceBase, prefix string, registrationEnabled bool) publicModelPageData {
canonicalBase := strings.TrimRight(publicURL, "/")
pathBase := strings.TrimRight(prefix, "/")
if pathBase == "" {
pathBase = "/admin"
}
if canonicalBase == "" {
canonicalBase = pathBase
}
pathID := escapeModelPath(model.PublicID)
canonical := canonicalBase + "/models/" + pathID
description := strings.TrimSpace(model.Description)
if description == "" {
description = fmt.Sprintf("Use %s through the AIGW unified API.", model.PublicID)
}
tags := append([]string(nil), model.Capabilities...)
tags = append(tags, model.InputModalities...)
for _, wireAPI := range model.SupportedWireAPIs {
tags = append(tags, protocolLabel(wireAPI))
}
healthLabel, healthClass := publicHealthLabel(model)
return publicModelPageData{
Model: model, Title: model.DisplayName + " API, pricing, and context | AIGW", Description: description,
CanonicalURL: canonical, CatalogURL: pathBase + "/models", SignInURL: pathBase + "/",
RegistrationURL: pathBase + "/?auth=register&model=" + url.QueryEscape(model.PublicID), RegistrationEnabled: registrationEnabled,
CSSURL: pathBase + "/models.css", HealthLabel: healthLabel, HealthClass: healthClass,
InputPrice: formatMicros(model.InputPriceMicrosPerMillion, model.PriceCurrency),
OutputPrice: formatMicros(model.OutputPriceMicrosPerMillion, model.PriceCurrency),
CacheReadPrice: formatMicros(model.CacheReadPriceMicrosPerMillion, model.PriceCurrency),
ContextWindow: formatInteger(model.ContextWindow), MaxOutputTokens: formatInteger(model.MaxOutputTokens),
ReleasedAt: formatPublicDate(model.ReleasedAt), Tags: uniquePageStrings(tags),
Examples: publicModelExamples(model, inferenceBase),
}
}
func publicModelExamples(model controlplane.PublicModel, inferenceBase string) []publicModelExample {
base := strings.TrimRight(inferenceBase, "/")
if base == "" {
base = "https://api.example.com"
}
modelJSON, _ := json.Marshal(model.PublicID)
result := make([]publicModelExample, 0, len(model.SupportedWireAPIs))
for _, wireAPI := range model.SupportedWireAPIs {
var endpoint, code string
switch wireAPI {
case "chat_completions":
endpoint = "/v1/chat/completions"
code = fmt.Sprintf("curl %s%s \\\n -H 'Authorization: Bearer $AIGW_API_KEY' \\\n -H 'Content-Type: application/json' \\\n -d '{\"model\":%s,\"messages\":[{\"role\":\"user\",\"content\":\"Hello\"}]}'", base, endpoint, modelJSON)
case "responses":
endpoint = "/v1/responses"
code = fmt.Sprintf("curl %s%s \\\n -H 'Authorization: Bearer $AIGW_API_KEY' \\\n -H 'Content-Type: application/json' \\\n -d '{\"model\":%s,\"input\":\"Hello\"}'", base, endpoint, modelJSON)
case "embeddings":
endpoint = "/v1/embeddings"
code = fmt.Sprintf("curl %s%s \\\n -H 'Authorization: Bearer $AIGW_API_KEY' \\\n -H 'Content-Type: application/json' \\\n -d '{\"model\":%s,\"input\":[\"Text to embed\"]}'", base, endpoint, modelJSON)
case "messages":
endpoint = "/anthropic/v1/messages"
code = fmt.Sprintf("curl %s%s \\\n -H 'x-api-key: $AIGW_API_KEY' \\\n -H 'anthropic-version: 2023-06-01' \\\n -H 'Content-Type: application/json' \\\n -d '{\"model\":%s,\"max_tokens\":256,\"messages\":[{\"role\":\"user\",\"content\":\"Hello\"}]}'", base, endpoint, modelJSON)
default:
continue
}
result = append(result, publicModelExample{Name: protocolLabel(wireAPI), Endpoint: endpoint, Code: code})
}
return result
}
func escapeModelPath(publicID string) string {
parts := strings.Split(strings.Trim(publicID, "/"), "/")
for index := range parts {
parts[index] = url.PathEscape(parts[index])
}
return strings.Join(parts, "/")
}
func publicHealthLabel(model controlplane.PublicModel) (string, string) {
switch model.HealthStatus {
case "unavailable":
return "Unavailable", "unavailable"
case "degraded":
return fmt.Sprintf("%d/%d routes", model.AvailableProviderCount, model.ProviderCount), "degraded"
default:
return "Available", "available"
}
}
func protocolLabel(value string) string {
switch value {
case "chat_completions":
return "Chat Completions"
case "responses":
return "Responses"
case "embeddings":
return "Embeddings"
case "messages":
return "Anthropic Messages"
default:
return value
}
}
func formatMicros(value int64, currency string) string {
amount := strconv.FormatFloat(float64(value)/1_000_000, 'f', 6, 64)
amount = strings.TrimRight(strings.TrimRight(amount, "0"), ".")
if amount == "" {
amount = "0"
}
return strings.ToUpper(currency) + " " + amount
}
func formatInteger(value int64) string {
raw := strconv.FormatInt(value, 10)
for index := len(raw) - 3; index > 0; index -= 3 {
raw = raw[:index] + "," + raw[index:]
}
return raw
}
func formatPublicDate(value *time.Time) string {
if value == nil {
return "Not published"
}
return value.UTC().Format("2 Jan 2006")
}
func uniquePageStrings(values []string) []string {
seen := make(map[string]struct{}, len(values))
result := make([]string, 0, len(values))
for _, value := range values {
value = strings.TrimSpace(value)
if value == "" {
continue
}
if _, exists := seen[value]; exists {
continue
}
seen[value] = struct{}{}
result = append(result, value)
}
return result
}