MCPcopy Index your code
hub / github.com/google/adk-python / run_agent_live

Method run_agent_live

src/google/adk/cli/api_server.py:1611–1727  ·  view source on GitHub ↗
(
        websocket: WebSocket,
        user_id: str,
        session_id: str,
        app_name: Optional[str] = Query(default=None),
        modalities: List[Literal["TEXT", "AUDIO"]] = Query(
            default=["AUDIO"]
        ),  # Only allows "TEXT" or "AUDIO"
        proactive_audio: bool | None = Query(default=None),
        enable_affective_dialog: bool | None = Query(default=None),
        enable_session_resumption: bool | None = Query(default=None),
        save_live_blob: bool = Query(default=False),
    )

Source from the content-addressed store, hash-verified

1609
1610 @app.websocket("/run_live")
1611 async def run_agent_live(
1612 websocket: WebSocket,
1613 user_id: str,
1614 session_id: str,
1615 app_name: Optional[str] = Query(default=None),
1616 modalities: List[Literal["TEXT", "AUDIO"]] = Query(
1617 default=["AUDIO"]
1618 ), # Only allows "TEXT" or "AUDIO"
1619 proactive_audio: bool | None = Query(default=None),
1620 enable_affective_dialog: bool | None = Query(default=None),
1621 enable_session_resumption: bool | None = Query(default=None),
1622 save_live_blob: bool = Query(default=False),
1623 ) -> None:
1624 resolved_app_name = app_name or self.default_app_name
1625 if not resolved_app_name:
1626 await websocket.close(
1627 code=1008,
1628 reason=(
1629 "app_name query parameter is required when ADK_DEFAULT_APP_NAME"
1630 " is not set"
1631 ),
1632 )
1633 return
1634 app_name = resolved_app_name
1635
1636 ws_origin = websocket.headers.get("origin")
1637 if ws_origin is not None and not _is_request_origin_allowed(
1638 ws_origin,
1639 websocket.scope,
1640 literal_origins,
1641 compiled_origin_regex,
1642 has_configured_allowed_origins,
1643 ):
1644 await websocket.close(code=1008, reason="Origin not allowed")
1645 return
1646
1647 await websocket.accept()
1648 self.current_app_name_ref.value = app_name
1649 runner_for_context = await self.get_runner_async(app_name)
1650 _set_telemetry_context_if_needed(runner_for_context)
1651
1652 session = await self.session_service.get_session(
1653 app_name=app_name, user_id=user_id, session_id=session_id
1654 )
1655 if not session:
1656 await websocket.close(code=1002, reason="Session not found")
1657 return
1658
1659 live_request_queue = LiveRequestQueue()
1660
1661 async def forward_events():
1662 runner = await self.get_runner_async(app_name)
1663 run_config = RunConfig(
1664 response_modalities=modalities,
1665 proactivity=(
1666 types.ProactivityConfig(proactive_audio=proactive_audio)
1667 if proactive_audio is not None
1668 else None

Callers

nothing calls this directly

Calls 10

get_runner_asyncMethod · 0.95
LiveRequestQueueClass · 0.85
resultMethod · 0.80
closeMethod · 0.45
getMethod · 0.45
acceptMethod · 0.45
get_sessionMethod · 0.45
waitMethod · 0.45
cancelMethod · 0.45

Tested by

no test coverage detected