internal/registry/codex_client_models_updater.go
Rama main · réplica de lectura del repositorio original.
package registry
import (
"context"
log "github.com/sirupsen/logrus"
)
const maxCodexClientModelsSize = 8 << 20
var codexClientModelsURLs = []string{
"https://raw.githubusercontent.com/router-for-me/models/refs/heads/main/codex_client_models.json",
"https://models.router-for.me/codex_client_models.json",
}
// StartCodexClientModelsUpdater starts a background updater that fetches the
// Codex client model catalog immediately and then refreshes it every 3 hours.
// Safe to call multiple times; only one updater will run.
func StartCodexClientModelsUpdater(ctx context.Context) {
codexCatalogUpdater.configure(ctx, "")
}
func tryRefreshCodexClientModels(ctx context.Context, label string) {
data, sourceURL := fetchCodexClientModelsFromRemote(ctx)
if data == nil {
log.Warnf("%s: fetch failed from all URLs, keeping current data", label)
return
}
changed, err := loadCodexClientModelsFromBytes(data, sourceURL)
if err != nil {
log.Warnf("%s: fetched catalog rejected, keeping current data: %v", label, err)
return
}
if !changed {
log.Infof("%s completed from %s, no changes detected", label, sourceURL)
return
}
log.Infof("%s completed from %s, catalog updated", label, sourceURL)
}
func fetchCodexClientModelsFromRemote(ctx context.Context) ([]byte, string) {
for _, source := range codexClientModelsURLs {
data, errRead := readCatalogSource(ctx, source)
if errRead == nil && ValidateCodexClientModelsJSON(data) == nil {
return data, source
}
if ctx.Err() != nil {
break
}
}
return nil, ""
}