model-normalization.ts 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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 function normalizeInferenceModel(value: string | undefined) {
  17. return (value || "unknown").replace(/(-free|:global)+$/, "") || "unknown"
  18. }
  19. export function modelAuthor(value: string | undefined) {
  20. const model = normalizeInferenceModel(value).toLowerCase()
  21. if (EXCLUDED_MODELS.has(model)) return undefined
  22. return MODEL_AUTHOR_RULES.find((item) => model.includes(item.match))?.author ?? "unknown"
  23. }
  24. export function statModel(model: string | undefined, providerModel: string | undefined) {
  25. const normalized = normalizeInferenceModel(model)
  26. if (normalized.toLowerCase() === "big-pickle") return normalizeInferenceModel(providerModel)
  27. return normalized
  28. }
  29. export function statProvider(
  30. model: string | undefined,
  31. providerModel: string | undefined,
  32. provider: string | undefined,
  33. ) {
  34. const modelAuthorValue = modelAuthor(statModel(model, providerModel))
  35. if (!modelAuthorValue) return undefined
  36. const providerModelAuthor = modelAuthor(providerModel)
  37. if (providerModelAuthor && providerModelAuthor !== "unknown") return providerModelAuthor
  38. if (modelAuthorValue !== "unknown") return modelAuthorValue
  39. if (provider && provider.toLowerCase() !== "opencode") return provider
  40. return modelAuthorValue
  41. }