Eliot0110 commited on
Commit
a4da6d3
·
1 Parent(s): 8bacbbf

fix: 修复缓存权限和根路径404问题

Browse files
Files changed (1) hide show
  1. modules/ai_model.py +44 -14
modules/ai_model.py CHANGED
@@ -15,6 +15,9 @@ class AIModel:
15
  self.model_name = model_name
16
  self.model = None
17
  self.processor = None
 
 
 
18
  self._initialize_model()
19
 
20
  def _setup_cache_dirs(self):
@@ -30,43 +33,70 @@ class AIModel:
30
  log.info(f"设置缓存目录: {cache_dir}")
31
 
32
  def _authenticate_hf(self):
 
33
  try:
34
- # 从环境变量获取HF token
35
- hf_token = os.getenv("Assitant_tocken")
 
 
 
 
 
 
 
 
 
 
36
 
37
- if hf_token:
 
 
 
38
  cache_dir = "/app/.cache/huggingface"
39
- login(token=hf_token, add_to_git_credential=False)
40
  log.info("✅ HuggingFace 认证成功")
 
41
  else:
42
- log.warning("⚠️ 未找到 HuggingFace token,可能无法访问受限模型")
 
43
 
44
  except Exception as e:
45
  log.error(f"❌ HuggingFace 认证失败: {e}")
46
-
47
 
48
  def _initialize_model(self):
49
- """初始化Gemma模型 - 基于官方调用方式"""
50
  try:
51
  log.info(f"正在加载模型: {self.model_name}")
52
-
53
- hf_token = self._authenticate_hf()
54
-
 
 
 
 
 
 
 
 
55
  cache_dir = "/app/.cache/huggingface"
56
 
57
  self.model = Gemma3nForConditionalGeneration.from_pretrained(
58
  self.model_name,
59
  device_map="auto",
60
  torch_dtype=torch.bfloat16,
61
- cache_dir=cache_dir,
62
- trust_remote_code=True
 
 
63
  ).eval()
64
 
65
  self.processor = AutoProcessor.from_pretrained(
66
  self.model_name,
67
  trust_remote_code=True,
68
- cache_dir=cache_dir,
69
- tocken=hf_token
 
70
  )
71
 
72
  log.info("✅ Gemma AI 模型初始化成功")
 
15
  self.model_name = model_name
16
  self.model = None
17
  self.processor = None
18
+
19
+ # 设置缓存目录
20
+ self._setup_cache_dirs()
21
  self._initialize_model()
22
 
23
  def _setup_cache_dirs(self):
 
33
  log.info(f"设置缓存目录: {cache_dir}")
34
 
35
  def _authenticate_hf(self):
36
+ """HuggingFace认证"""
37
  try:
38
+ # 检查所有可能的环境变量
39
+ assitant_token = os.getenv("Assitant_tocken")
40
+ hf_token = os.getenv("HUGGINGFACE_HUB_TOKEN")
41
+ hf_token_alt = os.getenv("HF_TOKEN")
42
+
43
+ log.info("=== 环境变量调试 ===")
44
+ log.info(f"Assitant_tocken: {'存在' if assitant_token else '不存在'}")
45
+ log.info(f"HUGGINGFACE_HUB_TOKEN: {'存在' if hf_token else '不存在'}")
46
+ log.info(f"HF_TOKEN: {'存在' if hf_token_alt else '不存在'}")
47
+
48
+ # 使用找到的token
49
+ token_to_use = assitant_token or hf_token or hf_token_alt
50
 
51
+ if token_to_use:
52
+ log.info(f"使用token: {token_to_use[:10]}...")
53
+
54
+ # 设置缓存目录用于认证
55
  cache_dir = "/app/.cache/huggingface"
56
+ login(token=token_to_use, add_to_git_credential=False)
57
  log.info("✅ HuggingFace 认证成功")
58
+ return token_to_use
59
  else:
60
+ log.error(" 未找到任何有效的 HuggingFace token")
61
+ return None
62
 
63
  except Exception as e:
64
  log.error(f"❌ HuggingFace 认证失败: {e}")
65
+ return None
66
 
67
  def _initialize_model(self):
68
+ """初始化Gemma模型"""
69
  try:
70
  log.info(f"正在加载模型: {self.model_name}")
71
+
72
+ # 先进行认证并获取token
73
+ token = self._authenticate_hf()
74
+
75
+ if not token:
76
+ log.error("❌ 无法获取有效token,模型加载失败")
77
+ self.model = None
78
+ self.processor = None
79
+ return
80
+
81
+ # 设置缓存目录
82
  cache_dir = "/app/.cache/huggingface"
83
 
84
  self.model = Gemma3nForConditionalGeneration.from_pretrained(
85
  self.model_name,
86
  device_map="auto",
87
  torch_dtype=torch.bfloat16,
88
+ trust_remote_code=True,
89
+ token=token,
90
+ cache_dir=cache_dir, # 明确指定缓存目录
91
+ use_auth_token=token
92
  ).eval()
93
 
94
  self.processor = AutoProcessor.from_pretrained(
95
  self.model_name,
96
  trust_remote_code=True,
97
+ token=token,
98
+ cache_dir=cache_dir, # 明确指定缓存目录
99
+ use_auth_token=token
100
  )
101
 
102
  log.info("✅ Gemma AI 模型初始化成功")