File size: 1,362 Bytes
e4153e0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
"""
Schemas Pydantic du protocole WebSocket /ws/edit.

Deux messages client -> serveur (protocole a 2 phases, cf. decision UX
"apercu du masque avant generation") :
  1. LocateRequest  -> le serveur repond MaskReadyEvent (ou ErrorEvent)
  2. ConfirmRequest -> le serveur repond une serie de ProgressEvent puis un
                        ResultEvent (ou ErrorEvent)

Une connexion WebSocket = une session d'edition (l'etat image+masque entre
les deux phases vit le temps de la connexion, cote serveur).
"""

from typing import List, Literal, Optional

from pydantic import BaseModel


class LocateRequest(BaseModel):
    type: Literal["locate"] = "locate"
    image_b64: str
    text_query: str


class ConfirmRequest(BaseModel):
    type: Literal["confirm"] = "confirm"
    prompt: str
    negative_prompt: str = ""
    steps: int = 30
    guidance_scale: float = 7.5
    seed: int = 42


class MaskReadyEvent(BaseModel):
    type: Literal["mask_ready"] = "mask_ready"
    mask_b64: str
    box: List[float]
    clip_confidence: float


class ProgressEvent(BaseModel):
    type: Literal["progress"] = "progress"
    stage: Literal["diffusion"] = "diffusion"
    step: int
    total: int


class ResultEvent(BaseModel):
    type: Literal["result"] = "result"
    image_b64: str


class ErrorEvent(BaseModel):
    type: Literal["error"] = "error"
    message: str