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.
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/PKG-INFO +21 -3
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/pyproject.toml +21 -3
- beamlit-0.0.34/src/beamlit/agents/__init__.py +5 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/agents/chat.py +16 -4
- beamlit-0.0.34/src/beamlit/agents/decorator.py +143 -0
- beamlit-0.0.34/src/beamlit/agents/thread.py +14 -0
- beamlit-0.0.34/src/beamlit/api/workspaces/workspace_quotas_request.py +97 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/authentication/clientcredentials.py +5 -3
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/authentication/device_mode.py +4 -4
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/common/__init__.py +1 -2
- beamlit-0.0.34/src/beamlit/common/instrumentation.py +291 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/common/settings.py +7 -64
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/deploy/deploy.py +64 -60
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/deploy/format.py +10 -0
- beamlit-0.0.34/src/beamlit/functions/__init__.py +5 -0
- beamlit-0.0.34/src/beamlit/functions/decorator.py +193 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/functions/github/github.py +0 -1
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/__init__.py +51 -11
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/agent.py +27 -15
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/agent_metadata.py +1 -1
- beamlit-0.0.34/src/beamlit/models/agent_render.py +45 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/agent_spec.py +32 -5
- beamlit-0.0.34/src/beamlit/models/core_event.py +88 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/core_spec.py +14 -5
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/core_spec_configurations.py +1 -1
- beamlit-0.0.34/src/beamlit/models/core_status.py +45 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/environment.py +2 -2
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/environment_metadata.py +1 -1
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/function.py +27 -15
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/function_metadata.py +1 -1
- beamlit-0.0.34/src/beamlit/models/function_render.py +45 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/function_spec.py +14 -5
- beamlit-0.0.34/src/beamlit/models/histogram_bucket.py +79 -0
- beamlit-0.0.34/src/beamlit/models/histogram_stats.py +88 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/increase_and_rate_metric.py +0 -9
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/integration_connection.py +2 -2
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/integration_connection_spec.py +11 -2
- beamlit-0.0.34/src/beamlit/models/integration_repository.py +88 -0
- beamlit-0.0.34/src/beamlit/models/last_n_requests_metric.py +88 -0
- beamlit-0.0.34/src/beamlit/models/latency_metric.py +124 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/metadata.py +1 -1
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/metric.py +18 -9
- beamlit-0.0.34/src/beamlit/models/metrics.py +159 -0
- beamlit-0.0.34/src/beamlit/models/metrics_models.py +45 -0
- beamlit-0.0.34/src/beamlit/models/metrics_request_total_per_code.py +45 -0
- beamlit-0.0.34/src/beamlit/models/metrics_rps_per_code.py +45 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/model.py +27 -15
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/model_metadata.py +1 -1
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/model_provider.py +2 -2
- beamlit-0.0.34/src/beamlit/models/model_render.py +45 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/model_spec.py +14 -14
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/pending_invitation_accept.py +1 -1
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/pending_invitation_render.py +3 -3
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/policy.py +2 -2
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/provider_config.py +1 -1
- beamlit-0.0.33rc49/src/beamlit/models/core_status.py → beamlit-0.0.34/src/beamlit/models/repository.py +22 -14
- beamlit-0.0.34/src/beamlit/models/repository_type_0.py +70 -0
- beamlit-0.0.34/src/beamlit/models/request_duration_over_time_metric.py +97 -0
- beamlit-0.0.34/src/beamlit/models/request_duration_over_time_metrics.py +74 -0
- beamlit-0.0.34/src/beamlit/models/request_total_by_origin_metric.py +103 -0
- beamlit-0.0.34/src/beamlit/models/request_total_by_origin_metric_request_total_by_origin.py +45 -0
- beamlit-0.0.34/src/beamlit/models/request_total_by_origin_metric_request_total_by_origin_and_code.py +45 -0
- beamlit-0.0.34/src/beamlit/models/request_total_metric.py +115 -0
- beamlit-0.0.34/src/beamlit/models/request_total_metric_request_total_per_code.py +45 -0
- beamlit-0.0.34/src/beamlit/models/request_total_metric_rps_per_code.py +45 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/resource_deployment_metrics.py +6 -4
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/resource_deployment_metrics_query_per_second_per_region_per_code.py +1 -1
- beamlit-0.0.34/src/beamlit/models/resource_environment_metrics.py +250 -0
- beamlit-0.0.34/src/beamlit/models/resource_environment_metrics_request_total_per_code.py +45 -0
- beamlit-0.0.34/src/beamlit/models/resource_environment_metrics_rps_per_code.py +45 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/resource_metrics.py +1 -1
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/runtime.py +2 -2
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/store_agent.py +1 -1
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/store_function.py +1 -1
- beamlit-0.0.34/src/beamlit/models/token_rate_metric.py +88 -0
- beamlit-0.0.34/src/beamlit/models/token_rate_metrics.py +106 -0
- beamlit-0.0.34/src/beamlit/models/token_total_metric.py +106 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/workspace.py +17 -8
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/serve/app.py +9 -13
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/integrationtest/agent.py +8 -5
- beamlit-0.0.34/src/integrationtest/main.py +11 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/uv.lock +94 -304
- beamlit-0.0.33rc49/src/beamlit/agents/__init__.py +0 -4
- beamlit-0.0.33rc49/src/beamlit/agents/decorator.py +0 -230
- beamlit-0.0.33rc49/src/beamlit/common/generate.py +0 -196
- beamlit-0.0.33rc49/src/beamlit/common/instrumentation.py +0 -123
- beamlit-0.0.33rc49/src/beamlit/functions/__init__.py +0 -5
- beamlit-0.0.33rc49/src/beamlit/functions/decorator.py +0 -45
- beamlit-0.0.33rc49/src/beamlit/models/metrics.py +0 -124
- beamlit-0.0.33rc49/src/beamlit/models/resource_environment_metrics.py +0 -170
- beamlit-0.0.33rc49/src/integrationtest/main.py +0 -35
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/.gitignore +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/README.md +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/beamlit.yaml +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/__init__.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/agents/chain.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/__init__.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/agents/__init__.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/agents/create_agent.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/agents/create_agent_release.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/agents/delete_agent.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/agents/delete_agent_history.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/agents/get_agent.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/agents/get_agent_environment_logs.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/agents/get_agent_history.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/agents/get_agent_metrics.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/agents/get_agent_trace_ids.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/agents/list_agent_history.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/agents/list_agents.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/agents/put_agent_history.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/agents/update_agent.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/configurations/__init__.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/configurations/get_configuration.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/default/__init__.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/default/get_trace.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/default/get_trace_ids.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/default/get_trace_logs.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/environments/__init__.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/environments/create_environment.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/environments/delete_environment.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/environments/get_environment.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/environments/get_environment_metrics.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/environments/list_environments.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/environments/update_environment.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/functions/__init__.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/functions/create_function.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/functions/create_function_release.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/functions/delete_function.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/functions/get_function.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/functions/get_function_environment_logs.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/functions/get_function_metrics.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/functions/get_function_trace_ids.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/functions/list_functions.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/functions/update_function.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/history/__init__.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/history/get_agents_history.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/history/list_agents_history.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/integrations/__init__.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/integrations/create_integration_connection.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/integrations/delete_integration_connection.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/integrations/get_integration.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/integrations/get_integration_connection.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/integrations/get_integration_connection_model.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/integrations/get_integration_model.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/integrations/list_integration_connection_models.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/integrations/list_integration_connections.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/integrations/list_integration_models.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/integrations/update_integration_connection.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/invitations/__init__.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/invitations/list_all_pending_invitations.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/locations/__init__.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/locations/list_locations.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/metrics/__init__.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/metrics/get_metrics.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/model_providers/__init__.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/model_providers/create_model_provider.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/model_providers/delete_model_provider.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/model_providers/get_model_provider.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/model_providers/list_model_providers.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/model_providers/update_model_provider.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/models/__init__.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/models/create_model.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/models/delete_model.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/models/get_model.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/models/get_model_environment_logs.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/models/get_model_metrics.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/models/get_model_trace_ids.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/models/list_models.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/models/release_model.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/models/update_model.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/policies/__init__.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/policies/create_policy.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/policies/delete_policy.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/policies/get_policy.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/policies/list_policies.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/policies/update_policy.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/privateclusters/__init__.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/privateclusters/create_private_cluster.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/privateclusters/delete_private_cluster.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/privateclusters/get_private_cluster.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/privateclusters/get_private_cluster_health.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/privateclusters/list_private_clusters.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/privateclusters/update_private_cluster.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/privateclusters/update_private_cluster_health.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/service_accounts/__init__.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/service_accounts/create_api_key_for_service_account.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/service_accounts/create_workspace_service_account.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/service_accounts/delete_api_key_for_service_account.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/service_accounts/delete_workspace_service_account.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/service_accounts/get_workspace_service_accounts.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/service_accounts/list_api_keys_for_service_account.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/service_accounts/update_workspace_service_account.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/store/__init__.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/store/get_store_agent.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/store/get_store_function.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/store/list_store_agents.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/store/list_store_functions.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/workspaces/__init__.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/workspaces/accept_workspace_invitation.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/workspaces/create_worspace.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/workspaces/decline_workspace_invitation.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/workspaces/delete_workspace.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/workspaces/get_workspace.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/workspaces/invite_workspace_user.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/workspaces/leave_workspace.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/workspaces/list_workspace_users.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/workspaces/list_workspaces.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/workspaces/remove_workspace_user.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/workspaces/update_workspace.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/api/workspaces/update_workspace_user_role.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/authentication/__init__.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/authentication/apikey.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/authentication/authentication.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/authentication/credentials.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/client.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/common/error.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/common/logger.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/common/secrets.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/common/slugify.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/common/utils.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/deploy/__init__.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/deploy/parser.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/errors.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/functions/github/__init__.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/functions/github/kit/__init__.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/functions/github/kit/pull_request.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/functions/math/__init__.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/functions/math/math.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/functions/mcp/mcp.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/functions/remote/remote.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/functions/search/__init__.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/functions/search/search.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/acl.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/agent_chain.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/agent_history.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/agent_history_event.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/agent_release.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/api_key.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/configuration.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/continent.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/country.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/create_api_key_for_service_account_body.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/create_workspace_service_account_body.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/create_workspace_service_account_response_200.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/delete_workspace_service_account_response_200.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/environment_metrics.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/environment_spec.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/flavor.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/function_kit.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/function_release.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/get_trace_ids_response_200.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/get_trace_logs_response_200.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/get_trace_response_200.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/get_workspace_service_accounts_response_200_item.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/integration_config.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/integration_connection_config.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/integration_connection_secret.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/integration_model.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/invite_workspace_user_body.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/location_response.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/metadata_labels.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/model_private_cluster.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/model_release.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/owner_fields.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/pending_invitation.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/pending_invitation_render_invited_by.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/pending_invitation_render_workspace.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/pending_invitation_workspace_details.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/pod_template_spec.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/policy_location.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/policy_spec.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/private_cluster.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/private_location.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/qps.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/resource_deployment_metrics_inference_per_second_per_region.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/resource_environment_metrics_inference_per_region.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/resource_environment_metrics_inference_per_second_per_region.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/resource_environment_metrics_query_per_region_per_code.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/resource_environment_metrics_query_per_second_per_region_per_code.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/resource_log.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/runtime_readiness_probe.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/runtime_resources.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/serverless_config.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/spec_configuration.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/store_agent_labels.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/store_configuration.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/store_configuration_option.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/store_function_kit.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/store_function_labels.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/store_function_parameter.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/time_fields.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/trace_ids_response.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/update_workspace_service_account_body.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/update_workspace_service_account_response_200.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/update_workspace_user_role_body.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/websocket_channel.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/workspace_labels.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/models/workspace_user.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/py.typed +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/run.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/serve/middlewares/__init__.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/serve/middlewares/accesslog.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/serve/middlewares/processtime.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/beamlit/types.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/integrationtest/beamlit.yaml +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/integrationtest/functions/helloworld.py +0 -0
- {beamlit-0.0.33rc49 → beamlit-0.0.34}/src/integrationtest/pyproject.toml +0 -0
- {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.
|
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-
|
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.
|
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-
|
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 = [
|
@@ -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
|
-
|
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
|
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
|
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 =
|
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
|
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
|
-
|
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
|
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
|
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",
|