models.spec.ts 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import { describe, expect, it } from 'vitest'
  2. import { MODEL_DIMENSIONS } from '../src/model-dimensions'
  3. import { dimensionGuidance, knownDimensions, shouldSendDimensions } from '../src/models'
  4. describe('常用模型维度表', () => {
  5. it('名称唯一、维度合法,每项有来源和核对日期', () => {
  6. const names = new Set<string>()
  7. for (const model of MODEL_DIMENSIONS) {
  8. for (const name of [model.id, ...model.aliases]) {
  9. expect(names.has(name.toLowerCase()), name).toBe(false); names.add(name.toLowerCase())
  10. }
  11. expect(model.options).toContain(model.defaultDimension)
  12. expect(new Set(model.options).size).toBe(model.options.length)
  13. for (const value of model.options) {
  14. expect(Number.isInteger(value) && value > 0 && value <= 65_536).toBe(true)
  15. if (model.range) { expect(value).toBeGreaterThanOrEqual(model.range[0]); expect(value).toBeLessThanOrEqual(model.range[1]) }
  16. }
  17. if (model.kind === 'fixed') expect(model.options).toEqual([model.defaultDimension])
  18. expect(new URL(model.source.url).protocol).toBe('https:')
  19. expect(model.source.checkedOn).toMatch(/^\d{4}-\d{2}-\d{2}$/)
  20. }
  21. })
  22. it('识别明确别名,不猜测微调和新版本', () => {
  23. expect(knownDimensions(' qwen/qwen3-embedding-4b ')?.defaultDimension).toBe(2560)
  24. expect(knownDimensions('Qwen3-Embedding-8B')?.defaultDimension).toBe(4096)
  25. expect(knownDimensions('models/gemini-embedding-001')?.defaultDimension).toBe(3072)
  26. for (const id of ['my-org/Qwen3-Embedding-8B', 'Qwen/Qwen3-Embedding-8B-GGUF', 'jina-embeddings-v30', 'text-embedding-3-small-custom', '']) expect(knownDimensions(id)).toBeUndefined()
  27. })
  28. it('接口覆盖表,缺少默认值时不猜接口列表外的值', () => {
  29. expect(dimensionGuidance('Qwen3-Embedding-8B', { id: 'Qwen3-Embedding-8B', dimensions: [1024, 512], defaultDimension: 512 })).toMatchObject({ source: 'api', defaultDimension: 512, options: [512, 1024] })
  30. expect(dimensionGuidance('Qwen3-Embedding-8B', { id: 'Qwen3-Embedding-8B', dimensions: [1024, 512] }).defaultDimension).toBeUndefined()
  31. expect(dimensionGuidance('Qwen3-Embedding-8B', { id: 'Qwen3-Embedding-8B', defaultDimension: 2048 })).toMatchObject({ source: 'api', defaultDimension: 2048, options: [2048] })
  32. })
  33. it('元数据缺席用表,未知模型留空', () => {
  34. expect(dimensionGuidance('bge-m3', { id: 'bge-m3' })).toMatchObject({ source: 'catalog', defaultDimension: 1024, options: [1024] })
  35. expect(dimensionGuidance('private-model')).toMatchObject({ source: 'unknown', defaultDimension: undefined, options: [] })
  36. })
  37. it('模型支持缩短不代表托管服务默认接受参数', () => {
  38. expect(shouldSendDimensions('Qwen3-Embedding-8B', 4096)).toBe(false)
  39. expect(shouldSendDimensions('Qwen3-Embedding-8B', 1024)).toBe(true)
  40. expect(shouldSendDimensions('bge-m3', 1024)).toBe(false)
  41. expect(shouldSendDimensions('text-embedding-3-large', 3072)).toBe(true)
  42. expect(shouldSendDimensions('text-embedding-ada-002', 1536)).toBe(false)
  43. })
  44. })