Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
85 changes: 85 additions & 0 deletions detection/toolmention/generate.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
//go:build ignore

package main

import (
"encoding/json"
"fmt"
"io"
"log"
"net/http"
"os"
"regexp"
"sort"
"strings"
)

type OpenRouterResponse struct {
Data []struct {
ID string `json:"id"`
Name string `json:"name"`
} `json:"data"`
}

func main() {
resp, err := http.Get("https://openrouter.ai/api/v1/models")
if err != nil {
log.Fatalf("failed to fetch models: %v", err)
}
defer resp.Body.Close()

body, err := io.ReadAll(resp.Body)
if err != nil {
log.Fatalf("failed to read response: %v", err)
}

var result OpenRouterResponse
if err := json.Unmarshal(body, &result); err != nil {
log.Fatalf("failed to parse json: %v", err)
}

var models []string
seen := make(map[string]bool)

for _, item := range result.Data {
// ID usually looks like "anthropic/claude-3-opus"
idParts := strings.Split(item.ID, "/")
if len(idParts) == 2 {
modelID := idParts[1]
if !seen[modelID] {
models = append(models, modelID)
seen[modelID] = true
}
}

name := item.Name
nameParts := strings.SplitN(name, ": ", 2)
if len(nameParts) == 2 {
name = nameParts[1]
}
// remove "(free)", "(Fast)", etc.
name = regexp.MustCompile(`\s*\(.*?\)`).ReplaceAllString(name, "")
name = strings.TrimSpace(name)
if name != "" && !seen[name] {
models = append(models, name)
seen[name] = true
}
}

sort.Strings(models)

out, err := os.Create("models.go")
if err != nil {
log.Fatalf("failed to create models.go: %v", err)
}
defer out.Close()

fmt.Fprintln(out, "// Code generated by generate.go; DO NOT EDIT.")
fmt.Fprintln(out, "package toolmention")
fmt.Fprintln(out, "")
fmt.Fprintln(out, "var generatedModels = []string{")
for _, m := range models {
fmt.Fprintf(out, "\t%q,\n", m)
}
fmt.Fprintln(out, "}")
}
Loading
Loading