agent-starter-pack 0.3.3__py3-none-any.whl → 0.21.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (255) hide show
  1. agent_starter_pack/agents/README.md +7 -0
  2. agents/langgraph_base_react/template/.templateconfig.yaml → agent_starter_pack/agents/adk_a2a_base/.template/templateconfig.yaml +5 -10
  3. agent_starter_pack/agents/adk_a2a_base/README.md +37 -0
  4. src/deployment_targets/cloud_run/Dockerfile → agent_starter_pack/agents/adk_a2a_base/app/__init__.py +2 -14
  5. agent_starter_pack/agents/adk_a2a_base/app/agent.py +70 -0
  6. agent_starter_pack/agents/adk_a2a_base/notebooks/adk_a2a_app_testing.ipynb +583 -0
  7. agents/crewai_coding_crew/notebooks/evaluating_crewai_agent.ipynb → agent_starter_pack/agents/adk_a2a_base/notebooks/evaluating_adk_agent.ipynb +163 -199
  8. {agents/adk_base → agent_starter_pack/agents/adk_a2a_base}/tests/integration/test_agent.py +2 -2
  9. agents/adk_base/template/.templateconfig.yaml → agent_starter_pack/agents/adk_base/.template/templateconfig.yaml +4 -1
  10. {agents → agent_starter_pack/agents}/adk_base/README.md +1 -1
  11. agent_starter_pack/agents/adk_base/app/__init__.py +17 -0
  12. {agents → agent_starter_pack/agents}/adk_base/app/agent.py +5 -2
  13. {agents → agent_starter_pack/agents}/adk_base/notebooks/adk_app_testing.ipynb +128 -82
  14. agents/langgraph_base_react/notebooks/evaluating_langgraph_agent.ipynb → agent_starter_pack/agents/adk_base/notebooks/evaluating_adk_agent.ipynb +181 -207
  15. agent_starter_pack/agents/adk_base/tests/integration/test_agent.py +58 -0
  16. agents/crewai_coding_crew/template/.templateconfig.yaml → agent_starter_pack/agents/adk_live/.template/templateconfig.yaml +5 -9
  17. agent_starter_pack/agents/adk_live/README.md +32 -0
  18. agent_starter_pack/agents/adk_live/app/__init__.py +17 -0
  19. agent_starter_pack/agents/adk_live/app/agent.py +51 -0
  20. agent_starter_pack/agents/adk_live/tests/unit/test_dummy.py +38 -0
  21. agents/agentic_rag/template/.templateconfig.yaml → agent_starter_pack/agents/agentic_rag/.template/templateconfig.yaml +7 -3
  22. {agents → agent_starter_pack/agents}/agentic_rag/README.md +1 -1
  23. agent_starter_pack/agents/agentic_rag/app/__init__.py +17 -0
  24. {agents → agent_starter_pack/agents}/agentic_rag/app/agent.py +8 -4
  25. {agents → agent_starter_pack/agents}/agentic_rag/notebooks/adk_app_testing.ipynb +128 -82
  26. agent_starter_pack/agents/agentic_rag/notebooks/evaluating_adk_agent.ipynb +1535 -0
  27. {agents → agent_starter_pack/agents}/agentic_rag/tests/integration/test_agent.py +3 -3
  28. agent_starter_pack/agents/langgraph_base/.template/templateconfig.yaml +31 -0
  29. agent_starter_pack/agents/langgraph_base/README.md +30 -0
  30. agent_starter_pack/agents/langgraph_base/app/__init__.py +17 -0
  31. agent_starter_pack/agents/langgraph_base/app/agent.py +34 -0
  32. {agents/crewai_coding_crew → agent_starter_pack/agents/langgraph_base}/notebooks/evaluating_langgraph_agent.ipynb +30 -17
  33. {agents/langgraph_base_react → agent_starter_pack/agents/langgraph_base}/tests/integration/test_agent.py +2 -2
  34. {src → agent_starter_pack}/base_template/.gitignore +5 -3
  35. agent_starter_pack/base_template/GEMINI.md +5 -0
  36. agent_starter_pack/base_template/Makefile +339 -0
  37. agent_starter_pack/base_template/README.md +267 -0
  38. agent_starter_pack/base_template/deployment/README.md +11 -0
  39. {src → agent_starter_pack}/base_template/deployment/terraform/apis.tf +2 -2
  40. {src → agent_starter_pack}/base_template/deployment/terraform/dev/apis.tf +6 -1
  41. {src → agent_starter_pack}/base_template/deployment/terraform/dev/iam.tf +12 -11
  42. {src → agent_starter_pack}/base_template/deployment/terraform/dev/providers.tf +5 -1
  43. {src → agent_starter_pack}/base_template/deployment/terraform/dev/storage.tf +1 -1
  44. {src → agent_starter_pack}/base_template/deployment/terraform/dev/variables.tf +10 -10
  45. agent_starter_pack/base_template/deployment/terraform/dev/{% if cookiecutter.is_adk %}telemetry.tf{% else %}unused_telemetry.tf{% endif %} +193 -0
  46. agent_starter_pack/base_template/deployment/terraform/github.tf +337 -0
  47. {src → agent_starter_pack}/base_template/deployment/terraform/iam.tf +20 -41
  48. {src → agent_starter_pack}/base_template/deployment/terraform/locals.tf +10 -3
  49. {src/resources/setup_cicd → agent_starter_pack/base_template/deployment/terraform}/providers.tf +8 -1
  50. {src → agent_starter_pack}/base_template/deployment/terraform/service_accounts.tf +7 -8
  51. agent_starter_pack/base_template/deployment/terraform/sql/completions.sql +138 -0
  52. {src → agent_starter_pack}/base_template/deployment/terraform/storage.tf +7 -16
  53. {src → agent_starter_pack}/base_template/deployment/terraform/variables.tf +61 -28
  54. {src → agent_starter_pack}/base_template/deployment/terraform/vars/env.tfvars +6 -1
  55. agent_starter_pack/base_template/deployment/terraform/{% if cookiecutter.cicd_runner == 'github_actions' %}wif.tf{% else %}unused_wif.tf{% endif %} +43 -0
  56. src/base_template/deployment/terraform/build_triggers.tf → agent_starter_pack/base_template/deployment/terraform/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}build_triggers.tf{% else %}unused_build_triggers.tf{% endif %} +55 -38
  57. agent_starter_pack/base_template/deployment/terraform/{% if cookiecutter.is_adk %}telemetry.tf{% else %}unused_telemetry.tf{% endif %} +206 -0
  58. {src → agent_starter_pack}/base_template/pyproject.toml +24 -37
  59. agent_starter_pack/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/deploy-to-prod.yaml +132 -0
  60. agent_starter_pack/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/pr_checks.yaml +65 -0
  61. agent_starter_pack/base_template/{% if cookiecutter.cicd_runner == 'github_actions' %}.github{% else %}unused_github{% endif %}/workflows/staging.yaml +259 -0
  62. src/base_template/deployment/cd/deploy-to-prod.yaml → agent_starter_pack/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/deploy-to-prod.yaml +38 -30
  63. src/base_template/deployment/ci/pr_checks.yaml → agent_starter_pack/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/pr_checks.yaml +5 -5
  64. agent_starter_pack/base_template/{% if cookiecutter.cicd_runner == 'google_cloud_build' %}.cloudbuild{% else %}unused_.cloudbuild{% endif %}/staging.yaml +322 -0
  65. agent_starter_pack/base_template/{{cookiecutter.agent_directory}}/app_utils/telemetry.py +96 -0
  66. {src/base_template/app/utils → agent_starter_pack/base_template/{{cookiecutter.agent_directory}}/app_utils}/typing.py +7 -9
  67. agent_starter_pack/base_template/{{cookiecutter.agent_directory}}/app_utils/{% if cookiecutter.is_a2a and cookiecutter.agent_name == 'langgraph_base' %}converters{% else %}unused_converters{% endif %}/__init__.py +25 -0
  68. agent_starter_pack/base_template/{{cookiecutter.agent_directory}}/app_utils/{% if cookiecutter.is_a2a and cookiecutter.agent_name == 'langgraph_base' %}converters{% else %}unused_converters{% endif %}/part_converter.py +138 -0
  69. agent_starter_pack/base_template/{{cookiecutter.agent_directory}}/app_utils/{% if cookiecutter.is_a2a and cookiecutter.agent_name == 'langgraph_base' %}executor{% else %}unused_executor{% endif %}/__init__.py +13 -0
  70. agent_starter_pack/base_template/{{cookiecutter.agent_directory}}/app_utils/{% if cookiecutter.is_a2a and cookiecutter.agent_name == 'langgraph_base' %}executor{% else %}unused_executor{% endif %}/a2a_agent_executor.py +265 -0
  71. agent_starter_pack/base_template/{{cookiecutter.agent_directory}}/app_utils/{% if cookiecutter.is_a2a and cookiecutter.agent_name == 'langgraph_base' %}executor{% else %}unused_executor{% endif %}/task_result_aggregator.py +152 -0
  72. agent_starter_pack/cli/commands/create.py +1256 -0
  73. agent_starter_pack/cli/commands/enhance.py +611 -0
  74. agent_starter_pack/cli/commands/list.py +203 -0
  75. agent_starter_pack/cli/commands/register_gemini_enterprise.py +1070 -0
  76. agent_starter_pack/cli/commands/setup_cicd.py +862 -0
  77. {src → agent_starter_pack}/cli/main.py +10 -2
  78. {src → agent_starter_pack}/cli/utils/cicd.py +139 -48
  79. agent_starter_pack/cli/utils/gcp.py +263 -0
  80. agent_starter_pack/cli/utils/logging.py +103 -0
  81. agent_starter_pack/cli/utils/remote_template.py +677 -0
  82. agent_starter_pack/cli/utils/template.py +1466 -0
  83. {src → agent_starter_pack}/data_ingestion/data_ingestion_pipeline/components/process_data.py +1 -1
  84. {src → agent_starter_pack}/data_ingestion/data_ingestion_pipeline/submit_pipeline.py +20 -6
  85. {src → agent_starter_pack}/data_ingestion/pyproject.toml +1 -0
  86. {src → agent_starter_pack}/data_ingestion/uv.lock +602 -494
  87. agent_starter_pack/deployment_targets/agent_engine/tests/integration/test_agent_engine_app.py +484 -0
  88. agent_starter_pack/deployment_targets/agent_engine/tests/load_test/README.md +84 -0
  89. agent_starter_pack/deployment_targets/agent_engine/tests/load_test/load_test.py +424 -0
  90. agent_starter_pack/deployment_targets/agent_engine/tests/{% if cookiecutter.is_a2a %}helpers.py{% else %}unused_helpers.py{% endif %} +138 -0
  91. agent_starter_pack/deployment_targets/agent_engine/{{cookiecutter.agent_directory}}/agent_engine_app.py +263 -0
  92. agent_starter_pack/deployment_targets/agent_engine/{{cookiecutter.agent_directory}}/app_utils/deploy.py +414 -0
  93. agent_starter_pack/deployment_targets/agent_engine/{{cookiecutter.agent_directory}}/app_utils/{% if cookiecutter.is_adk_live %}expose_app.py{% else %}unused_expose_app.py{% endif %} +519 -0
  94. agent_starter_pack/deployment_targets/cloud_run/Dockerfile +51 -0
  95. agent_starter_pack/deployment_targets/cloud_run/deployment/terraform/dev/service.tf +243 -0
  96. agent_starter_pack/deployment_targets/cloud_run/deployment/terraform/service.tf +417 -0
  97. agent_starter_pack/deployment_targets/cloud_run/tests/integration/test_server_e2e.py +705 -0
  98. agent_starter_pack/deployment_targets/cloud_run/tests/load_test/.results/.placeholder +321 -0
  99. agent_starter_pack/deployment_targets/cloud_run/tests/load_test/README.md +165 -0
  100. agent_starter_pack/deployment_targets/cloud_run/tests/load_test/load_test.py +329 -0
  101. agent_starter_pack/deployment_targets/cloud_run/{{cookiecutter.agent_directory}}/fast_api_app.py +556 -0
  102. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/package-lock.json +79 -1044
  103. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/package.json +1 -9
  104. agent_starter_pack/frontends/adk_live_react/frontend/src/App.tsx +65 -0
  105. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/components/logger/Logger.tsx +8 -3
  106. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/components/logger/logger.scss +26 -0
  107. agent_starter_pack/frontends/adk_live_react/frontend/src/components/side-panel/SidePanel.tsx +516 -0
  108. agent_starter_pack/frontends/adk_live_react/frontend/src/components/side-panel/side-panel.scss +563 -0
  109. agent_starter_pack/frontends/adk_live_react/frontend/src/components/transcription-preview/TranscriptionPreview.tsx +106 -0
  110. agent_starter_pack/frontends/adk_live_react/frontend/src/components/transcription-preview/transcription-preview.scss +150 -0
  111. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/hooks/use-live-api.ts +8 -2
  112. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/multimodal-live-types.ts +40 -2
  113. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/audio-recorder.ts +1 -1
  114. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/audio-streamer.ts +1 -1
  115. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/multimodal-live-client.ts +210 -24
  116. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/utils.ts +27 -5
  117. agent_starter_pack/resources/docs/adk-cheatsheet.md +1628 -0
  118. agent_starter_pack/resources/locks/uv-adk_a2a_base-agent_engine.lock +4966 -0
  119. agent_starter_pack/resources/locks/uv-adk_a2a_base-cloud_run.lock +5011 -0
  120. agent_starter_pack/resources/locks/uv-adk_base-agent_engine.lock +4946 -0
  121. agent_starter_pack/resources/locks/uv-adk_base-cloud_run.lock +4991 -0
  122. agent_starter_pack/resources/locks/uv-adk_live-agent_engine.lock +4963 -0
  123. agent_starter_pack/resources/locks/uv-adk_live-cloud_run.lock +5006 -0
  124. agent_starter_pack/resources/locks/uv-agentic_rag-agent_engine.lock +5487 -0
  125. agent_starter_pack/resources/locks/uv-agentic_rag-cloud_run.lock +5532 -0
  126. agent_starter_pack/resources/locks/uv-langgraph_base-agent_engine.lock +5788 -0
  127. agent_starter_pack/resources/locks/uv-langgraph_base-cloud_run.lock +5811 -0
  128. {src → agent_starter_pack}/utils/generate_locks.py +15 -12
  129. {src → agent_starter_pack}/utils/lock_utils.py +4 -7
  130. {src → agent_starter_pack}/utils/watch_and_rebuild.py +2 -2
  131. agent_starter_pack-0.21.0.dist-info/METADATA +182 -0
  132. agent_starter_pack-0.21.0.dist-info/RECORD +171 -0
  133. agent_starter_pack-0.21.0.dist-info/entry_points.txt +2 -0
  134. llm.txt +362 -0
  135. agent_starter_pack-0.3.3.dist-info/METADATA +0 -164
  136. agent_starter_pack-0.3.3.dist-info/RECORD +0 -176
  137. agent_starter_pack-0.3.3.dist-info/entry_points.txt +0 -2
  138. agents/crewai_coding_crew/README.md +0 -34
  139. agents/crewai_coding_crew/app/agent.py +0 -86
  140. agents/crewai_coding_crew/app/crew/config/agents.yaml +0 -39
  141. agents/crewai_coding_crew/app/crew/config/tasks.yaml +0 -37
  142. agents/crewai_coding_crew/app/crew/crew.py +0 -71
  143. agents/crewai_coding_crew/tests/integration/test_agent.py +0 -47
  144. agents/langgraph_base_react/README.md +0 -9
  145. agents/langgraph_base_react/app/agent.py +0 -73
  146. agents/live_api/README.md +0 -37
  147. agents/live_api/app/agent.py +0 -78
  148. agents/live_api/app/server.py +0 -196
  149. agents/live_api/app/templates.py +0 -51
  150. agents/live_api/app/vector_store.py +0 -55
  151. agents/live_api/template/.templateconfig.yaml +0 -29
  152. agents/live_api/tests/integration/test_server_e2e.py +0 -254
  153. agents/live_api/tests/load_test/load_test.py +0 -40
  154. agents/live_api/tests/unit/test_server.py +0 -143
  155. src/base_template/Makefile +0 -72
  156. src/base_template/README.md +0 -208
  157. src/base_template/app/__init__.py +0 -3
  158. src/base_template/app/utils/tracing.py +0 -155
  159. src/base_template/deployment/README.md +0 -126
  160. src/base_template/deployment/cd/staging.yaml +0 -216
  161. src/base_template/deployment/terraform/dev/log_sinks.tf +0 -63
  162. src/base_template/deployment/terraform/log_sinks.tf +0 -70
  163. src/base_template/deployment/terraform/providers.tf +0 -37
  164. src/cli/commands/create.py +0 -664
  165. src/cli/commands/setup_cicd.py +0 -829
  166. src/cli/utils/gcp.py +0 -117
  167. src/cli/utils/logging.py +0 -51
  168. src/cli/utils/template.py +0 -737
  169. src/deployment_targets/agent_engine/app/agent_engine_app.py +0 -336
  170. src/deployment_targets/agent_engine/notebooks/intro_agent_engine.ipynb +0 -1025
  171. src/deployment_targets/agent_engine/tests/integration/test_agent_engine_app.py +0 -183
  172. src/deployment_targets/agent_engine/tests/load_test/README.md +0 -42
  173. src/deployment_targets/agent_engine/tests/load_test/load_test.py +0 -107
  174. src/deployment_targets/cloud_run/app/server.py +0 -154
  175. src/deployment_targets/cloud_run/tests/integration/test_server_e2e.py +0 -249
  176. src/deployment_targets/cloud_run/tests/load_test/.results/.placeholder +0 -0
  177. src/deployment_targets/cloud_run/tests/load_test/README.md +0 -83
  178. src/deployment_targets/cloud_run/tests/load_test/load_test.py +0 -118
  179. src/deployment_targets/cloud_run/uv.lock +0 -6952
  180. src/frontends/live_api_react/frontend/src/App.tsx +0 -205
  181. src/frontends/live_api_react/frontend/src/components/control-tray/ControlTray.tsx +0 -217
  182. src/frontends/live_api_react/frontend/src/components/control-tray/control-tray.scss +0 -201
  183. src/frontends/live_api_react/frontend/src/components/side-panel/SidePanel.tsx +0 -161
  184. src/frontends/live_api_react/frontend/src/components/side-panel/side-panel.scss +0 -285
  185. src/frontends/streamlit/frontend/side_bar.py +0 -214
  186. src/frontends/streamlit/frontend/streamlit_app.py +0 -265
  187. src/frontends/streamlit/frontend/style/app_markdown.py +0 -37
  188. src/frontends/streamlit/frontend/utils/chat_utils.py +0 -67
  189. src/frontends/streamlit/frontend/utils/local_chat_history.py +0 -125
  190. src/frontends/streamlit/frontend/utils/message_editing.py +0 -59
  191. src/frontends/streamlit/frontend/utils/multimodal_utils.py +0 -217
  192. src/frontends/streamlit/frontend/utils/stream_handler.py +0 -301
  193. src/frontends/streamlit/frontend/utils/title_summary.py +0 -94
  194. src/frontends/streamlit_adk/frontend/side_bar.py +0 -214
  195. src/frontends/streamlit_adk/frontend/streamlit_app.py +0 -314
  196. src/frontends/streamlit_adk/frontend/style/app_markdown.py +0 -37
  197. src/frontends/streamlit_adk/frontend/utils/chat_utils.py +0 -84
  198. src/frontends/streamlit_adk/frontend/utils/local_chat_history.py +0 -110
  199. src/frontends/streamlit_adk/frontend/utils/message_editing.py +0 -61
  200. src/frontends/streamlit_adk/frontend/utils/multimodal_utils.py +0 -223
  201. src/frontends/streamlit_adk/frontend/utils/stream_handler.py +0 -311
  202. src/frontends/streamlit_adk/frontend/utils/title_summary.py +0 -129
  203. src/resources/containers/data_processing/Dockerfile +0 -27
  204. src/resources/containers/e2e-tests/Dockerfile +0 -19
  205. src/resources/idx/.idx/dev.nix +0 -57
  206. src/resources/idx/idx-template.json +0 -21
  207. src/resources/idx/idx-template.nix +0 -26
  208. src/resources/locks/uv-adk_base-agent_engine.lock +0 -5338
  209. src/resources/locks/uv-adk_base-cloud_run.lock +0 -5930
  210. src/resources/locks/uv-agentic_rag-agent_engine.lock +0 -5528
  211. src/resources/locks/uv-agentic_rag-cloud_run.lock +0 -6120
  212. src/resources/locks/uv-crewai_coding_crew-agent_engine.lock +0 -6231
  213. src/resources/locks/uv-crewai_coding_crew-cloud_run.lock +0 -6839
  214. src/resources/locks/uv-langgraph_base_react-agent_engine.lock +0 -5233
  215. src/resources/locks/uv-langgraph_base_react-cloud_run.lock +0 -5862
  216. src/resources/locks/uv-live_api-cloud_run.lock +0 -5832
  217. src/resources/setup_cicd/cicd_variables.tf +0 -41
  218. src/resources/setup_cicd/github.tf +0 -87
  219. {agents → agent_starter_pack/agents}/agentic_rag/app/retrievers.py +0 -0
  220. {agents → agent_starter_pack/agents}/agentic_rag/app/templates.py +0 -0
  221. {src → agent_starter_pack}/base_template/deployment/terraform/dev/vars/env.tfvars +0 -0
  222. {src → agent_starter_pack}/base_template/tests/unit/test_dummy.py +0 -0
  223. {src/deployment_targets/agent_engine/app/utils → agent_starter_pack/base_template/{{cookiecutter.agent_directory}}/app_utils}/gcs.py +0 -0
  224. {src → agent_starter_pack}/cli/utils/__init__.py +0 -0
  225. {src → agent_starter_pack}/cli/utils/datastores.py +0 -0
  226. {src → agent_starter_pack}/cli/utils/version.py +0 -0
  227. {src → agent_starter_pack}/data_ingestion/README.md +0 -0
  228. {src → agent_starter_pack}/data_ingestion/data_ingestion_pipeline/components/ingest_data.py +0 -0
  229. {src → agent_starter_pack}/data_ingestion/data_ingestion_pipeline/pipeline.py +0 -0
  230. {src → agent_starter_pack}/deployment_targets/agent_engine/deployment_metadata.json +0 -0
  231. {src → agent_starter_pack}/deployment_targets/agent_engine/tests/load_test/.results/.placeholder +0 -0
  232. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/public/favicon.ico +0 -0
  233. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/public/index.html +0 -0
  234. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/public/robots.txt +0 -0
  235. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/App.scss +0 -0
  236. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/App.test.tsx +0 -0
  237. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/components/audio-pulse/AudioPulse.tsx +0 -0
  238. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/components/audio-pulse/audio-pulse.scss +0 -0
  239. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/components/logger/mock-logs.ts +0 -0
  240. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/contexts/LiveAPIContext.tsx +0 -0
  241. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/hooks/use-media-stream-mux.ts +0 -0
  242. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/hooks/use-screen-capture.ts +0 -0
  243. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/hooks/use-webcam.ts +0 -0
  244. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/index.css +0 -0
  245. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/index.tsx +0 -0
  246. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/react-app-env.d.ts +0 -0
  247. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/reportWebVitals.ts +0 -0
  248. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/setupTests.ts +0 -0
  249. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/audioworklet-registry.ts +0 -0
  250. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/store-logger.ts +0 -0
  251. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/worklets/audio-processing.ts +0 -0
  252. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/src/utils/worklets/vol-meter.ts +0 -0
  253. {src/frontends/live_api_react → agent_starter_pack/frontends/adk_live_react}/frontend/tsconfig.json +0 -0
  254. {agent_starter_pack-0.3.3.dist-info → agent_starter_pack-0.21.0.dist-info}/WHEEL +0 -0
  255. {agent_starter_pack-0.3.3.dist-info → agent_starter_pack-0.21.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,205 +0,0 @@
1
- /**
2
- * Copyright 2024 Google LLC
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
-
17
- import { useRef, useState } from "react";
18
- import "./App.scss";
19
- import { LiveAPIProvider } from "./contexts/LiveAPIContext";
20
- import SidePanel from "./components/side-panel/SidePanel";
21
- import ControlTray from "./components/control-tray/ControlTray";
22
- import cn from "classnames";
23
-
24
- const defaultHost = "localhost:8000";
25
- const defaultUri = `ws://${defaultHost}/`;
26
-
27
- function App() {
28
- const videoRef = useRef<HTMLVideoElement>(null);
29
- const [videoStream, setVideoStream] = useState<MediaStream | null>(null);
30
- const [serverUrl, setServerUrl] = useState<string>(defaultUri);
31
- const [runId] = useState<string>(crypto.randomUUID());
32
- const [userId, setUserId] = useState<string>("user1");
33
-
34
- // Feedback state
35
- const [feedbackScore, setFeedbackScore] = useState<number>(10);
36
- const [feedbackText, setFeedbackText] = useState<string>("");
37
- const [sendFeedback, setShowFeedback] = useState(false);
38
-
39
- const submitFeedback = async () => {
40
- const feedbackUrl = new URL('feedback', serverUrl.replace('ws', 'http')).href;
41
-
42
- try {
43
- const response = await fetch(feedbackUrl, {
44
- method: 'POST',
45
- headers: {
46
- 'Content-Type': 'application/json'
47
- },
48
- body: JSON.stringify({
49
- score: feedbackScore,
50
- text: feedbackText,
51
- run_id: runId,
52
- user_id: userId,
53
- log_type: "feedback"
54
- })
55
- });
56
- if (!response.ok) {
57
- throw new Error(`Failed to submit feedback: Server returned status ${response.status} ${response.statusText}`);
58
- }
59
-
60
- // Clear feedback after successful submission
61
- setFeedbackScore(10);
62
- setFeedbackText("");
63
- setShowFeedback(false);
64
- alert("Feedback submitted successfully!");
65
- } catch (error) {
66
- console.error('Error submitting feedback:', error);
67
- alert(`Failed to submit feedback: ${error}`);
68
- }
69
- };
70
-
71
- return (
72
- <div className="App">
73
- <LiveAPIProvider url={serverUrl} userId={userId}>
74
- <div className="streaming-console">
75
- <SidePanel />
76
- <main>
77
- <div className="main-app-area">
78
- <video
79
- className={cn("stream", {
80
- hidden: !videoRef.current || !videoStream,
81
- })}
82
- ref={videoRef}
83
- autoPlay
84
- playsInline
85
- />
86
- </div>
87
- <ControlTray
88
- videoRef={videoRef}
89
- supportsVideo={true}
90
- onVideoStreamChange={setVideoStream}
91
- >
92
- </ControlTray>
93
- <div className="url-setup" style={{position: 'absolute', top: 0, left: 0, right: 0, pointerEvents: 'auto', zIndex: 1000, padding: '2px', marginBottom: '2px', display: 'flex', justifyContent: 'space-between', alignItems: 'center', background: 'rgba(255, 255, 255, 0.9)'}}>
94
- <div>
95
- <label htmlFor="server-url">Server URL:</label>
96
- <input
97
- id="server-url"
98
- type="text"
99
- value={serverUrl}
100
- onChange={(e) => setServerUrl(e.target.value)}
101
- placeholder="Enter server URL"
102
- style={{
103
- cursor: 'text',
104
- padding: '4px',
105
- margin: '0 4px',
106
- borderRadius: '2px',
107
- border: '1px solid #ccc',
108
- fontSize: '14px',
109
- fontFamily: 'system-ui, -apple-system, sans-serif',
110
- width: '200px'
111
- }}
112
- />
113
- <label htmlFor="user-id">User ID:</label>
114
- <input
115
- id="user-id"
116
- type="text"
117
- value={userId}
118
- onChange={(e) => setUserId(e.target.value)}
119
- placeholder="Enter user ID"
120
- style={{
121
- cursor: 'text',
122
- padding: '4px',
123
- margin: '0 4px',
124
- borderRadius: '2px',
125
- border: '1px solid #ccc',
126
- fontSize: '14px',
127
- fontFamily: 'system-ui, -apple-system, sans-serif',
128
- width: '100px'
129
- }}
130
- />
131
- </div>
132
-
133
- {/* Feedback Button */}
134
- <button
135
- onClick={() => setShowFeedback(!sendFeedback)}
136
- style={{
137
- padding: '5px 10px',
138
- margin: '10px',
139
- cursor: 'pointer'
140
- }}
141
- >
142
- {sendFeedback ? 'Hide Feedback' : 'Send Feedback'}
143
- </button>
144
- </div>
145
-
146
- {/* Feedback Overlay Section */}
147
- {sendFeedback && (
148
- <div className="feedback-section" style={{
149
- position: 'absolute',
150
- top: '50%',
151
- left: '50%',
152
- transform: 'translate(-50%, -50%)',
153
- padding: '20px',
154
- background: 'rgba(255, 255, 255, 0.95)',
155
- boxShadow: '0 0 10px rgba(0,0,0,0.2)',
156
- borderRadius: '8px',
157
- zIndex: 1001,
158
- minWidth: '300px'
159
- }}>
160
- <h3>Provide Feedback</h3>
161
- <div>
162
- <label htmlFor="feedback-score">Score (0-10): </label>
163
- <input
164
- id="feedback-score"
165
- type="number"
166
- min="0"
167
- max="10"
168
- value={feedbackScore}
169
- onChange={(e) => setFeedbackScore(Number(e.target.value))}
170
- style={{margin: '0 10px'}}
171
- />
172
- </div>
173
- <div style={{marginTop: '10px'}}>
174
- <label htmlFor="feedback-text">Comments: </label>
175
- <textarea
176
- id="feedback-text"
177
- value={feedbackText}
178
- onChange={(e) => setFeedbackText(e.target.value)}
179
- style={{
180
- width: '100%',
181
- height: '60px',
182
- margin: '5px 0'
183
- }}
184
- />
185
- </div>
186
- <button
187
- onClick={submitFeedback}
188
- style={{
189
- padding: '5px 10px',
190
- marginTop: '5px',
191
- cursor: 'pointer'
192
- }}
193
- >
194
- Submit Feedback
195
- </button>
196
- </div>
197
- )}
198
- </main>
199
- </div>
200
- </LiveAPIProvider>
201
- </div>
202
- );
203
- }
204
-
205
- export default App;
@@ -1,217 +0,0 @@
1
- /**
2
- * Copyright 2024 Google LLC
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
-
17
- import cn from "classnames";
18
-
19
- import { memo, ReactNode, RefObject, useEffect, useRef, useState } from "react";
20
- import { useLiveAPIContext } from "../../contexts/LiveAPIContext";
21
- import { UseMediaStreamResult } from "../../hooks/use-media-stream-mux";
22
- import { useScreenCapture } from "../../hooks/use-screen-capture";
23
- import { useWebcam } from "../../hooks/use-webcam";
24
- import { AudioRecorder } from "../../utils/audio-recorder";
25
- import AudioPulse from "../audio-pulse/AudioPulse";
26
- import "./control-tray.scss";
27
-
28
- export type ControlTrayProps = {
29
- videoRef: RefObject<HTMLVideoElement>;
30
- children?: ReactNode;
31
- supportsVideo: boolean;
32
- onVideoStreamChange?: (stream: MediaStream | null) => void;
33
- };
34
-
35
- type MediaStreamButtonProps = {
36
- isStreaming: boolean;
37
- onIcon: string;
38
- offIcon: string;
39
- start: () => Promise<any>;
40
- stop: () => any;
41
- };
42
-
43
- /**
44
- * button used for triggering webcam or screen-capture
45
- */
46
- const MediaStreamButton = memo(
47
- ({ isStreaming, onIcon, offIcon, start, stop }: MediaStreamButtonProps) =>
48
- isStreaming ? (
49
- <button className="action-button" onClick={stop}>
50
- <span className="material-symbols-outlined">{onIcon}</span>
51
- </button>
52
- ) : (
53
- <button className="action-button" onClick={start}>
54
- <span className="material-symbols-outlined">{offIcon}</span>
55
- </button>
56
- ),
57
- );
58
-
59
- function ControlTray({
60
- videoRef,
61
- children,
62
- onVideoStreamChange = () => {},
63
- supportsVideo,
64
- }: ControlTrayProps) {
65
- const videoStreams = [useWebcam(), useScreenCapture()];
66
- const [activeVideoStream, setActiveVideoStream] =
67
- useState<MediaStream | null>(null);
68
- const [webcam, screenCapture] = videoStreams;
69
- const [inVolume, setInVolume] = useState(0);
70
- const [audioRecorder] = useState(() => new AudioRecorder());
71
- const [muted, setMuted] = useState(false);
72
- const renderCanvasRef = useRef<HTMLCanvasElement>(null);
73
- const connectButtonRef = useRef<HTMLButtonElement>(null);
74
-
75
- const { client, connected, connect, disconnect, volume } =
76
- useLiveAPIContext();
77
-
78
- useEffect(() => {
79
- if (!connected && connectButtonRef.current) {
80
- connectButtonRef.current.focus();
81
- }
82
- }, [connected]);
83
- useEffect(() => {
84
- document.documentElement.style.setProperty(
85
- "--volume",
86
- `${Math.max(5, Math.min(inVolume * 200, 8))}px`,
87
- );
88
- }, [inVolume]);
89
-
90
- useEffect(() => {
91
- const onData = (base64: string) => {
92
- client.sendRealtimeInput([
93
- {
94
- mimeType: "audio/pcm;rate=16000",
95
- data: base64,
96
- },
97
- ]);
98
- };
99
- if (connected && !muted && audioRecorder) {
100
- audioRecorder.on("data", onData).on("volume", setInVolume).start();
101
- } else {
102
- audioRecorder.stop();
103
- }
104
- return () => {
105
- audioRecorder.off("data", onData).off("volume", setInVolume);
106
- };
107
- }, [connected, client, muted, audioRecorder]);
108
-
109
- useEffect(() => {
110
- if (videoRef.current) {
111
- videoRef.current.srcObject = activeVideoStream;
112
- }
113
-
114
- let timeoutId = -1;
115
-
116
- function sendVideoFrame() {
117
- const video = videoRef.current;
118
- const canvas = renderCanvasRef.current;
119
-
120
- if (!video || !canvas) {
121
- return;
122
- }
123
-
124
- const ctx = canvas.getContext("2d")!;
125
- canvas.width = video.videoWidth * 0.25;
126
- canvas.height = video.videoHeight * 0.25;
127
- if (canvas.width + canvas.height > 0) {
128
- ctx.drawImage(videoRef.current, 0, 0, canvas.width, canvas.height);
129
- const base64 = canvas.toDataURL("image/jpeg", 1.0);
130
- const data = base64.slice(base64.indexOf(",") + 1, Infinity);
131
- client.sendRealtimeInput([{ mimeType: "image/jpeg", data }]);
132
- }
133
- if (connected) {
134
- timeoutId = window.setTimeout(sendVideoFrame, 1000 / 0.5);
135
- }
136
- }
137
- if (connected && activeVideoStream !== null) {
138
- requestAnimationFrame(sendVideoFrame);
139
- }
140
- return () => {
141
- clearTimeout(timeoutId);
142
- };
143
- }, [connected, activeVideoStream, client, videoRef]);
144
-
145
- //handler for swapping from one video-stream to the next
146
- const changeStreams = (next?: UseMediaStreamResult) => async () => {
147
- if (next) {
148
- const mediaStream = await next.start();
149
- setActiveVideoStream(mediaStream);
150
- onVideoStreamChange(mediaStream);
151
- } else {
152
- setActiveVideoStream(null);
153
- onVideoStreamChange(null);
154
- }
155
-
156
- videoStreams.filter((msr) => msr !== next).forEach((msr) => msr.stop());
157
- };
158
-
159
- return (
160
- <section className="control-tray">
161
- <canvas style={{ display: "none" }} ref={renderCanvasRef} />
162
- <nav className={cn("actions-nav", { disabled: !connected })}>
163
- <button
164
- className={cn("action-button mic-button")}
165
- onClick={() => setMuted(!muted)}
166
- >
167
- {!muted ? (
168
- <span className="material-symbols-outlined filled">mic</span>
169
- ) : (
170
- <span className="material-symbols-outlined filled">mic_off</span>
171
- )}
172
- </button>
173
-
174
- <div className="action-button no-action outlined">
175
- <AudioPulse volume={volume} active={connected} hover={false} />
176
- </div>
177
-
178
- {supportsVideo && (
179
- <>
180
- <MediaStreamButton
181
- isStreaming={screenCapture.isStreaming}
182
- start={changeStreams(screenCapture)}
183
- stop={changeStreams()}
184
- onIcon="cancel_presentation"
185
- offIcon="present_to_all"
186
- />
187
- <MediaStreamButton
188
- isStreaming={webcam.isStreaming}
189
- start={changeStreams(webcam)}
190
- stop={changeStreams()}
191
- onIcon="videocam_off"
192
- offIcon="videocam"
193
- />
194
- </>
195
- )}
196
- {children}
197
- </nav>
198
-
199
- <div className={cn("connection-container", { connected })}>
200
- <div className="connection-button-container">
201
- <button
202
- ref={connectButtonRef}
203
- className={cn("action-button connect-toggle", { connected })}
204
- onClick={connected ? disconnect : connect}
205
- >
206
- <span className="material-symbols-outlined filled">
207
- {connected ? "pause" : "play_arrow"}
208
- </span>
209
- </button>
210
- </div>
211
- <span className="text-indicator">Streaming</span>
212
- </div>
213
- </section>
214
- );
215
- }
216
-
217
- export default memo(ControlTray);
@@ -1,201 +0,0 @@
1
- /**
2
- * Copyright 2025 Google LLC
3
- *
4
- * Licensed under the Apache License, Version 2.0 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * http://www.apache.org/licenses/LICENSE-2.0
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" BASIS,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
-
17
- /* stylelint-disable */
18
- .action-button {
19
- display: flex;
20
- align-items: center;
21
- justify-content: center;
22
- background: var(--Neutral-20);
23
- color: var(--Neutral-60);
24
- font-size: 1.25rem;
25
- line-height: 1.75rem;
26
- text-transform: lowercase;
27
- cursor: pointer;
28
- animation: opacity-pulse 3s ease-in infinite;
29
- transition: all 0.2s ease-in-out;
30
- width: 48px;
31
- height: 48px;
32
- border-radius: 18px;
33
- border: 1px solid rgba(0, 0, 0, 0);
34
- user-select: none;
35
- cursor: pointer;
36
-
37
- &:focus {
38
- border: 2px solid var(--Neutral-20);
39
- outline: 2px solid var(--Neutral-80);
40
- }
41
-
42
- &.outlined {
43
- background: var(--Neutral-2);
44
- border: 1px solid var(--Neutral-20);
45
- }
46
-
47
- .no-action {
48
- pointer-events: none;
49
- }
50
-
51
- &:hover {
52
- background: rgba(0, 0, 0, 0);
53
- border: 1px solid var(--Neutral-20);
54
- }
55
-
56
- &.connected {
57
- background: var(--Blue-800);
58
- color: var(--Blue-500);
59
-
60
- &:hover {
61
- border: 1px solid var(--Blue-500);
62
- }
63
- }
64
- }
65
-
66
- @property --volume {
67
- syntax: "length";
68
- inherit: false;
69
- initial-value: 0px;
70
- }
71
-
72
- .disabled .mic-button,
73
- .mic-button.disabled {
74
- &:before {
75
- background: rgba(0, 0, 0, 0);
76
- }
77
- }
78
-
79
- .mic-button {
80
- position: relative;
81
- background-color: var(--accent-red);
82
- z-index: 1;
83
- color: black;
84
- transition: all 0.2s ease-in;
85
-
86
- &:focus {
87
- border: 2px solid var(--Neutral-20);
88
- outline: 2px solid var(--Red-500);
89
- }
90
-
91
- &:hover {
92
- background-color: var(--Red-400);
93
- }
94
-
95
- &:before {
96
- position: absolute;
97
- z-index: -1;
98
- top: calc(var(--volume) * -1);
99
- left: calc(var(--volume) * -1);
100
- display: block;
101
- content: "";
102
- opacity: 0.35;
103
- background-color: var(--Red-500);
104
- width: calc(100% + var(--volume) * 2);
105
- height: calc(100% + var(--volume) * 2);
106
- border-radius: 24px;
107
- transition: all 0.02s ease-in-out;
108
- }
109
- }
110
-
111
- .connect-toggle {
112
- &:focus {
113
- border: 2px solid var(--Neutral-20);
114
- outline: 2px solid var(--Neutral-80);
115
- }
116
-
117
- &:not(.connected) {
118
- background-color: var(--Blue-500);
119
- color: var(--Neutral-5);
120
- }
121
- }
122
-
123
- .control-tray {
124
- position: absolute;
125
- bottom: 0;
126
- left: 50%;
127
- transform: translate(-50%, 0);
128
- display: inline-flex;
129
- justify-content: center;
130
- align-items: flex-start;
131
- gap: 8px;
132
- padding-bottom: 18px;
133
-
134
- .disabled .action-button,
135
- .action-button.disabled {
136
- background: rgba(0, 0, 0, 0);
137
- border: 1px solid var(--Neutral-30, #404547);
138
- color: var(--Neutral-30);
139
- }
140
-
141
- .connection-container {
142
- display: flex;
143
- flex-direction: column;
144
- justify-content: center;
145
- align-items: center;
146
- gap: 4px;
147
-
148
- .connection-button-container {
149
- border-radius: 27px;
150
- border: 1px solid var(--Neutral-30);
151
- background: var(--Neutral-5);
152
- padding: 10px;
153
- }
154
-
155
- .text-indicator {
156
- font-size: 11px;
157
- color: var(--Blue-500);
158
- user-select: none;
159
- }
160
-
161
- &:not(.connected) {
162
- .text-indicator {
163
- opacity: 0;
164
- }
165
- }
166
- }
167
- }
168
-
169
- .actions-nav {
170
- background: var(--Neutral-5);
171
- border: 1px solid var(--Neutral-30);
172
- border-radius: 27px;
173
- display: inline-flex;
174
- gap: 12px;
175
- align-items: center;
176
- overflow: clip;
177
- padding: 10px;
178
-
179
- transition: all 0.6s ease-in;
180
-
181
- & > * {
182
- display: flex;
183
- align-items: center;
184
- flex-direction: column;
185
- gap: 1rem;
186
- }
187
- }
188
-
189
- @keyframes opacity-pulse {
190
- 0% {
191
- opacity: 0.9;
192
- }
193
-
194
- 50% {
195
- opacity: 1;
196
- }
197
-
198
- 100% {
199
- opacity: 0.9;
200
- }
201
- }