deploy_models.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. """Download deployment assets, never model code; run with the locked project venv."""
  2. import argparse
  3. import json
  4. from pathlib import Path
  5. ROOT = Path(__file__).resolve().parents[1]
  6. def bge_valid(path):
  7. try:
  8. config = json.loads((path / 'config.json').read_text(encoding='utf-8'))
  9. if config.get('model_type') != 'bert' or config.get('hidden_size') != 1024:
  10. return False
  11. from transformers import AutoModel, AutoTokenizer
  12. AutoTokenizer.from_pretrained(path, local_files_only=True, trust_remote_code=False)
  13. model = AutoModel.from_pretrained(path, local_files_only=True, trust_remote_code=False)
  14. del model
  15. return True
  16. except Exception:
  17. return False
  18. def tokenizer_valid(path):
  19. try:
  20. from tokenizers import Tokenizer
  21. Tokenizer.from_file(str(path))
  22. return True
  23. except Exception:
  24. return False
  25. def download(check_only=False):
  26. from huggingface_hub import snapshot_download, hf_hub_download
  27. model = ROOT / 'models/bge-large-zh-v1.5'
  28. tokenizer = ROOT / 'models/deepseek-tokenizer/tokenizer.json'
  29. model_ready = bge_valid(model)
  30. if check_only:
  31. if not model_ready or not tokenizer_valid(tokenizer):
  32. raise ValueError('active_service_model_assets_invalid_stop_before_repair')
  33. print('Existing model assets validated without modification.', flush=True)
  34. return
  35. if not model_ready:
  36. snapshot_download('BAAI/bge-large-zh-v1.5', local_dir=model,
  37. allow_patterns=['config.json', 'tokenizer.json', 'tokenizer_config.json',
  38. 'special_tokens_map.json', 'vocab.txt', 'pytorch_model.bin'])
  39. model_ready = bge_valid(model)
  40. if not model_ready:
  41. raise ValueError('bge_model_validation_failed')
  42. if not tokenizer_valid(tokenizer):
  43. hf_hub_download('deepseek-ai/DeepSeek-V3', 'tokenizer.json', local_dir=tokenizer.parent)
  44. if not tokenizer_valid(tokenizer):
  45. raise ValueError('summary_tokenizer_validation_failed')
  46. print('BGE model and summary tokenizer ready.', flush=True)
  47. if __name__ == '__main__':
  48. parser = argparse.ArgumentParser(description=__doc__)
  49. parser.add_argument('--check-only', action='store_true')
  50. args = parser.parse_args()
  51. try:
  52. download(args.check_only)
  53. except Exception as exc:
  54. print('model_download_failed:' + type(exc).__name__)
  55. raise SystemExit(1) from None