Spaces:
Sleeping
Sleeping
| from typing import Literal | |
| from datetime import datetime | |
| from typing import Annotated, Literal,Optional | |
| from uuid import uuid4 | |
| from pydantic import BaseModel, Field, HttpUrl, IPvAnyAddress, PositiveInt,AfterValidator,validate_call | |
| VoicePresets = Literal["v2/en_speaker_1", "v2/en_speaker_9"] | |
| class ModelRequest(BaseModel): | |
| prompt: Annotated[str, Field(min_length=1, max_length=10000)] | |
| class ModelResponse(BaseModel): | |
| request_id: Annotated[str, Field(default_factory=lambda: uuid4().hex)] | |
| ip: Annotated[Optional[IPvAnyAddress], Field(default=None)] | |
| content: Annotated[Optional[str], Field(min_length=0, max_length=10000,default=None)] | |
| created_at: datetime = datetime.now() | |
| class TextModelRequest(ModelRequest): | |
| model: Literal["gpt-3.5-turbo", "gpt-4o"] | |
| temperature: Annotated[float, Field(ge=0.0, le=1.0, default=0.0)] | |
| class TextModelResponse(ModelResponse): | |
| tokens: Annotated[Optional[int], Field(ge=0,default=None)] | |
| ImageSize = Annotated[tuple[PositiveInt, PositiveInt], "Width and height of an image in pixels"] | |
| SupportedModels = Annotated[ | |
| Literal["tinysd", "sd1.5"], "Supported Image Generation Models" | |
| ] | |
| def is_square_image(value: ImageSize) -> ImageSize: | |
| if value[0] / value[1] != 1: | |
| raise ValueError("Only square images are supported") | |
| if value[0] not in [512, 1024]: | |
| raise ValueError(f"Invalid output size: {value} - expected 512 or 1024") | |
| return value | |
| def is_valid_inference_step( | |
| num_inference_steps: int, model: SupportedModels | |
| ) -> int: | |
| if model == "tinysd" and num_inference_steps > 2000: | |
| raise ValueError( | |
| "TinySD model cannot have more than 2000 inference steps" | |
| ) | |
| return num_inference_steps | |
| class ImageModelRequest(ModelRequest): | |
| model: SupportedModels | |
| output_size: ImageSize | |
| num_inference_steps: Annotated[int, Field(ge=0, le=2000)] = 200 | |
| class ImageModelResponse(ModelResponse): | |
| size: ImageSize | |
| url: Annotated[Optional[HttpUrl], Field(default=None)] | |