Skip to content

Commit 47cc7ee

Browse files
authored
fix: align avatar-live model name and path with backend (#34)
The Python SDK used model name 'avatar-live' with path '/v1/avatar-live/stream', but the backend registers the model as 'live_avatar' and serves all realtime models on '/v1/stream' (model passed as query param). This mismatch caused 404 errors for Python SDK users trying to use Avatar Live. Changes: - Rename model from 'avatar-live' to 'live_avatar' (matches backend + JS SDK) - Change url_path from '/v1/avatar-live/stream' to '/v1/stream' (matches backend) - Update RealTimeModels type, example, playground, and tests accordingly
1 parent eb96b78 commit 47cc7ee

File tree

6 files changed

+19
-19
lines changed

6 files changed

+19
-19
lines changed

decart/models.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from .types import FileInput, MotionTrajectoryInput
55

66

7-
RealTimeModels = Literal["mirage", "mirage_v2", "lucy_v2v_720p_rt", "lucy_2_rt", "avatar-live"]
7+
RealTimeModels = Literal["mirage", "mirage_v2", "lucy_v2v_720p_rt", "lucy_2_rt", "live_avatar"]
88
VideoModels = Literal[
99
"lucy-dev-i2v",
1010
"lucy-fast-v2v",
@@ -182,9 +182,9 @@ class ImageToImageInput(DecartBaseModel):
182182
height=720,
183183
input_schema=BaseModel,
184184
),
185-
"avatar-live": ModelDefinition(
186-
name="avatar-live",
187-
url_path="/v1/avatar-live/stream",
185+
"live_avatar": ModelDefinition(
186+
name="live_avatar",
187+
url_path="/v1/stream",
188188
fps=25,
189189
width=1280,
190190
height=720,

decart/realtime/webrtc_connection.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ async def on_ice_connection_state_change():
246246
self._pc.addTransceiver("audio", direction="recvonly")
247247
logger.debug("Added video+audio transceivers (recvonly) for subscribe mode")
248248
else:
249-
if model_name == "avatar-live":
249+
if model_name == "live_avatar":
250250
self._pc.addTransceiver("video", direction="recvonly")
251251
logger.debug("Added video transceiver (recvonly) for avatar-live mode")
252252
self._pc.addTrack(local_track)

examples/avatar_live.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ async def main():
8585

8686
print("\nCreating Decart client...")
8787
async with DecartClient(api_key=api_key) as client:
88-
model = models.realtime("avatar-live")
88+
model = models.realtime("live_avatar")
8989
print(f"Using model: {model.name}")
9090

9191
frame_count = 0

playground/playground.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,9 @@ def _check_deps() -> None:
9191

9292
# ── Constants ────────────────────────────────────────────────────────────────
9393

94-
REALTIME_MODELS = ["mirage", "mirage_v2", "lucy_v2v_720p_rt", "lucy_2_rt", "avatar-live"]
94+
REALTIME_MODELS = ["mirage", "mirage_v2", "lucy_v2v_720p_rt", "lucy_2_rt", "live_avatar"]
9595
CAMERA_MODELS = {"mirage", "mirage_v2", "lucy_v2v_720p_rt", "lucy_2_rt"}
96-
AVATAR_MODELS = {"avatar-live"}
96+
AVATAR_MODELS = {"live_avatar"}
9797

9898
BANNER = """
9999
╔══════════════════════════════════════╗

tests/test_models.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@ def test_realtime_models() -> None:
1818
assert model.url_path == "/v1/stream"
1919

2020
# avatar-live model
21-
model = models.realtime("avatar-live")
22-
assert model.name == "avatar-live"
21+
model = models.realtime("live_avatar")
22+
assert model.name == "live_avatar"
2323
assert model.fps == 25
2424
assert model.width == 1280
2525
assert model.height == 720
26-
assert model.url_path == "/v1/avatar-live/stream"
26+
assert model.url_path == "/v1/stream"
2727

2828

2929
def test_video_models() -> None:

tests/test_realtime_unit.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -357,12 +357,12 @@ async def set_event():
357357

358358
def test_avatar_live_model_available():
359359
"""Test that avatar-live model is available"""
360-
model = models.realtime("avatar-live")
361-
assert model.name == "avatar-live"
360+
model = models.realtime("live_avatar")
361+
assert model.name == "live_avatar"
362362
assert model.fps == 25
363363
assert model.width == 1280
364364
assert model.height == 720
365-
assert model.url_path == "/v1/avatar-live/stream"
365+
assert model.url_path == "/v1/stream"
366366

367367

368368
@pytest.mark.asyncio
@@ -400,14 +400,14 @@ async def test_avatar_live_connect_with_initial_image():
400400
api_key=client.api_key,
401401
local_track=mock_track,
402402
options=RealtimeConnectOptions(
403-
model=models.realtime("avatar-live"),
403+
model=models.realtime("live_avatar"),
404404
on_remote_stream=lambda t: None,
405405
initial_state=ModelState(image=b"fake image bytes"),
406406
),
407407
)
408408

409409
assert realtime_client is not None
410-
assert realtime_client._model_name == "avatar-live"
410+
assert realtime_client._model_name == "live_avatar"
411411
mock_image_to_b64.assert_called_once()
412412
# Verify initial_image was passed to connect
413413
mock_manager.connect.assert_called_once()
@@ -448,7 +448,7 @@ async def test_avatar_live_set_image():
448448
api_key=client.api_key,
449449
local_track=mock_track,
450450
options=RealtimeConnectOptions(
451-
model=models.realtime("avatar-live"),
451+
model=models.realtime("live_avatar"),
452452
on_remote_stream=lambda t: None,
453453
),
454454
)
@@ -614,7 +614,7 @@ async def test_avatar_live_set_image_timeout():
614614
api_key=client.api_key,
615615
local_track=mock_track,
616616
options=RealtimeConnectOptions(
617-
model=models.realtime("avatar-live"),
617+
model=models.realtime("live_avatar"),
618618
on_remote_stream=lambda t: None,
619619
),
620620
)
@@ -659,7 +659,7 @@ async def test_avatar_live_set_image_server_error():
659659
api_key=client.api_key,
660660
local_track=mock_track,
661661
options=RealtimeConnectOptions(
662-
model=models.realtime("avatar-live"),
662+
model=models.realtime("live_avatar"),
663663
on_remote_stream=lambda t: None,
664664
),
665665
)

0 commit comments

Comments
 (0)