Spaces:
Running
Running
import base64 | |
import io | |
import time | |
from pathlib import Path | |
from typing import Any | |
from dotenv import load_dotenv | |
from PIL import Image | |
from together import Together | |
from api.flux import FluxAPI | |
class TogetherAPI(FluxAPI): | |
def __init__(self): | |
load_dotenv() | |
self._client = Together() | |
def name(self) -> str: | |
return "together" | |
def generate_image(self, prompt: str, save_path: Path) -> float: | |
start_time = time.time() | |
result = self._client.images.generate( | |
prompt=prompt, | |
model="black-forest-labs/FLUX.1-dev", | |
width=1024, | |
height=1024, | |
steps=28, | |
n=1, | |
seed=0, | |
response_format="b64_json", | |
) | |
end_time = time.time() | |
if result and hasattr(result, "data") and len(result.data) > 0: | |
self._save_image_from_result(result, save_path) | |
else: | |
raise Exception("No result returned from Together API") | |
return end_time - start_time | |
def _save_image_from_result(self, result: Any, save_path: Path): | |
save_path.parent.mkdir(parents=True, exist_ok=True) | |
b64_str = result.data[0].b64_json | |
image_data = base64.b64decode(b64_str) | |
image = Image.open(io.BytesIO(image_data)) | |
image.save(save_path) | |