model-normalization.ts 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. export const MODEL_AUTHOR_RULES = [
  2. { match: "claude", author: "anthropic" },
  3. { match: "gemini", author: "google" },
  4. { match: "deepseek", author: "deepseek" },
  5. { match: "glm", author: "zhipu" },
  6. { match: "gpt", author: "openai" },
  7. { match: "grok", author: "xai" },
  8. { match: "hy3", author: "tencent" },
  9. { match: "kimi", author: "moonshot" },
  10. { match: "mimo", author: "xiaomi" },
  11. { match: "minimax", author: "minimax" },
  12. { match: "nemotron", author: "nvidia" },
  13. { match: "qwen", author: "qwen" },
  14. ] as const
  15. export const EXCLUDED_MODELS = new Set(["alpha-gpt-next"])
  16. export const RETIRED_STAT_MODELS = ["big-pickle"]
  17. export const RETIRED_STAT_PROVIDERS = ["opencode"]
  18. export function normalizeInferenceModel(value: string | undefined) {
  19. return (value || "unknown").replace(/(-free|:global)+$/, "") || "unknown"
  20. }
  21. export function modelAuthor(value: string | undefined) {
  22. const model = normalizeInferenceModel(value).toLowerCase()
  23. if (EXCLUDED_MODELS.has(model)) return undefined
  24. return MODEL_AUTHOR_RULES.find((item) => model.includes(item.match))?.author ?? "unknown"
  25. }
  26. export function statModel(model: string | undefined, providerModel: string | undefined) {
  27. const normalized = normalizeInferenceModel(model)
  28. if (RETIRED_STAT_MODELS.includes(normalized.toLowerCase())) return normalizeInferenceModel(providerModel)
  29. return normalized
  30. }
  31. export function statProvider(
  32. model: string | undefined,
  33. providerModel: string | undefined,
  34. provider: string | undefined,
  35. ) {
  36. const modelAuthorValue = modelAuthor(statModel(model, providerModel))
  37. if (!modelAuthorValue) return undefined
  38. const providerModelAuthor = modelAuthor(providerModel)
  39. if (providerModelAuthor && providerModelAuthor !== "unknown") return providerModelAuthor
  40. if (modelAuthorValue !== "unknown") return modelAuthorValue
  41. if (provider && !RETIRED_STAT_PROVIDERS.includes(provider.toLowerCase())) return provider
  42. return modelAuthorValue
  43. }