fix_resolve.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import re
  2. PATH = '/data/ai/audio/server/dist/services/llm/index.js'
  3. with open(PATH, 'r', encoding='utf-8') as f:
  4. src = f.read()
  5. # 替换 resolveProviderKey:vendor + apiKey 指纹
  6. OLD = """function resolveProviderKey(modelId) {
  7. const cfg = config_1.config.models.getModel?.(modelId);
  8. if (cfg?.vendor)
  9. return cfg.vendor;
  10. // fallback: 从 registry 查找
  11. const registry = (0, provider_registry_1.getLlmRegistry)();
  12. for (const node of registry.listEnabled()) {
  13. if (node.provider.hasModel(modelId))
  14. return node.provider.vendor;
  15. }
  16. return modelId;
  17. }"""
  18. NEW = """function resolveProviderKey(modelId) {
  19. const cfg = config_1.config.models.getModel?.(modelId);
  20. if (cfg?.vendor) {
  21. // 关键: 用 vendor+apiKey 指纹区分同一个 vendor 的不同 key (例如 minimax Key1 vs Key2)
  22. // 这样 fallback 不会把两个独立 key 当成同一个 provider 转一圈就停
  23. if (cfg.apiKey) {
  24. return cfg.vendor + ':' + cfg.apiKey.slice(-12);
  25. }
  26. return cfg.vendor;
  27. }
  28. // fallback: 从 registry 查找
  29. const registry = (0, provider_registry_1.getLlmRegistry)();
  30. for (const node of registry.listEnabled()) {
  31. if (node.provider.hasModel(modelId))
  32. return node.provider.vendor;
  33. }
  34. return modelId;
  35. }"""
  36. if OLD not in src:
  37. print("ERROR: OLD not found")
  38. raise SystemExit(1)
  39. src = src.replace(OLD, NEW)
  40. with open(PATH, 'w', encoding='utf-8') as f:
  41. f.write(src)
  42. print("OK: resolveProviderKey patched")