当前服务使用的上游适配器。
| 361 | |
| 362 | |
| 363 | class UpstreamClient: |
| 364 | """当前服务使用的上游适配器。""" |
| 365 | |
| 366 | def __init__(self): |
| 367 | self.name = "upstream" |
| 368 | self.logger = logger |
| 369 | self.api_endpoint = settings.API_ENDPOINT |
| 370 | |
| 371 | # 当前上游特定配置 |
| 372 | self.base_url = DEFAULT_ZAI_BASE_URL |
| 373 | self.auth_url = f"{self.base_url}/api/v1/auths/" |
| 374 | |
| 375 | # 模型映射 |
| 376 | self.model_mapping = { |
| 377 | settings.GLM45_MODEL: "0727-360B-API", # GLM-4.5 |
| 378 | settings.GLM45_THINKING_MODEL: "0727-360B-API", # GLM-4.5-Thinking |
| 379 | settings.GLM45_SEARCH_MODEL: "0727-360B-API", # GLM-4.5-Search |
| 380 | settings.GLM45_AIR_MODEL: "0727-106B-API", # GLM-4.5-Air |
| 381 | settings.GLM46V_MODEL: "glm-4.6v", # GLM-4.6V多模态 |
| 382 | settings.GLM5_MODEL: "glm-5", # GLM-5 |
| 383 | settings.GLM47_MODEL: "glm-4.7", # GLM-4.7 |
| 384 | settings.GLM47_THINKING_MODEL: "glm-4.7", # GLM-4.7-Thinking |
| 385 | settings.GLM47_SEARCH_MODEL: "glm-4.7", # GLM-4.7-Search |
| 386 | settings.GLM47_ADVANCED_SEARCH_MODEL: "glm-4.7", # GLM-4.7-advanced-search |
| 387 | } |
| 388 | |
| 389 | def _get_guest_retry_limit(self) -> int: |
| 390 | """匿名号池可提供的最大重试预算。""" |
| 391 | if not settings.ANONYMOUS_MODE: |
| 392 | return 0 |
| 393 | |
| 394 | guest_pool = get_guest_session_pool() |
| 395 | if not guest_pool: |
| 396 | return max(2, settings.GUEST_POOL_SIZE + 1) |
| 397 | |
| 398 | pool_status = guest_pool.get_pool_status() |
| 399 | available_sessions = int( |
| 400 | pool_status.get("valid_sessions") |
| 401 | or pool_status.get("available_sessions") |
| 402 | or 0 |
| 403 | ) |
| 404 | return max(2, available_sessions + 1) |
| 405 | |
| 406 | def _get_authenticated_retry_limit(self) -> int: |
| 407 | """认证号池与静态 Token 可提供的最大重试预算。""" |
| 408 | available_tokens = 0 |
| 409 | token_pool = get_token_pool() |
| 410 | if token_pool: |
| 411 | available_tokens = int( |
| 412 | token_pool.get_pool_status().get("available_tokens", 0) or 0 |
| 413 | ) |
| 414 | |
| 415 | return max(0, available_tokens) |
| 416 | |
| 417 | def _get_total_retry_limit(self) -> int: |
| 418 | """综合认证号池与匿名号池的最大尝试次数。""" |
| 419 | return max( |
| 420 | 1, |
no outgoing calls