tfrere's picture
update story
78b81a5
import os
import aiohttp
from typing import Optional
class FluxClient:
def __init__(self, api_key: str):
self.api_key = api_key
self.endpoint = os.getenv("FLUX_ENDPOINT")
self._session = None
async def _get_session(self):
if self._session is None:
self._session = aiohttp.ClientSession()
return self._session
async def generate_image(self,
prompt: str,
width: int,
height: int,
num_inference_steps: int = 5,
guidance_scale: float = 9.0) -> Optional[bytes]:
"""Génère une image à partir d'un prompt."""
try:
# Ensure dimensions are multiples of 8
width = (width // 8) * 8
height = (height // 8) * 8
print(f"Sending request to Hugging Face API: {self.endpoint}")
print(f"Headers: Authorization: Bearer {self.api_key[:4]}...")
print(f"Request body: {prompt[:100]}...")
session = await self._get_session()
async with session.post(
self.endpoint,
headers={
"Authorization": f"Bearer {self.api_key}",
"Accept": "image/jpeg"
},
json={
"inputs": prompt,
"parameters": {
"num_inference_steps": num_inference_steps,
"guidance_scale": guidance_scale,
"width": width,
"height": height,
"negative_prompt": "Bubbles, text, caption. Do not include bright or clean clothing."
}
}
) as response:
print(f"Response status code: {response.status}")
print(f"Response headers: {response.headers}")
print(f"Response content type: {response.headers.get('content-type', 'unknown')}")
if response.status == 200:
content = await response.read()
content_length = len(content)
print(f"Received successful response with content length: {content_length}")
if isinstance(content, bytes):
print("Response content is bytes (correct)")
else:
print(f"Warning: Response content is {type(content)}")
return content
else:
error_content = await response.text()
print(f"Error from Flux API: {response.status}")
print(f"Response content: {error_content}")
return None
except Exception as e:
print(f"Error in FluxClient.generate_image: {str(e)}")
import traceback
print(f"Traceback: {traceback.format_exc()}")
return None
async def close(self):
if self._session:
await self._session.close()
self._session = None