通过 /v1/chat/completions 端点生成图片(如即梦 API)
(
self,
prompt: str,
aspect_ratio: str,
model: str,
reference_image: Optional[bytes] = None,
reference_images: Optional[List[bytes]] = None
)
| 144 | return self.client.generate_via_images(payload) |
| 145 | |
| 146 | def _generate_via_chat_api( |
| 147 | self, |
| 148 | prompt: str, |
| 149 | aspect_ratio: str, |
| 150 | model: str, |
| 151 | reference_image: Optional[bytes] = None, |
| 152 | reference_images: Optional[List[bytes]] = None |
| 153 | ) -> bytes: |
| 154 | """通过 /v1/chat/completions 端点生成图片(如即梦 API)""" |
| 155 | # 构建用户消息内容 |
| 156 | user_content: Any = prompt |
| 157 | |
| 158 | # 收集所有参考图片 |
| 159 | all_reference_images = [] |
| 160 | if reference_images and len(reference_images) > 0: |
| 161 | all_reference_images.extend(reference_images) |
| 162 | if reference_image and reference_image not in all_reference_images: |
| 163 | all_reference_images.append(reference_image) |
| 164 | |
| 165 | # 如果有参考图片,构建多模态消息 |
| 166 | if all_reference_images: |
| 167 | logger.debug(f" 添加 {len(all_reference_images)} 张参考图片到 chat 消息") |
| 168 | content_parts = [{"type": "text", "text": prompt}] |
| 169 | |
| 170 | for idx, img_data in enumerate(all_reference_images): |
| 171 | compressed_img = compress_image(img_data, max_size_kb=200) |
| 172 | logger.debug(f" 参考图 {idx}: {len(img_data)} -> {len(compressed_img)} bytes") |
| 173 | base64_image = base64.b64encode(compressed_img).decode('utf-8') |
| 174 | content_parts.append({ |
| 175 | "type": "image_url", |
| 176 | "image_url": {"url": f"data:image/png;base64,{base64_image}"} |
| 177 | }) |
| 178 | |
| 179 | user_content = content_parts |
| 180 | |
| 181 | payload = { |
| 182 | "model": model, |
| 183 | "messages": [{"role": "user", "content": user_content}], |
| 184 | "max_tokens": 4096, |
| 185 | "temperature": 1.0 |
| 186 | } |
| 187 | |
| 188 | return self.client.generate_via_chat(payload) |
no test coverage detected