beamlit 0.0.33rc49__tar.gz → 0.0.34__tar.gz

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 (308) hide show
  1. {beamlit-0.0.33rc49 → beamlit-0.0.34}/PKG-INFO +21 -3
  2. {beamlit-0.0.33rc49 → beamlit-0.0.34}/pyproject.toml +21 -3
  3. beamlit-0.0.34/src/beamlit/agents/__init__.py +5 -0
  4. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/agents/chat.py +16 -4
  5. beamlit-0.0.34/src/beamlit/agents/decorator.py +143 -0
  6. beamlit-0.0.34/src/beamlit/agents/thread.py +14 -0
  7. beamlit-0.0.34/src/beamlit/api/workspaces/workspace_quotas_request.py +97 -0
  8. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/authentication/clientcredentials.py +5 -3
  9. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/authentication/device_mode.py +4 -4
  10. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/common/__init__.py +1 -2
  11. beamlit-0.0.34/src/beamlit/common/instrumentation.py +291 -0
  12. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/common/settings.py +7 -64
  13. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/deploy/deploy.py +64 -60
  14. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/deploy/format.py +10 -0
  15. beamlit-0.0.34/src/beamlit/functions/__init__.py +5 -0
  16. beamlit-0.0.34/src/beamlit/functions/decorator.py +193 -0
  17. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/functions/github/github.py +0 -1
  18. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/__init__.py +51 -11
  19. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/agent.py +27 -15
  20. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/agent_metadata.py +1 -1
  21. beamlit-0.0.34/src/beamlit/models/agent_render.py +45 -0
  22. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/agent_spec.py +32 -5
  23. beamlit-0.0.34/src/beamlit/models/core_event.py +88 -0
  24. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/core_spec.py +14 -5
  25. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/core_spec_configurations.py +1 -1
  26. beamlit-0.0.34/src/beamlit/models/core_status.py +45 -0
  27. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/environment.py +2 -2
  28. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/environment_metadata.py +1 -1
  29. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/function.py +27 -15
  30. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/function_metadata.py +1 -1
  31. beamlit-0.0.34/src/beamlit/models/function_render.py +45 -0
  32. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/function_spec.py +14 -5
  33. beamlit-0.0.34/src/beamlit/models/histogram_bucket.py +79 -0
  34. beamlit-0.0.34/src/beamlit/models/histogram_stats.py +88 -0
  35. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/increase_and_rate_metric.py +0 -9
  36. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/integration_connection.py +2 -2
  37. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/integration_connection_spec.py +11 -2
  38. beamlit-0.0.34/src/beamlit/models/integration_repository.py +88 -0
  39. beamlit-0.0.34/src/beamlit/models/last_n_requests_metric.py +88 -0
  40. beamlit-0.0.34/src/beamlit/models/latency_metric.py +124 -0
  41. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/metadata.py +1 -1
  42. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/metric.py +18 -9
  43. beamlit-0.0.34/src/beamlit/models/metrics.py +159 -0
  44. beamlit-0.0.34/src/beamlit/models/metrics_models.py +45 -0
  45. beamlit-0.0.34/src/beamlit/models/metrics_request_total_per_code.py +45 -0
  46. beamlit-0.0.34/src/beamlit/models/metrics_rps_per_code.py +45 -0
  47. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/model.py +27 -15
  48. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/model_metadata.py +1 -1
  49. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/model_provider.py +2 -2
  50. beamlit-0.0.34/src/beamlit/models/model_render.py +45 -0
  51. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/model_spec.py +14 -14
  52. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/pending_invitation_accept.py +1 -1
  53. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/pending_invitation_render.py +3 -3
  54. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/policy.py +2 -2
  55. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/provider_config.py +1 -1
  56. beamlit-0.0.33rc49/src/beamlit/models/core_status.py → beamlit-0.0.34/src/beamlit/models/repository.py +22 -14
  57. beamlit-0.0.34/src/beamlit/models/repository_type_0.py +70 -0
  58. beamlit-0.0.34/src/beamlit/models/request_duration_over_time_metric.py +97 -0
  59. beamlit-0.0.34/src/beamlit/models/request_duration_over_time_metrics.py +74 -0
  60. beamlit-0.0.34/src/beamlit/models/request_total_by_origin_metric.py +103 -0
  61. beamlit-0.0.34/src/beamlit/models/request_total_by_origin_metric_request_total_by_origin.py +45 -0
  62. beamlit-0.0.34/src/beamlit/models/request_total_by_origin_metric_request_total_by_origin_and_code.py +45 -0
  63. beamlit-0.0.34/src/beamlit/models/request_total_metric.py +115 -0
  64. beamlit-0.0.34/src/beamlit/models/request_total_metric_request_total_per_code.py +45 -0
  65. beamlit-0.0.34/src/beamlit/models/request_total_metric_rps_per_code.py +45 -0
  66. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/resource_deployment_metrics.py +6 -4
  67. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/resource_deployment_metrics_query_per_second_per_region_per_code.py +1 -1
  68. beamlit-0.0.34/src/beamlit/models/resource_environment_metrics.py +250 -0
  69. beamlit-0.0.34/src/beamlit/models/resource_environment_metrics_request_total_per_code.py +45 -0
  70. beamlit-0.0.34/src/beamlit/models/resource_environment_metrics_rps_per_code.py +45 -0
  71. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/resource_metrics.py +1 -1
  72. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/runtime.py +2 -2
  73. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/store_agent.py +1 -1
  74. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/store_function.py +1 -1
  75. beamlit-0.0.34/src/beamlit/models/token_rate_metric.py +88 -0
  76. beamlit-0.0.34/src/beamlit/models/token_rate_metrics.py +106 -0
  77. beamlit-0.0.34/src/beamlit/models/token_total_metric.py +106 -0
  78. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/workspace.py +17 -8
  79. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/serve/app.py +9 -13
  80. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/integrationtest/agent.py +8 -5
  81. beamlit-0.0.34/src/integrationtest/main.py +11 -0
  82. {beamlit-0.0.33rc49 → beamlit-0.0.34}/uv.lock +94 -304
  83. beamlit-0.0.33rc49/src/beamlit/agents/__init__.py +0 -4
  84. beamlit-0.0.33rc49/src/beamlit/agents/decorator.py +0 -230
  85. beamlit-0.0.33rc49/src/beamlit/common/generate.py +0 -196
  86. beamlit-0.0.33rc49/src/beamlit/common/instrumentation.py +0 -123
  87. beamlit-0.0.33rc49/src/beamlit/functions/__init__.py +0 -5
  88. beamlit-0.0.33rc49/src/beamlit/functions/decorator.py +0 -45
  89. beamlit-0.0.33rc49/src/beamlit/models/metrics.py +0 -124
  90. beamlit-0.0.33rc49/src/beamlit/models/resource_environment_metrics.py +0 -170
  91. beamlit-0.0.33rc49/src/integrationtest/main.py +0 -35
  92. {beamlit-0.0.33rc49 → beamlit-0.0.34}/.gitignore +0 -0
  93. {beamlit-0.0.33rc49 → beamlit-0.0.34}/README.md +0 -0
  94. {beamlit-0.0.33rc49 → beamlit-0.0.34}/beamlit.yaml +0 -0
  95. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/__init__.py +0 -0
  96. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/agents/chain.py +0 -0
  97. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/__init__.py +0 -0
  98. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/agents/__init__.py +0 -0
  99. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/agents/create_agent.py +0 -0
  100. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/agents/create_agent_release.py +0 -0
  101. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/agents/delete_agent.py +0 -0
  102. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/agents/delete_agent_history.py +0 -0
  103. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/agents/get_agent.py +0 -0
  104. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/agents/get_agent_environment_logs.py +0 -0
  105. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/agents/get_agent_history.py +0 -0
  106. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/agents/get_agent_metrics.py +0 -0
  107. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/agents/get_agent_trace_ids.py +0 -0
  108. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/agents/list_agent_history.py +0 -0
  109. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/agents/list_agents.py +0 -0
  110. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/agents/put_agent_history.py +0 -0
  111. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/agents/update_agent.py +0 -0
  112. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/configurations/__init__.py +0 -0
  113. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/configurations/get_configuration.py +0 -0
  114. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/default/__init__.py +0 -0
  115. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/default/get_trace.py +0 -0
  116. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/default/get_trace_ids.py +0 -0
  117. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/default/get_trace_logs.py +0 -0
  118. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/environments/__init__.py +0 -0
  119. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/environments/create_environment.py +0 -0
  120. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/environments/delete_environment.py +0 -0
  121. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/environments/get_environment.py +0 -0
  122. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/environments/get_environment_metrics.py +0 -0
  123. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/environments/list_environments.py +0 -0
  124. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/environments/update_environment.py +0 -0
  125. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/functions/__init__.py +0 -0
  126. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/functions/create_function.py +0 -0
  127. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/functions/create_function_release.py +0 -0
  128. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/functions/delete_function.py +0 -0
  129. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/functions/get_function.py +0 -0
  130. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/functions/get_function_environment_logs.py +0 -0
  131. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/functions/get_function_metrics.py +0 -0
  132. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/functions/get_function_trace_ids.py +0 -0
  133. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/functions/list_functions.py +0 -0
  134. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/functions/update_function.py +0 -0
  135. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/history/__init__.py +0 -0
  136. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/history/get_agents_history.py +0 -0
  137. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/history/list_agents_history.py +0 -0
  138. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/integrations/__init__.py +0 -0
  139. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/integrations/create_integration_connection.py +0 -0
  140. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/integrations/delete_integration_connection.py +0 -0
  141. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/integrations/get_integration.py +0 -0
  142. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/integrations/get_integration_connection.py +0 -0
  143. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/integrations/get_integration_connection_model.py +0 -0
  144. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/integrations/get_integration_model.py +0 -0
  145. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/integrations/list_integration_connection_models.py +0 -0
  146. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/integrations/list_integration_connections.py +0 -0
  147. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/integrations/list_integration_models.py +0 -0
  148. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/integrations/update_integration_connection.py +0 -0
  149. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/invitations/__init__.py +0 -0
  150. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/invitations/list_all_pending_invitations.py +0 -0
  151. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/locations/__init__.py +0 -0
  152. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/locations/list_locations.py +0 -0
  153. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/metrics/__init__.py +0 -0
  154. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/metrics/get_metrics.py +0 -0
  155. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/model_providers/__init__.py +0 -0
  156. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/model_providers/create_model_provider.py +0 -0
  157. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/model_providers/delete_model_provider.py +0 -0
  158. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/model_providers/get_model_provider.py +0 -0
  159. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/model_providers/list_model_providers.py +0 -0
  160. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/model_providers/update_model_provider.py +0 -0
  161. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/models/__init__.py +0 -0
  162. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/models/create_model.py +0 -0
  163. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/models/delete_model.py +0 -0
  164. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/models/get_model.py +0 -0
  165. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/models/get_model_environment_logs.py +0 -0
  166. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/models/get_model_metrics.py +0 -0
  167. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/models/get_model_trace_ids.py +0 -0
  168. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/models/list_models.py +0 -0
  169. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/models/release_model.py +0 -0
  170. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/models/update_model.py +0 -0
  171. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/policies/__init__.py +0 -0
  172. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/policies/create_policy.py +0 -0
  173. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/policies/delete_policy.py +0 -0
  174. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/policies/get_policy.py +0 -0
  175. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/policies/list_policies.py +0 -0
  176. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/policies/update_policy.py +0 -0
  177. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/privateclusters/__init__.py +0 -0
  178. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/privateclusters/create_private_cluster.py +0 -0
  179. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/privateclusters/delete_private_cluster.py +0 -0
  180. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/privateclusters/get_private_cluster.py +0 -0
  181. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/privateclusters/get_private_cluster_health.py +0 -0
  182. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/privateclusters/list_private_clusters.py +0 -0
  183. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/privateclusters/update_private_cluster.py +0 -0
  184. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/privateclusters/update_private_cluster_health.py +0 -0
  185. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/service_accounts/__init__.py +0 -0
  186. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/service_accounts/create_api_key_for_service_account.py +0 -0
  187. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/service_accounts/create_workspace_service_account.py +0 -0
  188. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/service_accounts/delete_api_key_for_service_account.py +0 -0
  189. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/service_accounts/delete_workspace_service_account.py +0 -0
  190. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/service_accounts/get_workspace_service_accounts.py +0 -0
  191. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/service_accounts/list_api_keys_for_service_account.py +0 -0
  192. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/service_accounts/update_workspace_service_account.py +0 -0
  193. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/store/__init__.py +0 -0
  194. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/store/get_store_agent.py +0 -0
  195. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/store/get_store_function.py +0 -0
  196. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/store/list_store_agents.py +0 -0
  197. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/store/list_store_functions.py +0 -0
  198. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/workspaces/__init__.py +0 -0
  199. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/workspaces/accept_workspace_invitation.py +0 -0
  200. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/workspaces/create_worspace.py +0 -0
  201. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/workspaces/decline_workspace_invitation.py +0 -0
  202. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/workspaces/delete_workspace.py +0 -0
  203. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/workspaces/get_workspace.py +0 -0
  204. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/workspaces/invite_workspace_user.py +0 -0
  205. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/workspaces/leave_workspace.py +0 -0
  206. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/workspaces/list_workspace_users.py +0 -0
  207. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/workspaces/list_workspaces.py +0 -0
  208. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/workspaces/remove_workspace_user.py +0 -0
  209. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/workspaces/update_workspace.py +0 -0
  210. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/workspaces/update_workspace_user_role.py +0 -0
  211. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/authentication/__init__.py +0 -0
  212. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/authentication/apikey.py +0 -0
  213. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/authentication/authentication.py +0 -0
  214. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/authentication/credentials.py +0 -0
  215. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/client.py +0 -0
  216. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/common/error.py +0 -0
  217. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/common/logger.py +0 -0
  218. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/common/secrets.py +0 -0
  219. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/common/slugify.py +0 -0
  220. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/common/utils.py +0 -0
  221. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/deploy/__init__.py +0 -0
  222. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/deploy/parser.py +0 -0
  223. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/errors.py +0 -0
  224. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/functions/github/__init__.py +0 -0
  225. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/functions/github/kit/__init__.py +0 -0
  226. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/functions/github/kit/pull_request.py +0 -0
  227. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/functions/math/__init__.py +0 -0
  228. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/functions/math/math.py +0 -0
  229. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/functions/mcp/mcp.py +0 -0
  230. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/functions/remote/remote.py +0 -0
  231. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/functions/search/__init__.py +0 -0
  232. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/functions/search/search.py +0 -0
  233. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/acl.py +0 -0
  234. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/agent_chain.py +0 -0
  235. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/agent_history.py +0 -0
  236. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/agent_history_event.py +0 -0
  237. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/agent_release.py +0 -0
  238. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/api_key.py +0 -0
  239. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/configuration.py +0 -0
  240. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/continent.py +0 -0
  241. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/country.py +0 -0
  242. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/create_api_key_for_service_account_body.py +0 -0
  243. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/create_workspace_service_account_body.py +0 -0
  244. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/create_workspace_service_account_response_200.py +0 -0
  245. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/delete_workspace_service_account_response_200.py +0 -0
  246. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/environment_metrics.py +0 -0
  247. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/environment_spec.py +0 -0
  248. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/flavor.py +0 -0
  249. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/function_kit.py +0 -0
  250. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/function_release.py +0 -0
  251. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/get_trace_ids_response_200.py +0 -0
  252. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/get_trace_logs_response_200.py +0 -0
  253. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/get_trace_response_200.py +0 -0
  254. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/get_workspace_service_accounts_response_200_item.py +0 -0
  255. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/integration_config.py +0 -0
  256. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/integration_connection_config.py +0 -0
  257. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/integration_connection_secret.py +0 -0
  258. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/integration_model.py +0 -0
  259. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/invite_workspace_user_body.py +0 -0
  260. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/location_response.py +0 -0
  261. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/metadata_labels.py +0 -0
  262. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/model_private_cluster.py +0 -0
  263. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/model_release.py +0 -0
  264. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/owner_fields.py +0 -0
  265. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/pending_invitation.py +0 -0
  266. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/pending_invitation_render_invited_by.py +0 -0
  267. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/pending_invitation_render_workspace.py +0 -0
  268. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/pending_invitation_workspace_details.py +0 -0
  269. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/pod_template_spec.py +0 -0
  270. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/policy_location.py +0 -0
  271. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/policy_spec.py +0 -0
  272. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/private_cluster.py +0 -0
  273. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/private_location.py +0 -0
  274. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/qps.py +0 -0
  275. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/resource_deployment_metrics_inference_per_second_per_region.py +0 -0
  276. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/resource_environment_metrics_inference_per_region.py +0 -0
  277. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/resource_environment_metrics_inference_per_second_per_region.py +0 -0
  278. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/resource_environment_metrics_query_per_region_per_code.py +0 -0
  279. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/resource_environment_metrics_query_per_second_per_region_per_code.py +0 -0
  280. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/resource_log.py +0 -0
  281. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/runtime_readiness_probe.py +0 -0
  282. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/runtime_resources.py +0 -0
  283. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/serverless_config.py +0 -0
  284. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/spec_configuration.py +0 -0
  285. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/store_agent_labels.py +0 -0
  286. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/store_configuration.py +0 -0
  287. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/store_configuration_option.py +0 -0
  288. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/store_function_kit.py +0 -0
  289. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/store_function_labels.py +0 -0
  290. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/store_function_parameter.py +0 -0
  291. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/time_fields.py +0 -0
  292. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/trace_ids_response.py +0 -0
  293. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/update_workspace_service_account_body.py +0 -0
  294. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/update_workspace_service_account_response_200.py +0 -0
  295. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/update_workspace_user_role_body.py +0 -0
  296. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/websocket_channel.py +0 -0
  297. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/workspace_labels.py +0 -0
  298. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/workspace_user.py +0 -0
  299. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/py.typed +0 -0
  300. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/run.py +0 -0
  301. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/serve/middlewares/__init__.py +0 -0
  302. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/serve/middlewares/accesslog.py +0 -0
  303. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/serve/middlewares/processtime.py +0 -0
  304. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/types.py +0 -0
  305. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/integrationtest/beamlit.yaml +0 -0
  306. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/integrationtest/functions/helloworld.py +0 -0
  307. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/integrationtest/pyproject.toml +0 -0
  308. {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/integrationtest/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: beamlit
3
- Version: 0.0.33rc49
3
+ Version: 0.0.34
4
4
  Summary: Add your description here
5
5
  Author-email: cploujoux <ch.ploujoux@gmail.com>
6
6
  Requires-Python: >=3.12
@@ -15,16 +15,34 @@ Requires-Dist: langgraph<0.3.0,>=0.2.40
15
15
  Requires-Dist: mcp>=1.1.2
16
16
  Requires-Dist: opentelemetry-api>=1.28.2
17
17
  Requires-Dist: opentelemetry-exporter-otlp>=1.28.2
18
+ Requires-Dist: opentelemetry-instrumentation-anthropic>=0.35.0
19
+ Requires-Dist: opentelemetry-instrumentation-chromadb>=0.35.0
20
+ Requires-Dist: opentelemetry-instrumentation-cohere>=0.35.0
18
21
  Requires-Dist: opentelemetry-instrumentation-fastapi>=0.49b2
22
+ Requires-Dist: opentelemetry-instrumentation-groq>=0.35.0
19
23
  Requires-Dist: opentelemetry-instrumentation-httpx>=0.49b2
20
- Requires-Dist: opentelemetry-instrumentation-logging>=0.49b2
24
+ Requires-Dist: opentelemetry-instrumentation-lancedb>=0.35.0
25
+ Requires-Dist: opentelemetry-instrumentation-langchain>=0.35.0
26
+ Requires-Dist: opentelemetry-instrumentation-llamaindex>=0.35.0
27
+ Requires-Dist: opentelemetry-instrumentation-marqo>=0.35.0
28
+ Requires-Dist: opentelemetry-instrumentation-milvus>=0.35.0
29
+ Requires-Dist: opentelemetry-instrumentation-mistralai>=0.35.0
30
+ Requires-Dist: opentelemetry-instrumentation-ollama>=0.35.0
31
+ Requires-Dist: opentelemetry-instrumentation-openai>=0.35.0
32
+ Requires-Dist: opentelemetry-instrumentation-pinecone>=0.35.0
33
+ Requires-Dist: opentelemetry-instrumentation-qdrant>=0.35.0
34
+ Requires-Dist: opentelemetry-instrumentation-replicate>=0.35.0
35
+ Requires-Dist: opentelemetry-instrumentation-system-metrics>=0.50b0
36
+ Requires-Dist: opentelemetry-instrumentation-together>=0.35.0
37
+ Requires-Dist: opentelemetry-instrumentation-watsonx>=0.35.0
38
+ Requires-Dist: opentelemetry-instrumentation-weaviate>=0.35.0
21
39
  Requires-Dist: opentelemetry-sdk>=1.28.2
22
40
  Requires-Dist: pydantic-settings<2.7.0,>=2.6.1
23
41
  Requires-Dist: pydantic<2.11.0,>=2.10.3
42
+ Requires-Dist: pyjwt>=2.10.1
24
43
  Requires-Dist: python-dateutil>=2.8.0
25
44
  Requires-Dist: pyyaml<6.1.0,>=6.0.2
26
45
  Requires-Dist: requests<2.33.0,>=2.32.3
27
- Requires-Dist: traceloop-sdk>=0.33.12
28
46
  Description-Content-Type: text/markdown
29
47
 
30
48
  # beamlit
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "beamlit"
3
- version = "0.0.33.pre-49"
3
+ version = "0.0.34"
4
4
  description = "Add your description here"
5
5
  readme = "README.md"
6
6
  authors = [
@@ -26,13 +26,31 @@ dependencies = [
26
26
  "fastapi[standard]>=0.115.4,<0.116.0",
27
27
  "asgi-correlation-id>=4.3.4,<5.0.0",
28
28
  "mcp>=1.1.2",
29
- "traceloop-sdk>=0.33.12",
30
29
  "opentelemetry-sdk>=1.28.2",
31
30
  "opentelemetry-exporter-otlp>=1.28.2",
32
31
  "opentelemetry-api>=1.28.2",
33
32
  "opentelemetry-instrumentation-fastapi>=0.49b2",
34
33
  "opentelemetry-instrumentation-httpx>=0.49b2",
35
- "opentelemetry-instrumentation-logging>=0.49b2"
34
+ "opentelemetry-instrumentation-system-metrics>=0.50b0",
35
+ "pyjwt>=2.10.1",
36
+ "opentelemetry-instrumentation-anthropic>=0.35.0",
37
+ "opentelemetry-instrumentation-chromadb>=0.35.0",
38
+ "opentelemetry-instrumentation-cohere>=0.35.0",
39
+ "opentelemetry-instrumentation-groq>=0.35.0",
40
+ "opentelemetry-instrumentation-lancedb>=0.35.0",
41
+ "opentelemetry-instrumentation-langchain>=0.35.0",
42
+ "opentelemetry-instrumentation-llamaindex>=0.35.0",
43
+ "opentelemetry-instrumentation-marqo>=0.35.0",
44
+ "opentelemetry-instrumentation-milvus>=0.35.0",
45
+ "opentelemetry-instrumentation-mistralai>=0.35.0",
46
+ "opentelemetry-instrumentation-ollama>=0.35.0",
47
+ "opentelemetry-instrumentation-openai>=0.35.0",
48
+ "opentelemetry-instrumentation-pinecone>=0.35.0",
49
+ "opentelemetry-instrumentation-qdrant>=0.35.0",
50
+ "opentelemetry-instrumentation-replicate>=0.35.0",
51
+ "opentelemetry-instrumentation-together>=0.35.0",
52
+ "opentelemetry-instrumentation-watsonx>=0.35.0",
53
+ "opentelemetry-instrumentation-weaviate>=0.35.0",
36
54
  ]
37
55
  [dependency-groups]
38
56
  dev = [
@@ -0,0 +1,5 @@
1
+ from .chat import get_chat_model
2
+ from .decorator import agent
3
+ from .thread import get_default_thread
4
+
5
+ __all__ = ["agent", "get_chat_model", "get_default_thread"]
@@ -1,5 +1,9 @@
1
1
  from logging import getLogger
2
+ from typing import Tuple, Union
2
3
 
4
+ from langchain_core.language_models import BaseChatModel
5
+
6
+ from beamlit.api.models import get_model
3
7
  from beamlit.authentication import get_authentication_headers, new_client
4
8
  from beamlit.common.settings import get_settings
5
9
  from beamlit.models import Model
@@ -39,11 +43,17 @@ def get_cohere_chat_model(**kwargs):
39
43
 
40
44
  return ChatCohere(**kwargs)
41
45
 
42
- def get_chat_model(name: str, agent_model: Model):
46
+ def get_chat_model(name: str, agent_model: Union[Model, None] = None) -> Tuple[BaseChatModel, str, str]:
43
47
  settings = get_settings()
44
48
  client = new_client()
45
49
 
46
- environment = (agent_model.metadata and agent_model.metadata.environment) or settings.environment
50
+ if agent_model is None:
51
+ try:
52
+ agent_model = get_model.sync(name, client=client, environment=settings.environment)
53
+ except Exception:
54
+ logger.warning(f"Model {name} not found, defaulting to gpt-4o-mini")
55
+
56
+ environment = (agent_model and agent_model.metadata and agent_model.metadata.environment) or settings.environment
47
57
  headers = get_authentication_headers(settings)
48
58
  headers["X-Beamlit-Environment"] = environment
49
59
 
@@ -84,7 +94,8 @@ def get_chat_model(name: str, agent_model: Model):
84
94
  }
85
95
 
86
96
  provider = (
87
- agent_model.spec
97
+ agent_model
98
+ and agent_model.spec
88
99
  and agent_model.spec.runtime
89
100
  and agent_model.spec.runtime.type_
90
101
  )
@@ -93,7 +104,8 @@ def get_chat_model(name: str, agent_model: Model):
93
104
  provider = "openai"
94
105
 
95
106
  model = (
96
- agent_model.spec
107
+ agent_model
108
+ and agent_model.spec
97
109
  and agent_model.spec.runtime
98
110
  and agent_model.spec.runtime.model
99
111
  )
@@ -0,0 +1,143 @@
1
+ # Import necessary modules
2
+ import functools
3
+ import inspect
4
+ from logging import getLogger
5
+
6
+ from langgraph.checkpoint.memory import MemorySaver
7
+ from langgraph.prebuilt import create_react_agent
8
+
9
+ from beamlit.api.models import get_model, list_models
10
+ from beamlit.authentication import new_client
11
+ from beamlit.common.settings import init
12
+ from beamlit.errors import UnexpectedStatus
13
+ from beamlit.functions import get_functions
14
+ from beamlit.models import Agent, AgentMetadata, AgentSpec
15
+
16
+ from .chat import get_chat_model
17
+
18
+
19
+ def agent(
20
+ agent: Agent | dict = None,
21
+ override_model=None,
22
+ override_agent=None,
23
+ mcp_hub=None,
24
+ remote_functions=None,
25
+ ):
26
+ logger = getLogger(__name__)
27
+ try:
28
+ if agent is not None and not isinstance(agent, dict):
29
+ raise Exception(
30
+ 'agent must be a dictionary, example: @agent(agent={"metadata": {"name": "my_agent"}})'
31
+ )
32
+
33
+ client = new_client()
34
+ chat_model = override_model or None
35
+ settings = init()
36
+
37
+ def wrapper(func):
38
+ agent_kwargs = any(
39
+ param.name == "agent"
40
+ for param in inspect.signature(func).parameters.values()
41
+ )
42
+ model_kwargs = any(
43
+ param.name == "model"
44
+ for param in inspect.signature(func).parameters.values()
45
+ )
46
+ functions_kwargs = any(
47
+ param.name == "functions"
48
+ for param in inspect.signature(func).parameters.values()
49
+ )
50
+ @functools.wraps(func)
51
+ def wrapped(*args, **kwargs):
52
+ if agent_kwargs:
53
+ kwargs["agent"] = settings.agent.agent
54
+ if model_kwargs:
55
+ kwargs["model"] = settings.agent.chat_model
56
+ if functions_kwargs:
57
+ kwargs["functions"] = settings.agent.functions
58
+ return func(*args, **kwargs)
59
+
60
+ return wrapped
61
+
62
+ if agent is not None:
63
+ metadata = AgentMetadata(**agent.get("metadata", {}))
64
+ spec = AgentSpec(**agent.get("spec", {}))
65
+ agent = Agent(metadata=metadata, spec=spec)
66
+ if agent.spec.model and chat_model is None:
67
+ try:
68
+ response = get_model.sync_detailed(
69
+ agent.spec.model, environment=settings.environment, client=client
70
+ )
71
+ settings.agent.model = response.parsed
72
+ except UnexpectedStatus as e:
73
+ if e.status_code == 404 and settings.environment != "production":
74
+ try:
75
+ response = get_model.sync_detailed(
76
+ agent.spec.model, environment="production", client=client
77
+ )
78
+ settings.agent.model = response.parsed
79
+ except UnexpectedStatus as e:
80
+ if e.status_code == 404:
81
+ raise ValueError(f"Model {agent.spec.model} not found")
82
+ else:
83
+ raise e
84
+ except Exception as e:
85
+ raise e
86
+
87
+ if settings.agent.model:
88
+ chat_model, provider, model = get_chat_model(agent.spec.model, settings.agent.model)
89
+ settings.agent.chat_model = chat_model
90
+ logger.info(f"Chat model configured, using: {provider}:{model}")
91
+
92
+ functions = get_functions(
93
+ client=client,
94
+ dir=settings.agent.functions_directory,
95
+ mcp_hub=mcp_hub,
96
+ remote_functions=remote_functions,
97
+ chain=agent.spec.agent_chain,
98
+ remote_functions_empty=not remote_functions,
99
+ warning=chat_model is not None,
100
+ )
101
+ settings.agent.functions = functions
102
+
103
+ if override_agent is None:
104
+ if chat_model is None:
105
+ models_select = ""
106
+ try:
107
+ models = list_models.sync_detailed(
108
+ environment=settings.environment, client=client
109
+ )
110
+ models = ", ".join([model.metadata.name for model in models.parsed])
111
+ models_select = f"You can select one from the your models: {models}"
112
+ except Exception:
113
+ pass
114
+
115
+ raise ValueError(f"You must provide a model.\n"
116
+ f"{models_select}\n"
117
+ f"You can create one at {settings.app_url}/{settings.workspace}/global-inference-network/models/create\n"
118
+ "Add it to your agent spec\n"
119
+ "agent={\n"
120
+ " \"metadata\": {\n"
121
+ f" \"name\": \"{agent.metadata.name}\",\n"
122
+ " },\n"
123
+ " \"spec\": {\n"
124
+ " \"model\": \"MODEL_NAME\",\n"
125
+ f" \"description\": \"{agent.spec.description}\",\n"
126
+ " },\n"
127
+ "}")
128
+ memory = MemorySaver()
129
+ if len(functions) == 0:
130
+ raise ValueError("You can define this function in directory "
131
+ f'"{settings.agent.functions_directory}". Here is a sample function you can use:\n\n'
132
+ "from beamlit.functions import function\n\n"
133
+ "@function()\n"
134
+ "def hello_world(query: str):\n"
135
+ " return 'Hello, world!'\n")
136
+ _agent = create_react_agent(chat_model, functions, checkpointer=memory)
137
+ settings.agent.agent = _agent
138
+ else:
139
+ settings.agent.agent = override_agent
140
+ return wrapper
141
+ except Exception as e:
142
+ logger.error(f"Error in agent decorator: {e!s} at line {e.__traceback__.tb_lineno}")
143
+ raise e
@@ -0,0 +1,14 @@
1
+
2
+ import jwt
3
+ from fastapi import Request
4
+
5
+
6
+ def get_default_thread(request: Request) -> str:
7
+ if request.headers.get("X-Beamlit-Sub"):
8
+ return request.headers.get("X-Beamlit-Sub")
9
+ authorization = request.headers.get("Authorization", request.headers.get("X-Beamlit-Authorization"))
10
+ if authorization and len(authorization.split("Bearer ")) > 1:
11
+ token = authorization.split(" ")[1]
12
+ decoded = jwt.decode(token, options={"verify_signature": False})
13
+ return decoded["sub"]
14
+ return ""
@@ -0,0 +1,97 @@
1
+ from http import HTTPStatus
2
+ from typing import Any, Optional, Union
3
+
4
+ import httpx
5
+
6
+ from ... import errors
7
+ from ...client import AuthenticatedClient, Client
8
+ from ...types import Response
9
+
10
+
11
+ def _get_kwargs(
12
+ workspace_name: str,
13
+ ) -> dict[str, Any]:
14
+ _kwargs: dict[str, Any] = {
15
+ "method": "put",
16
+ "url": f"/workspaces/{workspace_name}/quotas",
17
+ }
18
+
19
+ return _kwargs
20
+
21
+
22
+ def _parse_response(*, client: Union[AuthenticatedClient, Client], response: httpx.Response) -> Optional[Any]:
23
+ if response.status_code == 200:
24
+ return None
25
+ if client.raise_on_unexpected_status:
26
+ raise errors.UnexpectedStatus(response.status_code, response.content)
27
+ else:
28
+ return None
29
+
30
+
31
+ def _build_response(*, client: Union[AuthenticatedClient, Client], response: httpx.Response) -> Response[Any]:
32
+ return Response(
33
+ status_code=HTTPStatus(response.status_code),
34
+ content=response.content,
35
+ headers=response.headers,
36
+ parsed=_parse_response(client=client, response=response),
37
+ )
38
+
39
+
40
+ def sync_detailed(
41
+ workspace_name: str,
42
+ *,
43
+ client: AuthenticatedClient,
44
+ ) -> Response[Any]:
45
+ """Request workspace quotas
46
+
47
+ Send a request to update quotas for a workspace.
48
+
49
+ Args:
50
+ workspace_name (str):
51
+
52
+ Raises:
53
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
54
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
55
+
56
+ Returns:
57
+ Response[Any]
58
+ """
59
+
60
+ kwargs = _get_kwargs(
61
+ workspace_name=workspace_name,
62
+ )
63
+
64
+ response = client.get_httpx_client().request(
65
+ **kwargs,
66
+ )
67
+
68
+ return _build_response(client=client, response=response)
69
+
70
+
71
+ async def asyncio_detailed(
72
+ workspace_name: str,
73
+ *,
74
+ client: AuthenticatedClient,
75
+ ) -> Response[Any]:
76
+ """Request workspace quotas
77
+
78
+ Send a request to update quotas for a workspace.
79
+
80
+ Args:
81
+ workspace_name (str):
82
+
83
+ Raises:
84
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
85
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
86
+
87
+ Returns:
88
+ Response[Any]
89
+ """
90
+
91
+ kwargs = _get_kwargs(
92
+ workspace_name=workspace_name,
93
+ )
94
+
95
+ response = await client.get_async_httpx_client().request(**kwargs)
96
+
97
+ return _build_response(client=client, response=response)
@@ -1,7 +1,7 @@
1
1
  import base64
2
2
  import json
3
- import time
4
3
  from dataclasses import dataclass
4
+ from datetime import datetime, timedelta
5
5
  from typing import Generator, Optional
6
6
 
7
7
  import requests
@@ -55,11 +55,13 @@ class ClientCredentials(Auth):
55
55
  except Exception as e:
56
56
  return Exception(f"Failed to decode/parse JWT claims: {str(e)}")
57
57
 
58
- exp_time = time.gmtime(claims["exp"])
58
+ exp_time = datetime.fromtimestamp(claims["exp"])
59
+ current_time = datetime.now()
59
60
  # Refresh if token expires in less than 10 minutes
60
- if time.time() + (10 * 60) > time.mktime(exp_time):
61
+ if current_time + timedelta(minutes=10) > exp_time:
61
62
  return self.do_refresh()
62
63
 
64
+
63
65
  return None
64
66
 
65
67
  def auth_flow(self, request: Request) -> Generator[Request, Response, None]:
@@ -1,7 +1,7 @@
1
1
  import base64
2
2
  import json
3
- import time
4
3
  from dataclasses import dataclass
4
+ from datetime import datetime, timedelta
5
5
  from typing import Dict, Generator, Optional
6
6
 
7
7
  from httpx import Auth, Request, Response, post
@@ -65,10 +65,10 @@ class BearerToken(Auth):
65
65
  claims = json.loads(claims_bytes)
66
66
  except Exception as e:
67
67
  return Exception(f"Failed to decode/parse JWT claims: {str(e)}")
68
-
69
- exp_time = time.gmtime(claims["exp"])
68
+ exp_time = datetime.fromtimestamp(claims["exp"])
69
+ current_time = datetime.now()
70
70
  # Refresh if token expires in less than 10 minutes
71
- if time.time() + (10 * 60) > time.mktime(exp_time):
71
+ if current_time + timedelta(minutes=10) > exp_time:
72
72
  return self.do_refresh()
73
73
 
74
74
  return None
@@ -1,7 +1,7 @@
1
1
  from .error import HTTPError
2
2
  from .logger import init as init_logger
3
3
  from .secrets import Secret
4
- from .settings import Settings, get_settings, init, init_agent
4
+ from .settings import Settings, get_settings, init
5
5
  from .slugify import slugify
6
6
  from .utils import copy_folder
7
7
 
@@ -9,7 +9,6 @@ __all__ = [
9
9
  "Secret",
10
10
  "Settings",
11
11
  "get_settings",
12
- "init_agent",
13
12
  "init",
14
13
  "copy_folder",
15
14
  "init_logger",