qa1145 commited on
Commit
8f6e640
·
verified ·
1 Parent(s): eff2c28

Upload 9 files

Browse files
Files changed (1) hide show
  1. src/model_tester.py +31 -17
src/model_tester.py CHANGED
@@ -181,11 +181,13 @@ class ModelTester:
181
  keyword: str,
182
  api_key: str
183
  ) -> Optional[Dict[str, Any]]:
184
- available = self.get_available_models()
185
  available_free = self.get_available_models(free_only=True)
 
186
 
187
  candidates = []
188
 
 
189
  if available_free:
190
  if keyword:
191
  matched = [m for m in available_free if keyword.lower() in m.lower()]
@@ -194,23 +196,35 @@ class ModelTester:
194
  if not candidates:
195
  candidates.extend([(m, "free_random") for m in available_free[:10]])
196
 
197
- if available:
198
- if keyword:
199
- matched = [m for m in available if keyword.lower() in m.lower()]
200
- if matched:
201
- candidates.extend([(m, "matched") for m in matched])
202
- if not any(c[1].startswith("free") for c in candidates):
203
- if available_free:
204
- candidates.extend([(m, "free_fallback") for m in available_free[:5]])
205
- else:
206
- candidates.extend([(m, "random") for m in available[:10]])
 
 
207
 
208
- for model_id, match_type in candidates:
209
- full_model = f"{model_id}:free" if ":free" not in model_id else model_id
210
- result = await self.try_model_direct(session, full_model, api_key)
211
- if result and result.get("success"):
212
- result["method"] = f"list_{match_type}"
213
- return result
 
 
 
 
 
 
 
 
 
 
214
 
215
  return {
216
  "success": False,
 
181
  keyword: str,
182
  api_key: str
183
  ) -> Optional[Dict[str, Any]]:
184
+ # 如果没有预扫描的列表,直接从API获取
185
  available_free = self.get_available_models(free_only=True)
186
+ available = self.get_available_models()
187
 
188
  candidates = []
189
 
190
+ # 优先 free 模型
191
  if available_free:
192
  if keyword:
193
  matched = [m for m in available_free if keyword.lower() in m.lower()]
 
196
  if not candidates:
197
  candidates.extend([(m, "free_random") for m in available_free[:10]])
198
 
199
+ # 如果没有 free,添加付费模型
200
+ if not candidates and available:
201
+ candidates.extend([(m, "paid") for m in available[:10]])
202
+
203
+ # 如果还是没有候选,实时从API获取
204
+ if not candidates:
205
+ try:
206
+ _, free_models = self.refresh_model_list()
207
+ if free_models:
208
+ candidates.extend([(m, "free_api") for m in free_models[:20]])
209
+ except:
210
+ pass
211
 
212
+ # 并发尝试所有候选模型
213
+ if candidates:
214
+ semaphore = asyncio.Semaphore(5)
215
+
216
+ async def try_one(model_id, match_type):
217
+ async with semaphore:
218
+ full_model = f"{model_id}:free" if ":free" not in model_id else model_id
219
+ return await self.try_model_direct(session, full_model, api_key)
220
+
221
+ tasks = [try_one(m, t) for m, t in candidates]
222
+ results = await asyncio.gather(*tasks, return_exceptions=True)
223
+
224
+ for i, result in enumerate(results):
225
+ if isinstance(result, dict) and result.get("success"):
226
+ result["method"] = f"list_{candidates[i][1]}"
227
+ return result
228
 
229
  return {
230
  "success": False,