初始化图片生成服务 Args: provider_name: 服务商名称,如果为None则使用配置文件中的激活服务商
(self, provider_name: str = None)
| 22 | AUTO_RETRY_COUNT = 1 # 不自动重试,超时后让用户手动重试 |
| 23 | |
| 24 | def __init__(self, provider_name: str = None): |
| 25 | """ |
| 26 | 初始化图片生成服务 |
| 27 | |
| 28 | Args: |
| 29 | provider_name: 服务商名称,如果为None则使用配置文件中的激活服务商 |
| 30 | """ |
| 31 | logger.debug("初始化 ImageService...") |
| 32 | |
| 33 | # 获取服务商配置 |
| 34 | if provider_name is None: |
| 35 | provider_name = Config.get_active_image_provider() |
| 36 | |
| 37 | logger.info(f"使用图片服务商: {provider_name}") |
| 38 | provider_config = Config.get_image_provider_config(provider_name) |
| 39 | |
| 40 | # 创建生成器实例 |
| 41 | provider_type = provider_config.get('type', provider_name) |
| 42 | logger.debug(f"创建生成器: type={provider_type}") |
| 43 | self.generator = ImageGeneratorFactory.create(provider_type, provider_config) |
| 44 | |
| 45 | # 保存配置信息 |
| 46 | self.provider_name = provider_name |
| 47 | self.provider_config = provider_config |
| 48 | self.policy = ImageProviderPolicy.from_config( |
| 49 | provider_config, |
| 50 | default_model=provider_config.get('model', 'default-model'), |
| 51 | ) |
| 52 | self.worker_count = self.policy.worker_count |
| 53 | self.rate_limiter = ImageRateLimiter( |
| 54 | max_concurrent=self.worker_count, |
| 55 | interval_seconds=self.policy.request_interval_seconds, |
| 56 | ) |
| 57 | self.history_service = get_history_service() |
| 58 | |
| 59 | # 检查是否启用短 prompt 模式 |
| 60 | self.use_short_prompt = provider_config.get('short_prompt', False) |
| 61 | |
| 62 | # 加载提示词模板 |
| 63 | self.prompt_template = self._load_prompt_template() |
| 64 | self.prompt_template_short = self._load_prompt_template(short=True) |
| 65 | |
| 66 | # 历史记录根目录 |
| 67 | self.history_root_dir = os.path.join( |
| 68 | os.path.dirname(os.path.dirname(os.path.dirname(__file__))), |
| 69 | "history" |
| 70 | ) |
| 71 | os.makedirs(self.history_root_dir, exist_ok=True) |
| 72 | |
| 73 | # 当前任务的输出目录(每个任务一个子文件夹) |
| 74 | self.current_task_dir = None |
| 75 | |
| 76 | # 存储任务状态(用于重试) |
| 77 | self._task_states: Dict[str, Dict] = {} |
| 78 | |
| 79 | logger.info(f"ImageService 初始化完成: provider={provider_name}, type={provider_type}") |
| 80 | |
| 81 | @staticmethod |
nothing calls this directly
no test coverage detected