wandb 0.18.2__py3-none-musllinux_1_2_x86_64.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.
- package_readme.md +89 -0
- wandb/__init__.py +245 -0
- wandb/__init__.pyi +1139 -0
- wandb/__main__.py +3 -0
- wandb/_globals.py +19 -0
- wandb/agents/__init__.py +0 -0
- wandb/agents/pyagent.py +363 -0
- wandb/analytics/__init__.py +3 -0
- wandb/analytics/sentry.py +266 -0
- wandb/apis/__init__.py +48 -0
- wandb/apis/attrs.py +40 -0
- wandb/apis/importers/__init__.py +1 -0
- wandb/apis/importers/internals/internal.py +385 -0
- wandb/apis/importers/internals/protocols.py +99 -0
- wandb/apis/importers/internals/util.py +78 -0
- wandb/apis/importers/mlflow.py +254 -0
- wandb/apis/importers/validation.py +108 -0
- wandb/apis/importers/wandb.py +1603 -0
- wandb/apis/internal.py +232 -0
- wandb/apis/normalize.py +89 -0
- wandb/apis/paginator.py +81 -0
- wandb/apis/public/__init__.py +34 -0
- wandb/apis/public/api.py +1305 -0
- wandb/apis/public/artifacts.py +1090 -0
- wandb/apis/public/const.py +4 -0
- wandb/apis/public/files.py +195 -0
- wandb/apis/public/history.py +149 -0
- wandb/apis/public/jobs.py +659 -0
- wandb/apis/public/projects.py +154 -0
- wandb/apis/public/query_generator.py +166 -0
- wandb/apis/public/reports.py +469 -0
- wandb/apis/public/runs.py +914 -0
- wandb/apis/public/sweeps.py +240 -0
- wandb/apis/public/teams.py +198 -0
- wandb/apis/public/users.py +136 -0
- wandb/apis/reports/__init__.py +1 -0
- wandb/apis/reports/v1/__init__.py +8 -0
- wandb/apis/reports/v2/__init__.py +8 -0
- wandb/apis/workspaces/__init__.py +8 -0
- wandb/beta/workflows.py +288 -0
- wandb/bin/nvidia_gpu_stats +0 -0
- wandb/bin/wandb-core +0 -0
- wandb/cli/__init__.py +0 -0
- wandb/cli/cli.py +3004 -0
- wandb/data_types.py +63 -0
- wandb/docker/__init__.py +342 -0
- wandb/docker/auth.py +436 -0
- wandb/docker/wandb-entrypoint.sh +33 -0
- wandb/docker/www_authenticate.py +94 -0
- wandb/env.py +514 -0
- wandb/errors/__init__.py +17 -0
- wandb/errors/errors.py +37 -0
- wandb/errors/term.py +103 -0
- wandb/errors/util.py +57 -0
- wandb/errors/warnings.py +2 -0
- wandb/filesync/__init__.py +0 -0
- wandb/filesync/dir_watcher.py +403 -0
- wandb/filesync/stats.py +100 -0
- wandb/filesync/step_checksum.py +142 -0
- wandb/filesync/step_prepare.py +179 -0
- wandb/filesync/step_upload.py +290 -0
- wandb/filesync/upload_job.py +142 -0
- wandb/integration/__init__.py +0 -0
- wandb/integration/catboost/__init__.py +5 -0
- wandb/integration/catboost/catboost.py +178 -0
- wandb/integration/cohere/__init__.py +3 -0
- wandb/integration/cohere/cohere.py +21 -0
- wandb/integration/cohere/resolver.py +347 -0
- wandb/integration/diffusers/__init__.py +3 -0
- wandb/integration/diffusers/autologger.py +76 -0
- wandb/integration/diffusers/pipeline_resolver.py +50 -0
- wandb/integration/diffusers/resolvers/__init__.py +9 -0
- wandb/integration/diffusers/resolvers/multimodal.py +882 -0
- wandb/integration/diffusers/resolvers/utils.py +102 -0
- wandb/integration/fastai/__init__.py +249 -0
- wandb/integration/gym/__init__.py +105 -0
- wandb/integration/huggingface/__init__.py +3 -0
- wandb/integration/huggingface/huggingface.py +18 -0
- wandb/integration/huggingface/resolver.py +213 -0
- wandb/integration/keras/__init__.py +11 -0
- wandb/integration/keras/callbacks/__init__.py +5 -0
- wandb/integration/keras/callbacks/metrics_logger.py +136 -0
- wandb/integration/keras/callbacks/model_checkpoint.py +195 -0
- wandb/integration/keras/callbacks/tables_builder.py +226 -0
- wandb/integration/keras/keras.py +1091 -0
- wandb/integration/kfp/__init__.py +6 -0
- wandb/integration/kfp/helpers.py +28 -0
- wandb/integration/kfp/kfp_patch.py +324 -0
- wandb/integration/kfp/wandb_logging.py +182 -0
- wandb/integration/langchain/__init__.py +3 -0
- wandb/integration/langchain/wandb_tracer.py +48 -0
- wandb/integration/lightgbm/__init__.py +239 -0
- wandb/integration/lightning/__init__.py +0 -0
- wandb/integration/lightning/fabric/__init__.py +3 -0
- wandb/integration/lightning/fabric/logger.py +762 -0
- wandb/integration/magic.py +556 -0
- wandb/integration/metaflow/__init__.py +3 -0
- wandb/integration/metaflow/metaflow.py +383 -0
- wandb/integration/openai/__init__.py +3 -0
- wandb/integration/openai/fine_tuning.py +480 -0
- wandb/integration/openai/openai.py +22 -0
- wandb/integration/openai/resolver.py +240 -0
- wandb/integration/prodigy/__init__.py +3 -0
- wandb/integration/prodigy/prodigy.py +299 -0
- wandb/integration/sacred/__init__.py +117 -0
- wandb/integration/sagemaker/__init__.py +12 -0
- wandb/integration/sagemaker/auth.py +28 -0
- wandb/integration/sagemaker/config.py +49 -0
- wandb/integration/sagemaker/files.py +3 -0
- wandb/integration/sagemaker/resources.py +34 -0
- wandb/integration/sb3/__init__.py +3 -0
- wandb/integration/sb3/sb3.py +153 -0
- wandb/integration/sklearn/__init__.py +37 -0
- wandb/integration/sklearn/calculate/__init__.py +32 -0
- wandb/integration/sklearn/calculate/calibration_curves.py +125 -0
- wandb/integration/sklearn/calculate/class_proportions.py +68 -0
- wandb/integration/sklearn/calculate/confusion_matrix.py +93 -0
- wandb/integration/sklearn/calculate/decision_boundaries.py +40 -0
- wandb/integration/sklearn/calculate/elbow_curve.py +55 -0
- wandb/integration/sklearn/calculate/feature_importances.py +67 -0
- wandb/integration/sklearn/calculate/learning_curve.py +64 -0
- wandb/integration/sklearn/calculate/outlier_candidates.py +69 -0
- wandb/integration/sklearn/calculate/residuals.py +86 -0
- wandb/integration/sklearn/calculate/silhouette.py +118 -0
- wandb/integration/sklearn/calculate/summary_metrics.py +62 -0
- wandb/integration/sklearn/plot/__init__.py +35 -0
- wandb/integration/sklearn/plot/classifier.py +329 -0
- wandb/integration/sklearn/plot/clusterer.py +146 -0
- wandb/integration/sklearn/plot/regressor.py +121 -0
- wandb/integration/sklearn/plot/shared.py +91 -0
- wandb/integration/sklearn/utils.py +183 -0
- wandb/integration/tensorboard/__init__.py +10 -0
- wandb/integration/tensorboard/log.py +355 -0
- wandb/integration/tensorboard/monkeypatch.py +185 -0
- wandb/integration/tensorflow/__init__.py +5 -0
- wandb/integration/tensorflow/estimator_hook.py +54 -0
- wandb/integration/torch/__init__.py +0 -0
- wandb/integration/torch/wandb_torch.py +554 -0
- wandb/integration/ultralytics/__init__.py +11 -0
- wandb/integration/ultralytics/bbox_utils.py +208 -0
- wandb/integration/ultralytics/callback.py +524 -0
- wandb/integration/ultralytics/classification_utils.py +83 -0
- wandb/integration/ultralytics/mask_utils.py +202 -0
- wandb/integration/ultralytics/pose_utils.py +103 -0
- wandb/integration/xgboost/__init__.py +11 -0
- wandb/integration/xgboost/xgboost.py +189 -0
- wandb/integration/yolov8/__init__.py +0 -0
- wandb/integration/yolov8/yolov8.py +284 -0
- wandb/jupyter.py +515 -0
- wandb/magic.py +3 -0
- wandb/mpmain/__init__.py +0 -0
- wandb/mpmain/__main__.py +1 -0
- wandb/old/__init__.py +0 -0
- wandb/old/core.py +53 -0
- wandb/old/settings.py +173 -0
- wandb/old/summary.py +440 -0
- wandb/plot/__init__.py +19 -0
- wandb/plot/bar.py +45 -0
- wandb/plot/confusion_matrix.py +100 -0
- wandb/plot/histogram.py +39 -0
- wandb/plot/line.py +43 -0
- wandb/plot/line_series.py +88 -0
- wandb/plot/pr_curve.py +136 -0
- wandb/plot/roc_curve.py +118 -0
- wandb/plot/scatter.py +32 -0
- wandb/plot/utils.py +183 -0
- wandb/plot/viz.py +123 -0
- wandb/proto/__init__.py +0 -0
- wandb/proto/v3/__init__.py +0 -0
- wandb/proto/v3/wandb_base_pb2.py +55 -0
- wandb/proto/v3/wandb_internal_pb2.py +1608 -0
- wandb/proto/v3/wandb_server_pb2.py +208 -0
- wandb/proto/v3/wandb_settings_pb2.py +112 -0
- wandb/proto/v3/wandb_telemetry_pb2.py +106 -0
- wandb/proto/v4/__init__.py +0 -0
- wandb/proto/v4/wandb_base_pb2.py +30 -0
- wandb/proto/v4/wandb_internal_pb2.py +360 -0
- wandb/proto/v4/wandb_server_pb2.py +63 -0
- wandb/proto/v4/wandb_settings_pb2.py +45 -0
- wandb/proto/v4/wandb_telemetry_pb2.py +41 -0
- wandb/proto/v5/wandb_base_pb2.py +31 -0
- wandb/proto/v5/wandb_internal_pb2.py +361 -0
- wandb/proto/v5/wandb_server_pb2.py +64 -0
- wandb/proto/v5/wandb_settings_pb2.py +46 -0
- wandb/proto/v5/wandb_telemetry_pb2.py +42 -0
- wandb/proto/wandb_base_pb2.py +10 -0
- wandb/proto/wandb_deprecated.py +53 -0
- wandb/proto/wandb_generate_deprecated.py +34 -0
- wandb/proto/wandb_generate_proto.py +49 -0
- wandb/proto/wandb_internal_pb2.py +16 -0
- wandb/proto/wandb_server_pb2.py +10 -0
- wandb/proto/wandb_settings_pb2.py +10 -0
- wandb/proto/wandb_telemetry_pb2.py +10 -0
- wandb/py.typed +0 -0
- wandb/sdk/__init__.py +37 -0
- wandb/sdk/artifacts/__init__.py +0 -0
- wandb/sdk/artifacts/_validators.py +90 -0
- wandb/sdk/artifacts/artifact.py +2389 -0
- wandb/sdk/artifacts/artifact_download_logger.py +43 -0
- wandb/sdk/artifacts/artifact_file_cache.py +253 -0
- wandb/sdk/artifacts/artifact_instance_cache.py +17 -0
- wandb/sdk/artifacts/artifact_manifest.py +74 -0
- wandb/sdk/artifacts/artifact_manifest_entry.py +249 -0
- wandb/sdk/artifacts/artifact_manifests/__init__.py +0 -0
- wandb/sdk/artifacts/artifact_manifests/artifact_manifest_v1.py +92 -0
- wandb/sdk/artifacts/artifact_saver.py +269 -0
- wandb/sdk/artifacts/artifact_state.py +11 -0
- wandb/sdk/artifacts/artifact_ttl.py +7 -0
- wandb/sdk/artifacts/exceptions.py +57 -0
- wandb/sdk/artifacts/staging.py +25 -0
- wandb/sdk/artifacts/storage_handler.py +62 -0
- wandb/sdk/artifacts/storage_handlers/__init__.py +0 -0
- wandb/sdk/artifacts/storage_handlers/azure_handler.py +208 -0
- wandb/sdk/artifacts/storage_handlers/gcs_handler.py +228 -0
- wandb/sdk/artifacts/storage_handlers/http_handler.py +114 -0
- wandb/sdk/artifacts/storage_handlers/local_file_handler.py +141 -0
- wandb/sdk/artifacts/storage_handlers/multi_handler.py +56 -0
- wandb/sdk/artifacts/storage_handlers/s3_handler.py +300 -0
- wandb/sdk/artifacts/storage_handlers/tracking_handler.py +72 -0
- wandb/sdk/artifacts/storage_handlers/wb_artifact_handler.py +135 -0
- wandb/sdk/artifacts/storage_handlers/wb_local_artifact_handler.py +74 -0
- wandb/sdk/artifacts/storage_layout.py +6 -0
- wandb/sdk/artifacts/storage_policies/__init__.py +4 -0
- wandb/sdk/artifacts/storage_policies/register.py +1 -0
- wandb/sdk/artifacts/storage_policies/wandb_storage_policy.py +378 -0
- wandb/sdk/artifacts/storage_policy.py +72 -0
- wandb/sdk/backend/__init__.py +0 -0
- wandb/sdk/backend/backend.py +222 -0
- wandb/sdk/data_types/__init__.py +0 -0
- wandb/sdk/data_types/_dtypes.py +914 -0
- wandb/sdk/data_types/_private.py +10 -0
- wandb/sdk/data_types/audio.py +165 -0
- wandb/sdk/data_types/base_types/__init__.py +0 -0
- wandb/sdk/data_types/base_types/json_metadata.py +55 -0
- wandb/sdk/data_types/base_types/media.py +315 -0
- wandb/sdk/data_types/base_types/wb_value.py +272 -0
- wandb/sdk/data_types/bokeh.py +70 -0
- wandb/sdk/data_types/graph.py +405 -0
- wandb/sdk/data_types/helper_types/__init__.py +0 -0
- wandb/sdk/data_types/helper_types/bounding_boxes_2d.py +295 -0
- wandb/sdk/data_types/helper_types/classes.py +159 -0
- wandb/sdk/data_types/helper_types/image_mask.py +235 -0
- wandb/sdk/data_types/histogram.py +96 -0
- wandb/sdk/data_types/html.py +115 -0
- wandb/sdk/data_types/image.py +845 -0
- wandb/sdk/data_types/molecule.py +241 -0
- wandb/sdk/data_types/object_3d.py +474 -0
- wandb/sdk/data_types/plotly.py +82 -0
- wandb/sdk/data_types/saved_model.py +446 -0
- wandb/sdk/data_types/table.py +1204 -0
- wandb/sdk/data_types/trace_tree.py +438 -0
- wandb/sdk/data_types/utils.py +229 -0
- wandb/sdk/data_types/video.py +247 -0
- wandb/sdk/integration_utils/__init__.py +0 -0
- wandb/sdk/integration_utils/auto_logging.py +239 -0
- wandb/sdk/integration_utils/data_logging.py +475 -0
- wandb/sdk/interface/__init__.py +0 -0
- wandb/sdk/interface/constants.py +4 -0
- wandb/sdk/interface/interface.py +972 -0
- wandb/sdk/interface/interface_queue.py +59 -0
- wandb/sdk/interface/interface_relay.py +53 -0
- wandb/sdk/interface/interface_shared.py +537 -0
- wandb/sdk/interface/interface_sock.py +61 -0
- wandb/sdk/interface/message_future.py +27 -0
- wandb/sdk/interface/message_future_poll.py +50 -0
- wandb/sdk/interface/router.py +118 -0
- wandb/sdk/interface/router_queue.py +44 -0
- wandb/sdk/interface/router_relay.py +39 -0
- wandb/sdk/interface/router_sock.py +36 -0
- wandb/sdk/interface/summary_record.py +67 -0
- wandb/sdk/internal/__init__.py +0 -0
- wandb/sdk/internal/context.py +89 -0
- wandb/sdk/internal/datastore.py +297 -0
- wandb/sdk/internal/file_pusher.py +181 -0
- wandb/sdk/internal/file_stream.py +695 -0
- wandb/sdk/internal/flow_control.py +263 -0
- wandb/sdk/internal/handler.py +901 -0
- wandb/sdk/internal/internal.py +417 -0
- wandb/sdk/internal/internal_api.py +4358 -0
- wandb/sdk/internal/internal_util.py +100 -0
- wandb/sdk/internal/job_builder.py +629 -0
- wandb/sdk/internal/profiler.py +78 -0
- wandb/sdk/internal/progress.py +83 -0
- wandb/sdk/internal/run.py +25 -0
- wandb/sdk/internal/sample.py +70 -0
- wandb/sdk/internal/sender.py +1686 -0
- wandb/sdk/internal/sender_config.py +197 -0
- wandb/sdk/internal/settings_static.py +90 -0
- wandb/sdk/internal/system/__init__.py +0 -0
- wandb/sdk/internal/system/assets/__init__.py +27 -0
- wandb/sdk/internal/system/assets/aggregators.py +37 -0
- wandb/sdk/internal/system/assets/asset_registry.py +20 -0
- wandb/sdk/internal/system/assets/cpu.py +163 -0
- wandb/sdk/internal/system/assets/disk.py +210 -0
- wandb/sdk/internal/system/assets/gpu.py +416 -0
- wandb/sdk/internal/system/assets/gpu_amd.py +239 -0
- wandb/sdk/internal/system/assets/gpu_apple.py +177 -0
- wandb/sdk/internal/system/assets/interfaces.py +207 -0
- wandb/sdk/internal/system/assets/ipu.py +177 -0
- wandb/sdk/internal/system/assets/memory.py +166 -0
- wandb/sdk/internal/system/assets/network.py +125 -0
- wandb/sdk/internal/system/assets/open_metrics.py +299 -0
- wandb/sdk/internal/system/assets/tpu.py +154 -0
- wandb/sdk/internal/system/assets/trainium.py +399 -0
- wandb/sdk/internal/system/env_probe_helpers.py +13 -0
- wandb/sdk/internal/system/system_info.py +249 -0
- wandb/sdk/internal/system/system_monitor.py +229 -0
- wandb/sdk/internal/tb_watcher.py +518 -0
- wandb/sdk/internal/thread_local_settings.py +18 -0
- wandb/sdk/internal/writer.py +206 -0
- wandb/sdk/launch/__init__.py +14 -0
- wandb/sdk/launch/_launch.py +330 -0
- wandb/sdk/launch/_launch_add.py +255 -0
- wandb/sdk/launch/_project_spec.py +566 -0
- wandb/sdk/launch/agent/__init__.py +5 -0
- wandb/sdk/launch/agent/agent.py +924 -0
- wandb/sdk/launch/agent/config.py +296 -0
- wandb/sdk/launch/agent/job_status_tracker.py +53 -0
- wandb/sdk/launch/agent/run_queue_item_file_saver.py +45 -0
- wandb/sdk/launch/builder/__init__.py +0 -0
- wandb/sdk/launch/builder/abstract.py +156 -0
- wandb/sdk/launch/builder/build.py +297 -0
- wandb/sdk/launch/builder/context_manager.py +235 -0
- wandb/sdk/launch/builder/docker_builder.py +177 -0
- wandb/sdk/launch/builder/kaniko_builder.py +595 -0
- wandb/sdk/launch/builder/noop.py +58 -0
- wandb/sdk/launch/builder/templates/_wandb_bootstrap.py +188 -0
- wandb/sdk/launch/builder/templates/dockerfile.py +92 -0
- wandb/sdk/launch/create_job.py +528 -0
- wandb/sdk/launch/environment/abstract.py +29 -0
- wandb/sdk/launch/environment/aws_environment.py +322 -0
- wandb/sdk/launch/environment/azure_environment.py +105 -0
- wandb/sdk/launch/environment/gcp_environment.py +335 -0
- wandb/sdk/launch/environment/local_environment.py +66 -0
- wandb/sdk/launch/errors.py +19 -0
- wandb/sdk/launch/git_reference.py +109 -0
- wandb/sdk/launch/inputs/files.py +148 -0
- wandb/sdk/launch/inputs/internal.py +315 -0
- wandb/sdk/launch/inputs/manage.py +113 -0
- wandb/sdk/launch/inputs/schema.py +39 -0
- wandb/sdk/launch/loader.py +249 -0
- wandb/sdk/launch/registry/abstract.py +48 -0
- wandb/sdk/launch/registry/anon.py +29 -0
- wandb/sdk/launch/registry/azure_container_registry.py +124 -0
- wandb/sdk/launch/registry/elastic_container_registry.py +192 -0
- wandb/sdk/launch/registry/google_artifact_registry.py +219 -0
- wandb/sdk/launch/registry/local_registry.py +67 -0
- wandb/sdk/launch/runner/__init__.py +0 -0
- wandb/sdk/launch/runner/abstract.py +195 -0
- wandb/sdk/launch/runner/kubernetes_monitor.py +474 -0
- wandb/sdk/launch/runner/kubernetes_runner.py +963 -0
- wandb/sdk/launch/runner/local_container.py +301 -0
- wandb/sdk/launch/runner/local_process.py +78 -0
- wandb/sdk/launch/runner/sagemaker_runner.py +426 -0
- wandb/sdk/launch/runner/vertex_runner.py +230 -0
- wandb/sdk/launch/sweeps/__init__.py +39 -0
- wandb/sdk/launch/sweeps/scheduler.py +742 -0
- wandb/sdk/launch/sweeps/scheduler_sweep.py +91 -0
- wandb/sdk/launch/sweeps/utils.py +316 -0
- wandb/sdk/launch/utils.py +746 -0
- wandb/sdk/launch/wandb_reference.py +138 -0
- wandb/sdk/lib/__init__.py +5 -0
- wandb/sdk/lib/_settings_toposort_generate.py +159 -0
- wandb/sdk/lib/_settings_toposort_generated.py +250 -0
- wandb/sdk/lib/_wburls_generate.py +25 -0
- wandb/sdk/lib/_wburls_generated.py +22 -0
- wandb/sdk/lib/apikey.py +273 -0
- wandb/sdk/lib/capped_dict.py +26 -0
- wandb/sdk/lib/config_util.py +101 -0
- wandb/sdk/lib/credentials.py +141 -0
- wandb/sdk/lib/deprecate.py +42 -0
- wandb/sdk/lib/disabled.py +29 -0
- wandb/sdk/lib/exit_hooks.py +54 -0
- wandb/sdk/lib/file_stream_utils.py +118 -0
- wandb/sdk/lib/filenames.py +64 -0
- wandb/sdk/lib/filesystem.py +372 -0
- wandb/sdk/lib/fsm.py +174 -0
- wandb/sdk/lib/gitlib.py +239 -0
- wandb/sdk/lib/gql_request.py +65 -0
- wandb/sdk/lib/handler_util.py +21 -0
- wandb/sdk/lib/hashutil.py +84 -0
- wandb/sdk/lib/import_hooks.py +275 -0
- wandb/sdk/lib/ipython.py +146 -0
- wandb/sdk/lib/json_util.py +80 -0
- wandb/sdk/lib/lazyloader.py +63 -0
- wandb/sdk/lib/mailbox.py +460 -0
- wandb/sdk/lib/module.py +69 -0
- wandb/sdk/lib/paths.py +106 -0
- wandb/sdk/lib/preinit.py +42 -0
- wandb/sdk/lib/printer.py +313 -0
- wandb/sdk/lib/proto_util.py +90 -0
- wandb/sdk/lib/redirect.py +845 -0
- wandb/sdk/lib/reporting.py +99 -0
- wandb/sdk/lib/retry.py +289 -0
- wandb/sdk/lib/run_moment.py +78 -0
- wandb/sdk/lib/runid.py +12 -0
- wandb/sdk/lib/server.py +52 -0
- wandb/sdk/lib/service_connection.py +216 -0
- wandb/sdk/lib/service_token.py +94 -0
- wandb/sdk/lib/sock_client.py +295 -0
- wandb/sdk/lib/sparkline.py +45 -0
- wandb/sdk/lib/telemetry.py +100 -0
- wandb/sdk/lib/timed_input.py +133 -0
- wandb/sdk/lib/timer.py +19 -0
- wandb/sdk/lib/tracelog.py +255 -0
- wandb/sdk/lib/wburls.py +46 -0
- wandb/sdk/service/__init__.py +0 -0
- wandb/sdk/service/_startup_debug.py +22 -0
- wandb/sdk/service/port_file.py +53 -0
- wandb/sdk/service/server.py +116 -0
- wandb/sdk/service/server_sock.py +276 -0
- wandb/sdk/service/service.py +242 -0
- wandb/sdk/service/streams.py +417 -0
- wandb/sdk/verify/__init__.py +0 -0
- wandb/sdk/verify/verify.py +501 -0
- wandb/sdk/wandb_alerts.py +12 -0
- wandb/sdk/wandb_config.py +322 -0
- wandb/sdk/wandb_helper.py +54 -0
- wandb/sdk/wandb_init.py +1266 -0
- wandb/sdk/wandb_login.py +349 -0
- wandb/sdk/wandb_metric.py +110 -0
- wandb/sdk/wandb_require.py +97 -0
- wandb/sdk/wandb_require_helpers.py +44 -0
- wandb/sdk/wandb_run.py +4236 -0
- wandb/sdk/wandb_settings.py +2001 -0
- wandb/sdk/wandb_setup.py +409 -0
- wandb/sdk/wandb_summary.py +150 -0
- wandb/sdk/wandb_sweep.py +119 -0
- wandb/sdk/wandb_sync.py +81 -0
- wandb/sdk/wandb_watch.py +144 -0
- wandb/sklearn.py +35 -0
- wandb/sync/__init__.py +3 -0
- wandb/sync/sync.py +443 -0
- wandb/trigger.py +29 -0
- wandb/util.py +1956 -0
- wandb/vendor/__init__.py +0 -0
- wandb/vendor/gql-0.2.0/setup.py +40 -0
- wandb/vendor/gql-0.2.0/tests/__init__.py +0 -0
- wandb/vendor/gql-0.2.0/tests/starwars/__init__.py +0 -0
- wandb/vendor/gql-0.2.0/tests/starwars/fixtures.py +96 -0
- wandb/vendor/gql-0.2.0/tests/starwars/schema.py +146 -0
- wandb/vendor/gql-0.2.0/tests/starwars/test_dsl.py +293 -0
- wandb/vendor/gql-0.2.0/tests/starwars/test_query.py +355 -0
- wandb/vendor/gql-0.2.0/tests/starwars/test_validation.py +171 -0
- wandb/vendor/gql-0.2.0/tests/test_client.py +31 -0
- wandb/vendor/gql-0.2.0/tests/test_transport.py +89 -0
- wandb/vendor/gql-0.2.0/wandb_gql/__init__.py +4 -0
- wandb/vendor/gql-0.2.0/wandb_gql/client.py +75 -0
- wandb/vendor/gql-0.2.0/wandb_gql/dsl.py +152 -0
- wandb/vendor/gql-0.2.0/wandb_gql/gql.py +10 -0
- wandb/vendor/gql-0.2.0/wandb_gql/transport/__init__.py +0 -0
- wandb/vendor/gql-0.2.0/wandb_gql/transport/http.py +6 -0
- wandb/vendor/gql-0.2.0/wandb_gql/transport/local_schema.py +15 -0
- wandb/vendor/gql-0.2.0/wandb_gql/transport/requests.py +46 -0
- wandb/vendor/gql-0.2.0/wandb_gql/utils.py +21 -0
- wandb/vendor/graphql-core-1.1/setup.py +86 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/__init__.py +287 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/error/__init__.py +6 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/error/base.py +42 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/error/format_error.py +11 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/error/located_error.py +29 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/error/syntax_error.py +36 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/__init__.py +26 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/base.py +311 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executor.py +398 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/__init__.py +0 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/asyncio.py +53 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/gevent.py +22 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/process.py +32 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/sync.py +7 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/thread.py +35 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/executors/utils.py +6 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/experimental/__init__.py +0 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/experimental/executor.py +66 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/experimental/fragment.py +252 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/experimental/resolver.py +151 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/experimental/utils.py +7 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/middleware.py +57 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/execution/values.py +145 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/graphql.py +60 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/__init__.py +0 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/ast.py +1349 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/base.py +19 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/lexer.py +435 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/location.py +30 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/parser.py +779 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/printer.py +193 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/source.py +18 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/visitor.py +222 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/language/visitor_meta.py +82 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/__init__.py +0 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/cached_property.py +17 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/contain_subset.py +28 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/default_ordered_dict.py +40 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/ordereddict.py +8 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/pair_set.py +43 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/pyutils/version.py +78 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/type/__init__.py +67 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/type/definition.py +619 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/type/directives.py +132 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/type/introspection.py +440 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/type/scalars.py +131 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/type/schema.py +100 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/type/typemap.py +145 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/__init__.py +0 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/assert_valid_name.py +9 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/ast_from_value.py +65 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/ast_to_code.py +49 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/ast_to_dict.py +24 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/base.py +75 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/build_ast_schema.py +291 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/build_client_schema.py +250 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/concat_ast.py +9 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/extend_schema.py +357 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/get_field_def.py +27 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/get_operation_ast.py +21 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/introspection_query.py +90 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/is_valid_literal_value.py +67 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/is_valid_value.py +66 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/quoted_or_list.py +21 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/schema_printer.py +168 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/suggestion_list.py +56 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/type_comparators.py +69 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/type_from_ast.py +21 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/type_info.py +149 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/utils/value_from_ast.py +69 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/__init__.py +4 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/__init__.py +79 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/arguments_of_correct_type.py +24 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/base.py +8 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/default_values_of_correct_type.py +44 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/fields_on_correct_type.py +113 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/fragments_on_composite_types.py +33 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/known_argument_names.py +70 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/known_directives.py +97 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/known_fragment_names.py +19 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/known_type_names.py +43 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/lone_anonymous_operation.py +23 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/no_fragment_cycles.py +59 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/no_undefined_variables.py +36 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/no_unused_fragments.py +38 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/no_unused_variables.py +37 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/overlapping_fields_can_be_merged.py +529 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/possible_fragment_spreads.py +44 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/provided_non_null_arguments.py +46 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/scalar_leafs.py +33 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/unique_argument_names.py +32 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/unique_fragment_names.py +28 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/unique_input_field_names.py +33 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/unique_operation_names.py +31 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/unique_variable_names.py +27 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/variables_are_input_types.py +21 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/rules/variables_in_allowed_position.py +53 -0
- wandb/vendor/graphql-core-1.1/wandb_graphql/validation/validation.py +158 -0
- wandb/vendor/promise-2.3.0/conftest.py +30 -0
- wandb/vendor/promise-2.3.0/setup.py +64 -0
- wandb/vendor/promise-2.3.0/tests/__init__.py +0 -0
- wandb/vendor/promise-2.3.0/tests/conftest.py +8 -0
- wandb/vendor/promise-2.3.0/tests/test_awaitable.py +32 -0
- wandb/vendor/promise-2.3.0/tests/test_awaitable_35.py +47 -0
- wandb/vendor/promise-2.3.0/tests/test_benchmark.py +116 -0
- wandb/vendor/promise-2.3.0/tests/test_complex_threads.py +23 -0
- wandb/vendor/promise-2.3.0/tests/test_dataloader.py +452 -0
- wandb/vendor/promise-2.3.0/tests/test_dataloader_awaitable_35.py +99 -0
- wandb/vendor/promise-2.3.0/tests/test_dataloader_extra.py +65 -0
- wandb/vendor/promise-2.3.0/tests/test_extra.py +670 -0
- wandb/vendor/promise-2.3.0/tests/test_issues.py +132 -0
- wandb/vendor/promise-2.3.0/tests/test_promise_list.py +70 -0
- wandb/vendor/promise-2.3.0/tests/test_spec.py +584 -0
- wandb/vendor/promise-2.3.0/tests/test_thread_safety.py +115 -0
- wandb/vendor/promise-2.3.0/tests/utils.py +3 -0
- wandb/vendor/promise-2.3.0/wandb_promise/__init__.py +38 -0
- wandb/vendor/promise-2.3.0/wandb_promise/async_.py +135 -0
- wandb/vendor/promise-2.3.0/wandb_promise/compat.py +32 -0
- wandb/vendor/promise-2.3.0/wandb_promise/dataloader.py +326 -0
- wandb/vendor/promise-2.3.0/wandb_promise/iterate_promise.py +12 -0
- wandb/vendor/promise-2.3.0/wandb_promise/promise.py +848 -0
- wandb/vendor/promise-2.3.0/wandb_promise/promise_list.py +151 -0
- wandb/vendor/promise-2.3.0/wandb_promise/pyutils/__init__.py +0 -0
- wandb/vendor/promise-2.3.0/wandb_promise/pyutils/version.py +83 -0
- wandb/vendor/promise-2.3.0/wandb_promise/schedulers/__init__.py +0 -0
- wandb/vendor/promise-2.3.0/wandb_promise/schedulers/asyncio.py +22 -0
- wandb/vendor/promise-2.3.0/wandb_promise/schedulers/gevent.py +21 -0
- wandb/vendor/promise-2.3.0/wandb_promise/schedulers/immediate.py +27 -0
- wandb/vendor/promise-2.3.0/wandb_promise/schedulers/thread.py +18 -0
- wandb/vendor/promise-2.3.0/wandb_promise/utils.py +56 -0
- wandb/vendor/pygments/__init__.py +90 -0
- wandb/vendor/pygments/cmdline.py +568 -0
- wandb/vendor/pygments/console.py +74 -0
- wandb/vendor/pygments/filter.py +74 -0
- wandb/vendor/pygments/filters/__init__.py +350 -0
- wandb/vendor/pygments/formatter.py +95 -0
- wandb/vendor/pygments/formatters/__init__.py +153 -0
- wandb/vendor/pygments/formatters/_mapping.py +85 -0
- wandb/vendor/pygments/formatters/bbcode.py +109 -0
- wandb/vendor/pygments/formatters/html.py +851 -0
- wandb/vendor/pygments/formatters/img.py +600 -0
- wandb/vendor/pygments/formatters/irc.py +182 -0
- wandb/vendor/pygments/formatters/latex.py +482 -0
- wandb/vendor/pygments/formatters/other.py +160 -0
- wandb/vendor/pygments/formatters/rtf.py +147 -0
- wandb/vendor/pygments/formatters/svg.py +153 -0
- wandb/vendor/pygments/formatters/terminal.py +136 -0
- wandb/vendor/pygments/formatters/terminal256.py +309 -0
- wandb/vendor/pygments/lexer.py +871 -0
- wandb/vendor/pygments/lexers/__init__.py +329 -0
- wandb/vendor/pygments/lexers/_asy_builtins.py +1645 -0
- wandb/vendor/pygments/lexers/_cl_builtins.py +232 -0
- wandb/vendor/pygments/lexers/_cocoa_builtins.py +72 -0
- wandb/vendor/pygments/lexers/_csound_builtins.py +1346 -0
- wandb/vendor/pygments/lexers/_lasso_builtins.py +5327 -0
- wandb/vendor/pygments/lexers/_lua_builtins.py +295 -0
- wandb/vendor/pygments/lexers/_mapping.py +500 -0
- wandb/vendor/pygments/lexers/_mql_builtins.py +1172 -0
- wandb/vendor/pygments/lexers/_openedge_builtins.py +2547 -0
- wandb/vendor/pygments/lexers/_php_builtins.py +4756 -0
- wandb/vendor/pygments/lexers/_postgres_builtins.py +621 -0
- wandb/vendor/pygments/lexers/_scilab_builtins.py +3094 -0
- wandb/vendor/pygments/lexers/_sourcemod_builtins.py +1163 -0
- wandb/vendor/pygments/lexers/_stan_builtins.py +532 -0
- wandb/vendor/pygments/lexers/_stata_builtins.py +419 -0
- wandb/vendor/pygments/lexers/_tsql_builtins.py +1004 -0
- wandb/vendor/pygments/lexers/_vim_builtins.py +1939 -0
- wandb/vendor/pygments/lexers/actionscript.py +240 -0
- wandb/vendor/pygments/lexers/agile.py +24 -0
- wandb/vendor/pygments/lexers/algebra.py +221 -0
- wandb/vendor/pygments/lexers/ambient.py +76 -0
- wandb/vendor/pygments/lexers/ampl.py +87 -0
- wandb/vendor/pygments/lexers/apl.py +101 -0
- wandb/vendor/pygments/lexers/archetype.py +318 -0
- wandb/vendor/pygments/lexers/asm.py +641 -0
- wandb/vendor/pygments/lexers/automation.py +374 -0
- wandb/vendor/pygments/lexers/basic.py +500 -0
- wandb/vendor/pygments/lexers/bibtex.py +160 -0
- wandb/vendor/pygments/lexers/business.py +612 -0
- wandb/vendor/pygments/lexers/c_cpp.py +252 -0
- wandb/vendor/pygments/lexers/c_like.py +541 -0
- wandb/vendor/pygments/lexers/capnproto.py +78 -0
- wandb/vendor/pygments/lexers/chapel.py +102 -0
- wandb/vendor/pygments/lexers/clean.py +288 -0
- wandb/vendor/pygments/lexers/compiled.py +34 -0
- wandb/vendor/pygments/lexers/configs.py +833 -0
- wandb/vendor/pygments/lexers/console.py +114 -0
- wandb/vendor/pygments/lexers/crystal.py +393 -0
- wandb/vendor/pygments/lexers/csound.py +366 -0
- wandb/vendor/pygments/lexers/css.py +689 -0
- wandb/vendor/pygments/lexers/d.py +251 -0
- wandb/vendor/pygments/lexers/dalvik.py +125 -0
- wandb/vendor/pygments/lexers/data.py +555 -0
- wandb/vendor/pygments/lexers/diff.py +165 -0
- wandb/vendor/pygments/lexers/dotnet.py +691 -0
- wandb/vendor/pygments/lexers/dsls.py +878 -0
- wandb/vendor/pygments/lexers/dylan.py +289 -0
- wandb/vendor/pygments/lexers/ecl.py +125 -0
- wandb/vendor/pygments/lexers/eiffel.py +65 -0
- wandb/vendor/pygments/lexers/elm.py +121 -0
- wandb/vendor/pygments/lexers/erlang.py +533 -0
- wandb/vendor/pygments/lexers/esoteric.py +277 -0
- wandb/vendor/pygments/lexers/ezhil.py +69 -0
- wandb/vendor/pygments/lexers/factor.py +344 -0
- wandb/vendor/pygments/lexers/fantom.py +250 -0
- wandb/vendor/pygments/lexers/felix.py +273 -0
- wandb/vendor/pygments/lexers/forth.py +177 -0
- wandb/vendor/pygments/lexers/fortran.py +205 -0
- wandb/vendor/pygments/lexers/foxpro.py +428 -0
- wandb/vendor/pygments/lexers/functional.py +21 -0
- wandb/vendor/pygments/lexers/go.py +101 -0
- wandb/vendor/pygments/lexers/grammar_notation.py +213 -0
- wandb/vendor/pygments/lexers/graph.py +80 -0
- wandb/vendor/pygments/lexers/graphics.py +553 -0
- wandb/vendor/pygments/lexers/haskell.py +843 -0
- wandb/vendor/pygments/lexers/haxe.py +936 -0
- wandb/vendor/pygments/lexers/hdl.py +382 -0
- wandb/vendor/pygments/lexers/hexdump.py +103 -0
- wandb/vendor/pygments/lexers/html.py +602 -0
- wandb/vendor/pygments/lexers/idl.py +270 -0
- wandb/vendor/pygments/lexers/igor.py +288 -0
- wandb/vendor/pygments/lexers/inferno.py +96 -0
- wandb/vendor/pygments/lexers/installers.py +322 -0
- wandb/vendor/pygments/lexers/int_fiction.py +1343 -0
- wandb/vendor/pygments/lexers/iolang.py +63 -0
- wandb/vendor/pygments/lexers/j.py +146 -0
- wandb/vendor/pygments/lexers/javascript.py +1525 -0
- wandb/vendor/pygments/lexers/julia.py +333 -0
- wandb/vendor/pygments/lexers/jvm.py +1573 -0
- wandb/vendor/pygments/lexers/lisp.py +2621 -0
- wandb/vendor/pygments/lexers/make.py +202 -0
- wandb/vendor/pygments/lexers/markup.py +595 -0
- wandb/vendor/pygments/lexers/math.py +21 -0
- wandb/vendor/pygments/lexers/matlab.py +663 -0
- wandb/vendor/pygments/lexers/ml.py +769 -0
- wandb/vendor/pygments/lexers/modeling.py +358 -0
- wandb/vendor/pygments/lexers/modula2.py +1561 -0
- wandb/vendor/pygments/lexers/monte.py +204 -0
- wandb/vendor/pygments/lexers/ncl.py +894 -0
- wandb/vendor/pygments/lexers/nimrod.py +159 -0
- wandb/vendor/pygments/lexers/nit.py +64 -0
- wandb/vendor/pygments/lexers/nix.py +136 -0
- wandb/vendor/pygments/lexers/oberon.py +105 -0
- wandb/vendor/pygments/lexers/objective.py +504 -0
- wandb/vendor/pygments/lexers/ooc.py +85 -0
- wandb/vendor/pygments/lexers/other.py +41 -0
- wandb/vendor/pygments/lexers/parasail.py +79 -0
- wandb/vendor/pygments/lexers/parsers.py +835 -0
- wandb/vendor/pygments/lexers/pascal.py +644 -0
- wandb/vendor/pygments/lexers/pawn.py +199 -0
- wandb/vendor/pygments/lexers/perl.py +620 -0
- wandb/vendor/pygments/lexers/php.py +267 -0
- wandb/vendor/pygments/lexers/praat.py +294 -0
- wandb/vendor/pygments/lexers/prolog.py +306 -0
- wandb/vendor/pygments/lexers/python.py +939 -0
- wandb/vendor/pygments/lexers/qvt.py +152 -0
- wandb/vendor/pygments/lexers/r.py +453 -0
- wandb/vendor/pygments/lexers/rdf.py +270 -0
- wandb/vendor/pygments/lexers/rebol.py +431 -0
- wandb/vendor/pygments/lexers/resource.py +85 -0
- wandb/vendor/pygments/lexers/rnc.py +67 -0
- wandb/vendor/pygments/lexers/roboconf.py +82 -0
- wandb/vendor/pygments/lexers/robotframework.py +560 -0
- wandb/vendor/pygments/lexers/ruby.py +519 -0
- wandb/vendor/pygments/lexers/rust.py +220 -0
- wandb/vendor/pygments/lexers/sas.py +228 -0
- wandb/vendor/pygments/lexers/scripting.py +1222 -0
- wandb/vendor/pygments/lexers/shell.py +794 -0
- wandb/vendor/pygments/lexers/smalltalk.py +195 -0
- wandb/vendor/pygments/lexers/smv.py +79 -0
- wandb/vendor/pygments/lexers/snobol.py +83 -0
- wandb/vendor/pygments/lexers/special.py +103 -0
- wandb/vendor/pygments/lexers/sql.py +681 -0
- wandb/vendor/pygments/lexers/stata.py +108 -0
- wandb/vendor/pygments/lexers/supercollider.py +90 -0
- wandb/vendor/pygments/lexers/tcl.py +145 -0
- wandb/vendor/pygments/lexers/templates.py +2283 -0
- wandb/vendor/pygments/lexers/testing.py +207 -0
- wandb/vendor/pygments/lexers/text.py +25 -0
- wandb/vendor/pygments/lexers/textedit.py +169 -0
- wandb/vendor/pygments/lexers/textfmts.py +297 -0
- wandb/vendor/pygments/lexers/theorem.py +458 -0
- wandb/vendor/pygments/lexers/trafficscript.py +54 -0
- wandb/vendor/pygments/lexers/typoscript.py +226 -0
- wandb/vendor/pygments/lexers/urbi.py +133 -0
- wandb/vendor/pygments/lexers/varnish.py +190 -0
- wandb/vendor/pygments/lexers/verification.py +111 -0
- wandb/vendor/pygments/lexers/web.py +24 -0
- wandb/vendor/pygments/lexers/webmisc.py +988 -0
- wandb/vendor/pygments/lexers/whiley.py +116 -0
- wandb/vendor/pygments/lexers/x10.py +69 -0
- wandb/vendor/pygments/modeline.py +44 -0
- wandb/vendor/pygments/plugin.py +68 -0
- wandb/vendor/pygments/regexopt.py +92 -0
- wandb/vendor/pygments/scanner.py +105 -0
- wandb/vendor/pygments/sphinxext.py +158 -0
- wandb/vendor/pygments/style.py +155 -0
- wandb/vendor/pygments/styles/__init__.py +80 -0
- wandb/vendor/pygments/styles/abap.py +29 -0
- wandb/vendor/pygments/styles/algol.py +63 -0
- wandb/vendor/pygments/styles/algol_nu.py +63 -0
- wandb/vendor/pygments/styles/arduino.py +98 -0
- wandb/vendor/pygments/styles/autumn.py +65 -0
- wandb/vendor/pygments/styles/borland.py +51 -0
- wandb/vendor/pygments/styles/bw.py +49 -0
- wandb/vendor/pygments/styles/colorful.py +81 -0
- wandb/vendor/pygments/styles/default.py +73 -0
- wandb/vendor/pygments/styles/emacs.py +72 -0
- wandb/vendor/pygments/styles/friendly.py +72 -0
- wandb/vendor/pygments/styles/fruity.py +42 -0
- wandb/vendor/pygments/styles/igor.py +29 -0
- wandb/vendor/pygments/styles/lovelace.py +97 -0
- wandb/vendor/pygments/styles/manni.py +75 -0
- wandb/vendor/pygments/styles/monokai.py +106 -0
- wandb/vendor/pygments/styles/murphy.py +80 -0
- wandb/vendor/pygments/styles/native.py +65 -0
- wandb/vendor/pygments/styles/paraiso_dark.py +125 -0
- wandb/vendor/pygments/styles/paraiso_light.py +125 -0
- wandb/vendor/pygments/styles/pastie.py +75 -0
- wandb/vendor/pygments/styles/perldoc.py +69 -0
- wandb/vendor/pygments/styles/rainbow_dash.py +89 -0
- wandb/vendor/pygments/styles/rrt.py +33 -0
- wandb/vendor/pygments/styles/sas.py +44 -0
- wandb/vendor/pygments/styles/stata.py +40 -0
- wandb/vendor/pygments/styles/tango.py +141 -0
- wandb/vendor/pygments/styles/trac.py +63 -0
- wandb/vendor/pygments/styles/vim.py +63 -0
- wandb/vendor/pygments/styles/vs.py +38 -0
- wandb/vendor/pygments/styles/xcode.py +51 -0
- wandb/vendor/pygments/token.py +213 -0
- wandb/vendor/pygments/unistring.py +217 -0
- wandb/vendor/pygments/util.py +388 -0
- wandb/vendor/pynvml/__init__.py +0 -0
- wandb/vendor/pynvml/pynvml.py +4779 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/__init__.py +17 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/events.py +615 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/__init__.py +98 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/api.py +369 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/fsevents.py +172 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/fsevents2.py +239 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/inotify.py +218 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/inotify_buffer.py +81 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/inotify_c.py +575 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/kqueue.py +730 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/polling.py +145 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/read_directory_changes.py +133 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/observers/winapi.py +348 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/patterns.py +265 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/tricks/__init__.py +174 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/__init__.py +151 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/bricks.py +249 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/compat.py +29 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/decorators.py +198 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/delayed_queue.py +88 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/dirsnapshot.py +293 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/echo.py +157 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/event_backport.py +41 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/importlib2.py +40 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/platform.py +57 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/unicode_paths.py +64 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/utils/win32stat.py +123 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/version.py +28 -0
- wandb/vendor/watchdog_0_9_0/wandb_watchdog/watchmedo.py +577 -0
- wandb/wandb_agent.py +588 -0
- wandb/wandb_controller.py +721 -0
- wandb/wandb_run.py +9 -0
- wandb-0.18.2.dist-info/METADATA +213 -0
- wandb-0.18.2.dist-info/RECORD +827 -0
- wandb-0.18.2.dist-info/WHEEL +5 -0
- wandb-0.18.2.dist-info/entry_points.txt +3 -0
- wandb-0.18.2.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,438 @@
|
|
1
|
+
"""This module contains the `WBTraceTree` media type, and the supporting dataclasses.
|
2
|
+
|
3
|
+
A `WBTraceTree` is a media object containing a root span and an
|
4
|
+
arbitrary model dump as a serializable dictionary. Logging such media type will
|
5
|
+
result in a W&B Trace Debugger panel being created in the workspace UI.
|
6
|
+
"""
|
7
|
+
|
8
|
+
import dataclasses
|
9
|
+
import hashlib
|
10
|
+
import json
|
11
|
+
import typing
|
12
|
+
from dataclasses import dataclass, field
|
13
|
+
from enum import Enum
|
14
|
+
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Union
|
15
|
+
|
16
|
+
import wandb
|
17
|
+
from wandb.sdk.data_types import _dtypes
|
18
|
+
from wandb.sdk.data_types.base_types.media import Media
|
19
|
+
from wandb.sdk.data_types.utils import _json_helper
|
20
|
+
|
21
|
+
if TYPE_CHECKING: # pragma: no cover
|
22
|
+
from wandb.sdk.artifacts.artifact import Artifact
|
23
|
+
|
24
|
+
from ..wandb_run import Run as LocalRun
|
25
|
+
|
26
|
+
|
27
|
+
class StatusCode(str, Enum):
|
28
|
+
SUCCESS = "SUCCESS"
|
29
|
+
ERROR = "ERROR"
|
30
|
+
|
31
|
+
def __str__(self) -> str:
|
32
|
+
return str(self.value)
|
33
|
+
|
34
|
+
|
35
|
+
class SpanKind(str, Enum):
|
36
|
+
LLM = "LLM"
|
37
|
+
CHAIN = "CHAIN"
|
38
|
+
AGENT = "AGENT"
|
39
|
+
TOOL = "TOOL"
|
40
|
+
|
41
|
+
def __str__(self) -> str:
|
42
|
+
return str(self.value)
|
43
|
+
|
44
|
+
|
45
|
+
@dataclass()
|
46
|
+
class Result:
|
47
|
+
inputs: Optional[Dict[str, Any]] = field(default=None)
|
48
|
+
outputs: Optional[Dict[str, Any]] = field(default=None)
|
49
|
+
|
50
|
+
|
51
|
+
@dataclass()
|
52
|
+
class Span:
|
53
|
+
span_id: Optional[str] = field(default=None)
|
54
|
+
name: Optional[str] = field(default=None)
|
55
|
+
start_time_ms: Optional[int] = field(default=None)
|
56
|
+
end_time_ms: Optional[int] = field(default=None)
|
57
|
+
status_code: Optional[StatusCode] = field(default=None)
|
58
|
+
status_message: Optional[str] = field(default=None)
|
59
|
+
attributes: Optional[Dict[str, Any]] = field(default=None)
|
60
|
+
results: Optional[List[Result]] = field(default=None)
|
61
|
+
child_spans: Optional[List["Span"]] = field(default=None)
|
62
|
+
span_kind: Optional[SpanKind] = field(default=None)
|
63
|
+
|
64
|
+
def add_attribute(self, key: str, value: Any) -> None:
|
65
|
+
if self.attributes is None:
|
66
|
+
self.attributes = {}
|
67
|
+
self.attributes[key] = value
|
68
|
+
|
69
|
+
def add_named_result(self, inputs: Dict[str, Any], outputs: Dict[str, Any]) -> None:
|
70
|
+
if self.results is None:
|
71
|
+
self.results = []
|
72
|
+
self.results.append(Result(inputs, outputs))
|
73
|
+
|
74
|
+
def add_child_span(self, span: "Span") -> None:
|
75
|
+
if self.child_spans is None:
|
76
|
+
self.child_spans = []
|
77
|
+
self.child_spans.append(span)
|
78
|
+
|
79
|
+
|
80
|
+
class WBTraceTree(Media):
|
81
|
+
"""Media object for trace tree data.
|
82
|
+
|
83
|
+
Arguments:
|
84
|
+
root_span (Span): The root span of the trace tree.
|
85
|
+
model_dict (dict, optional): A dictionary containing the model dump.
|
86
|
+
NOTE: model_dict is a completely-user-defined dict. The UI will render
|
87
|
+
a JSON viewer for this dict, giving special treatment to dictionaries
|
88
|
+
with a `_kind` key. This is because model vendors have such different
|
89
|
+
serialization formats that we need to be flexible here.
|
90
|
+
"""
|
91
|
+
|
92
|
+
_log_type = "wb_trace_tree"
|
93
|
+
|
94
|
+
def __init__(
|
95
|
+
self,
|
96
|
+
root_span: Span,
|
97
|
+
model_dict: typing.Optional[dict] = None,
|
98
|
+
):
|
99
|
+
super().__init__()
|
100
|
+
self._root_span = root_span
|
101
|
+
self._model_dict = model_dict
|
102
|
+
|
103
|
+
@classmethod
|
104
|
+
def get_media_subdir(cls) -> str:
|
105
|
+
return "media/wb_trace_tree"
|
106
|
+
|
107
|
+
def to_json(self, run: Optional[Union["LocalRun", "Artifact"]]) -> dict:
|
108
|
+
res = {"_type": self._log_type}
|
109
|
+
# Here we use `dumps` to put things into string format. This is because
|
110
|
+
# the complex data structures create problems for gorilla history to parquet.
|
111
|
+
if self._model_dict is not None:
|
112
|
+
model_dump_str = _safe_serialize(self._model_dict)
|
113
|
+
res["model_hash"] = _hash_id(model_dump_str)
|
114
|
+
res["model_dict_dumps"] = model_dump_str
|
115
|
+
res["root_span_dumps"] = _safe_serialize(dataclasses.asdict(self._root_span))
|
116
|
+
return res
|
117
|
+
|
118
|
+
def is_bound(self) -> bool:
|
119
|
+
return True
|
120
|
+
|
121
|
+
|
122
|
+
class _WBTraceTreeFileType(_dtypes.Type):
|
123
|
+
name = "wb_trace_tree"
|
124
|
+
types = [WBTraceTree]
|
125
|
+
|
126
|
+
|
127
|
+
_dtypes.TypeRegistry.add(_WBTraceTreeFileType)
|
128
|
+
|
129
|
+
|
130
|
+
# generate a deterministic 16 character id based on input string
|
131
|
+
def _hash_id(s: str) -> str:
|
132
|
+
return hashlib.md5(s.encode("utf-8")).hexdigest()[:16]
|
133
|
+
|
134
|
+
|
135
|
+
def _fallback_serialize(obj: Any) -> str:
|
136
|
+
try:
|
137
|
+
return f"<<non-serializable: {type(obj).__qualname__}>>"
|
138
|
+
except Exception:
|
139
|
+
return "<<non-serializable>>"
|
140
|
+
|
141
|
+
|
142
|
+
def _safe_serialize(obj: dict) -> str:
|
143
|
+
try:
|
144
|
+
return json.dumps(
|
145
|
+
_json_helper(obj, None),
|
146
|
+
skipkeys=True,
|
147
|
+
default=_fallback_serialize,
|
148
|
+
)
|
149
|
+
except Exception:
|
150
|
+
return "{}"
|
151
|
+
|
152
|
+
|
153
|
+
class TraceAttribute:
|
154
|
+
"""Descriptor for accessing and setting attributes of the `Trace` class."""
|
155
|
+
|
156
|
+
def __set_name__(self, owner: type, name: str) -> None:
|
157
|
+
self.name = name
|
158
|
+
|
159
|
+
def __get__(self, instance: "Trace", owner: type) -> Any:
|
160
|
+
return getattr(instance._span, self.name)
|
161
|
+
|
162
|
+
def __set__(self, instance: "Trace", value: Any) -> None:
|
163
|
+
setattr(instance._span, self.name, value)
|
164
|
+
|
165
|
+
|
166
|
+
class Trace:
|
167
|
+
"""A simplification of WBTraceTree and Span to manage a trace - a collection of spans, their metadata and hierarchy.
|
168
|
+
|
169
|
+
Args:
|
170
|
+
name: (str) The name of the root span.
|
171
|
+
kind: (str, optional) The kind of the root span.
|
172
|
+
status_code: (str, optional) The status of the root span, either "error" or "success".
|
173
|
+
status_message: (str, optional) Any status message associated with the root span.
|
174
|
+
metadata: (dict, optional) Any additional metadata for the root span.
|
175
|
+
start_time_ms: (int, optional) The start time of the root span in milliseconds.
|
176
|
+
end_time_ms: (int, optional) The end time of the root span in milliseconds.
|
177
|
+
inputs: (dict, optional) The named inputs of the root span.
|
178
|
+
outputs: (dict, optional) The named outputs of the root span.
|
179
|
+
model_dict: (dict, optional) A json serializable dictionary containing the model architecture details.
|
180
|
+
|
181
|
+
Example:
|
182
|
+
.. code-block:: python
|
183
|
+
```
|
184
|
+
trace = Trace(
|
185
|
+
name="My awesome Model",
|
186
|
+
kind="LLM",
|
187
|
+
status_code= "SUCCESS",
|
188
|
+
metadata={"attr_1": 1, "attr_2": 2,},
|
189
|
+
start_time_ms=int(round(time.time() * 1000)),
|
190
|
+
end_time_ms=int(round(time.time() * 1000))+1000,
|
191
|
+
inputs={"user": "How old is google?"},
|
192
|
+
outputs={"assistant": "25 years old"},
|
193
|
+
model_dict={"_kind": "openai", "api_type": "azure"}
|
194
|
+
)
|
195
|
+
run = wandb.init(project=<my_awesome_project>,)
|
196
|
+
trace.log("my_trace")
|
197
|
+
wandb.finish()
|
198
|
+
```
|
199
|
+
"""
|
200
|
+
|
201
|
+
name = TraceAttribute()
|
202
|
+
status_code = TraceAttribute()
|
203
|
+
status_message = TraceAttribute()
|
204
|
+
start_time_ms = TraceAttribute()
|
205
|
+
end_time_ms = TraceAttribute()
|
206
|
+
|
207
|
+
def __init__(
|
208
|
+
self,
|
209
|
+
name: str,
|
210
|
+
kind: Optional[str] = None,
|
211
|
+
status_code: Optional[str] = None,
|
212
|
+
status_message: Optional[str] = None,
|
213
|
+
metadata: Optional[dict] = None,
|
214
|
+
start_time_ms: Optional[int] = None,
|
215
|
+
end_time_ms: Optional[int] = None,
|
216
|
+
inputs: Optional[dict] = None,
|
217
|
+
outputs: Optional[dict] = None,
|
218
|
+
model_dict: Optional[dict] = None,
|
219
|
+
):
|
220
|
+
self._span = self._assert_and_create_span(
|
221
|
+
name=name,
|
222
|
+
kind=kind,
|
223
|
+
status_code=status_code,
|
224
|
+
status_message=status_message,
|
225
|
+
metadata=metadata,
|
226
|
+
start_time_ms=start_time_ms,
|
227
|
+
end_time_ms=end_time_ms,
|
228
|
+
inputs=inputs,
|
229
|
+
outputs=outputs,
|
230
|
+
)
|
231
|
+
if model_dict is not None:
|
232
|
+
assert isinstance(model_dict, dict), "Model dict must be a dictionary"
|
233
|
+
self._model_dict = model_dict
|
234
|
+
|
235
|
+
def _assert_and_create_span(
|
236
|
+
self,
|
237
|
+
name: str,
|
238
|
+
kind: Optional[str] = None,
|
239
|
+
status_code: Optional[str] = None,
|
240
|
+
status_message: Optional[str] = None,
|
241
|
+
metadata: Optional[dict] = None,
|
242
|
+
start_time_ms: Optional[int] = None,
|
243
|
+
end_time_ms: Optional[int] = None,
|
244
|
+
inputs: Optional[dict] = None,
|
245
|
+
outputs: Optional[dict] = None,
|
246
|
+
) -> Span:
|
247
|
+
"""Utility to assert the validity of the span parameters and create a span object.
|
248
|
+
|
249
|
+
Args:
|
250
|
+
name: The name of the span.
|
251
|
+
kind: The kind of the span.
|
252
|
+
status_code: The status code of the span.
|
253
|
+
status_message: The status message of the span.
|
254
|
+
metadata: Dictionary of metadata to be logged with the span.
|
255
|
+
start_time_ms: Start time of the span in milliseconds.
|
256
|
+
end_time_ms: End time of the span in milliseconds.
|
257
|
+
inputs: Dictionary of inputs to be logged with the span.
|
258
|
+
outputs: Dictionary of outputs to be logged with the span.
|
259
|
+
|
260
|
+
Returns:
|
261
|
+
A Span object.
|
262
|
+
"""
|
263
|
+
if kind is not None:
|
264
|
+
assert (
|
265
|
+
kind.upper() in SpanKind.__members__
|
266
|
+
), "Invalid span kind, can be one of 'LLM', 'AGENT', 'CHAIN', 'TOOL'"
|
267
|
+
kind = SpanKind(kind.upper())
|
268
|
+
if status_code is not None:
|
269
|
+
assert (
|
270
|
+
status_code.upper() in StatusCode.__members__
|
271
|
+
), "Invalid status code, can be one of 'SUCCESS' or 'ERROR'"
|
272
|
+
status_code = StatusCode(status_code.upper())
|
273
|
+
if inputs is not None:
|
274
|
+
assert isinstance(inputs, dict), "Inputs must be a dictionary"
|
275
|
+
if outputs is not None:
|
276
|
+
assert isinstance(outputs, dict), "Outputs must be a dictionary"
|
277
|
+
if inputs or outputs:
|
278
|
+
result = Result(inputs=inputs, outputs=outputs)
|
279
|
+
else:
|
280
|
+
result = None
|
281
|
+
|
282
|
+
if metadata is not None:
|
283
|
+
assert isinstance(metadata, dict), "Metadata must be a dictionary"
|
284
|
+
|
285
|
+
return Span(
|
286
|
+
name=name,
|
287
|
+
span_kind=kind,
|
288
|
+
status_code=status_code,
|
289
|
+
status_message=status_message,
|
290
|
+
attributes=metadata,
|
291
|
+
start_time_ms=start_time_ms,
|
292
|
+
end_time_ms=end_time_ms,
|
293
|
+
results=[result] if result else None,
|
294
|
+
)
|
295
|
+
|
296
|
+
def add_child(
|
297
|
+
self,
|
298
|
+
child: "Trace",
|
299
|
+
) -> "Trace":
|
300
|
+
"""Utility to add a child span to the current span of the trace.
|
301
|
+
|
302
|
+
Args:
|
303
|
+
child: The child span to be added to the current span of the trace.
|
304
|
+
|
305
|
+
Returns:
|
306
|
+
The current trace object with the child span added to it.
|
307
|
+
"""
|
308
|
+
self._span.add_child_span(child._span)
|
309
|
+
if self._model_dict is not None and child._model_dict is not None:
|
310
|
+
self._model_dict.update({child._span.name: child._model_dict})
|
311
|
+
return self
|
312
|
+
|
313
|
+
def add_inputs_and_outputs(self, inputs: dict, outputs: dict) -> "Trace":
|
314
|
+
"""Add a result to the span of the current trace.
|
315
|
+
|
316
|
+
Args:
|
317
|
+
inputs: Dictionary of inputs to be logged with the span.
|
318
|
+
outputs: Dictionary of outputs to be logged with the span.
|
319
|
+
|
320
|
+
Returns:
|
321
|
+
The current trace object with the result added to it.
|
322
|
+
"""
|
323
|
+
if self._span.results is None:
|
324
|
+
result = Result(inputs=inputs, outputs=outputs)
|
325
|
+
self._span.results = [result]
|
326
|
+
else:
|
327
|
+
result = Result(inputs=inputs, outputs=outputs)
|
328
|
+
self._span.results.append(result)
|
329
|
+
return self
|
330
|
+
|
331
|
+
def add_metadata(self, metadata: dict) -> "Trace":
|
332
|
+
"""Add metadata to the span of the current trace."""
|
333
|
+
if self._span.attributes is None:
|
334
|
+
self._span.attributes = metadata
|
335
|
+
else:
|
336
|
+
self._span.attributes.update(metadata)
|
337
|
+
return self
|
338
|
+
|
339
|
+
@property
|
340
|
+
def metadata(self) -> Optional[Dict[str, str]]:
|
341
|
+
"""Get the metadata of the trace.
|
342
|
+
|
343
|
+
Returns:
|
344
|
+
Dictionary of metadata.
|
345
|
+
"""
|
346
|
+
return self._span.attributes
|
347
|
+
|
348
|
+
@metadata.setter
|
349
|
+
def metadata(self, value: Dict[str, str]) -> None:
|
350
|
+
"""Set the metadata of the trace.
|
351
|
+
|
352
|
+
Args:
|
353
|
+
value: Dictionary of metadata to be set.
|
354
|
+
"""
|
355
|
+
if self._span.attributes is None:
|
356
|
+
self._span.attributes = value
|
357
|
+
else:
|
358
|
+
self._span.attributes.update(value)
|
359
|
+
|
360
|
+
@property
|
361
|
+
def inputs(self) -> Optional[Dict[str, str]]:
|
362
|
+
"""Get the inputs of the trace.
|
363
|
+
|
364
|
+
Returns:
|
365
|
+
Dictionary of inputs.
|
366
|
+
"""
|
367
|
+
return self._span.results[-1].inputs if self._span.results else None
|
368
|
+
|
369
|
+
@inputs.setter
|
370
|
+
def inputs(self, value: Dict[str, str]) -> None:
|
371
|
+
"""Set the inputs of the trace.
|
372
|
+
|
373
|
+
Args:
|
374
|
+
value: Dictionary of inputs to be set.
|
375
|
+
"""
|
376
|
+
if self._span.results is None:
|
377
|
+
result = Result(inputs=value, outputs={})
|
378
|
+
self._span.results = [result]
|
379
|
+
else:
|
380
|
+
result = Result(inputs=value, outputs=self._span.results[-1].outputs)
|
381
|
+
self._span.results.append(result)
|
382
|
+
|
383
|
+
@property
|
384
|
+
def outputs(self) -> Optional[Dict[str, str]]:
|
385
|
+
"""Get the outputs of the trace.
|
386
|
+
|
387
|
+
Returns:
|
388
|
+
Dictionary of outputs.
|
389
|
+
"""
|
390
|
+
return self._span.results[-1].outputs if self._span.results else None
|
391
|
+
|
392
|
+
@outputs.setter
|
393
|
+
def outputs(self, value: Dict[str, str]) -> None:
|
394
|
+
"""Set the outputs of the trace.
|
395
|
+
|
396
|
+
Args:
|
397
|
+
value: Dictionary of outputs to be set.
|
398
|
+
"""
|
399
|
+
if self._span.results is None:
|
400
|
+
result = Result(inputs={}, outputs=value)
|
401
|
+
self._span.results = [result]
|
402
|
+
else:
|
403
|
+
result = Result(inputs=self._span.results[-1].inputs, outputs=value)
|
404
|
+
self._span.results.append(result)
|
405
|
+
|
406
|
+
@property
|
407
|
+
def kind(self) -> Optional[str]:
|
408
|
+
"""Get the kind of the trace.
|
409
|
+
|
410
|
+
Returns:
|
411
|
+
The kind of the trace.
|
412
|
+
"""
|
413
|
+
return self._span.span_kind.value if self._span.span_kind else None
|
414
|
+
|
415
|
+
@kind.setter
|
416
|
+
def kind(self, value: str) -> None:
|
417
|
+
"""Set the kind of the trace.
|
418
|
+
|
419
|
+
Args:
|
420
|
+
value: The kind of the trace to be set.
|
421
|
+
"""
|
422
|
+
assert (
|
423
|
+
value.upper() in SpanKind.__members__
|
424
|
+
), "Invalid span kind, can be one of 'LLM', 'AGENT', 'CHAIN', 'TOOL'"
|
425
|
+
self._span.span_kind = SpanKind(value.upper())
|
426
|
+
|
427
|
+
def log(self, name: str) -> None:
|
428
|
+
"""Log the trace to a wandb run.
|
429
|
+
|
430
|
+
Args:
|
431
|
+
name: The name of the trace to be logged
|
432
|
+
"""
|
433
|
+
trace_tree = WBTraceTree(self._span, self._model_dict)
|
434
|
+
assert (
|
435
|
+
wandb.run is not None
|
436
|
+
), "You must call wandb.init() before logging a trace"
|
437
|
+
assert len(name.strip()) > 0, "You must provide a valid name to log the trace"
|
438
|
+
wandb.run.log({name: trace_tree})
|
@@ -0,0 +1,229 @@
|
|
1
|
+
import datetime
|
2
|
+
import logging
|
3
|
+
import os
|
4
|
+
import re
|
5
|
+
from decimal import Decimal
|
6
|
+
from typing import TYPE_CHECKING, Optional, Sequence, Union, cast
|
7
|
+
|
8
|
+
import wandb
|
9
|
+
from wandb import util
|
10
|
+
|
11
|
+
from .base_types.media import BatchableMedia, Media
|
12
|
+
from .base_types.wb_value import WBValue
|
13
|
+
from .image import _server_accepts_image_filenames
|
14
|
+
from .plotly import Plotly
|
15
|
+
|
16
|
+
if TYPE_CHECKING: # pragma: no cover
|
17
|
+
import matplotlib # type: ignore
|
18
|
+
import pandas as pd
|
19
|
+
import plotly # type: ignore
|
20
|
+
|
21
|
+
from ..wandb_run import Run as LocalRun
|
22
|
+
|
23
|
+
ValToJsonType = Union[
|
24
|
+
dict,
|
25
|
+
"WBValue",
|
26
|
+
Sequence["WBValue"],
|
27
|
+
"plotly.Figure",
|
28
|
+
"matplotlib.artist.Artist",
|
29
|
+
"pd.DataFrame",
|
30
|
+
object,
|
31
|
+
]
|
32
|
+
|
33
|
+
|
34
|
+
def history_dict_to_json(
|
35
|
+
run: Optional["LocalRun"],
|
36
|
+
payload: dict,
|
37
|
+
step: Optional[int] = None,
|
38
|
+
ignore_copy_err: Optional[bool] = None,
|
39
|
+
) -> dict:
|
40
|
+
# Converts a History row dict's elements so they're friendly for JSON serialization.
|
41
|
+
|
42
|
+
if step is None:
|
43
|
+
# We should be at the top level of the History row; assume this key is set.
|
44
|
+
step = payload["_step"]
|
45
|
+
|
46
|
+
# We use list here because we were still seeing cases of RuntimeError dict changed size
|
47
|
+
for key in list(payload):
|
48
|
+
val = payload[key]
|
49
|
+
if isinstance(val, dict):
|
50
|
+
payload[key] = history_dict_to_json(
|
51
|
+
run, val, step=step, ignore_copy_err=ignore_copy_err
|
52
|
+
)
|
53
|
+
else:
|
54
|
+
payload[key] = val_to_json(
|
55
|
+
run, key, val, namespace=step, ignore_copy_err=ignore_copy_err
|
56
|
+
)
|
57
|
+
|
58
|
+
return payload
|
59
|
+
|
60
|
+
|
61
|
+
# TODO: refine this
|
62
|
+
def val_to_json(
|
63
|
+
run: Optional["LocalRun"],
|
64
|
+
key: str,
|
65
|
+
val: "ValToJsonType",
|
66
|
+
namespace: Optional[Union[str, int]] = None,
|
67
|
+
ignore_copy_err: Optional[bool] = None,
|
68
|
+
) -> Union[Sequence, dict]:
|
69
|
+
# Converts a wandb datatype to its JSON representation.
|
70
|
+
if namespace is None:
|
71
|
+
raise ValueError(
|
72
|
+
"val_to_json must be called with a namespace(a step number, or 'summary') argument"
|
73
|
+
)
|
74
|
+
|
75
|
+
converted = val
|
76
|
+
|
77
|
+
if isinstance(val, (int, float, str, bool)):
|
78
|
+
# These are already JSON-serializable,
|
79
|
+
# no need to do the expensive checks below.
|
80
|
+
return converted # type: ignore[return-value]
|
81
|
+
|
82
|
+
typename = util.get_full_typename(val)
|
83
|
+
|
84
|
+
if util.is_pandas_data_frame(val):
|
85
|
+
val = wandb.Table(dataframe=val)
|
86
|
+
|
87
|
+
elif util.is_matplotlib_typename(typename) or util.is_plotly_typename(typename):
|
88
|
+
val = Plotly.make_plot_media(val)
|
89
|
+
elif isinstance(val, (list, tuple, range)) and all(
|
90
|
+
isinstance(v, WBValue) for v in val
|
91
|
+
):
|
92
|
+
assert run
|
93
|
+
# This check will break down if Image/Audio/... have child classes.
|
94
|
+
if (
|
95
|
+
len(val)
|
96
|
+
and isinstance(val[0], BatchableMedia)
|
97
|
+
and all(isinstance(v, type(val[0])) for v in val)
|
98
|
+
):
|
99
|
+
if TYPE_CHECKING:
|
100
|
+
val = cast(Sequence["BatchableMedia"], val)
|
101
|
+
|
102
|
+
items = _prune_max_seq(val)
|
103
|
+
|
104
|
+
if _server_accepts_image_filenames():
|
105
|
+
for item in items:
|
106
|
+
item.bind_to_run(
|
107
|
+
run=run,
|
108
|
+
key=key,
|
109
|
+
step=namespace,
|
110
|
+
ignore_copy_err=ignore_copy_err,
|
111
|
+
)
|
112
|
+
else:
|
113
|
+
for i, item in enumerate(items):
|
114
|
+
item.bind_to_run(
|
115
|
+
run=run,
|
116
|
+
key=key,
|
117
|
+
step=namespace,
|
118
|
+
id_=i,
|
119
|
+
ignore_copy_err=ignore_copy_err,
|
120
|
+
)
|
121
|
+
if run._attach_id and run._init_pid != os.getpid():
|
122
|
+
wandb.termwarn(
|
123
|
+
f"Attempting to log a sequence of {items[0].__class__.__name__} objects from multiple processes might result in data loss. Please upgrade your wandb server",
|
124
|
+
repeat=False,
|
125
|
+
)
|
126
|
+
|
127
|
+
return items[0].seq_to_json(items, run, key, namespace)
|
128
|
+
else:
|
129
|
+
# TODO(adrian): Good idea to pass on the same key here? Maybe include
|
130
|
+
# the array index?
|
131
|
+
# There is a bug here: if this array contains two arrays of the same type of
|
132
|
+
# anonymous media objects, their eventual names will collide.
|
133
|
+
# This used to happen. The frontend doesn't handle heterogeneous arrays
|
134
|
+
# raise ValueError(
|
135
|
+
# "Mixed media types in the same list aren't supported")
|
136
|
+
return [
|
137
|
+
val_to_json(
|
138
|
+
run, key, v, namespace=namespace, ignore_copy_err=ignore_copy_err
|
139
|
+
)
|
140
|
+
for v in val
|
141
|
+
]
|
142
|
+
|
143
|
+
if isinstance(val, WBValue):
|
144
|
+
assert run
|
145
|
+
if isinstance(val, Media) and not val.is_bound():
|
146
|
+
if hasattr(val, "_log_type") and val._log_type in [
|
147
|
+
"table",
|
148
|
+
"partitioned-table",
|
149
|
+
"joined-table",
|
150
|
+
]:
|
151
|
+
# Special conditional to log tables as artifact entries as well.
|
152
|
+
# I suspect we will generalize this as we transition to storing all
|
153
|
+
# files in an artifact
|
154
|
+
# we sanitize the key to meet the constraints
|
155
|
+
# in this case, leaving only alphanumerics or underscores.
|
156
|
+
sanitized_key = re.sub(r"[^a-zA-Z0-9_]+", "", key)
|
157
|
+
art = wandb.Artifact(f"run-{run.id}-{sanitized_key}", "run_table")
|
158
|
+
art.add(val, key)
|
159
|
+
run.log_artifact(art)
|
160
|
+
|
161
|
+
# Partitioned tables and joined tables do not support being bound to runs.
|
162
|
+
if not (
|
163
|
+
hasattr(val, "_log_type")
|
164
|
+
and val._log_type in ["partitioned-table", "joined-table"]
|
165
|
+
):
|
166
|
+
val.bind_to_run(run, key, namespace)
|
167
|
+
|
168
|
+
return val.to_json(run)
|
169
|
+
|
170
|
+
return converted # type: ignore
|
171
|
+
|
172
|
+
|
173
|
+
def _prune_max_seq(seq: Sequence["BatchableMedia"]) -> Sequence["BatchableMedia"]:
|
174
|
+
# If media type has a max respect it
|
175
|
+
items = seq
|
176
|
+
if hasattr(seq[0], "MAX_ITEMS") and seq[0].MAX_ITEMS < len(seq):
|
177
|
+
logging.warning(
|
178
|
+
"Only %i %s will be uploaded."
|
179
|
+
% (seq[0].MAX_ITEMS, seq[0].__class__.__name__)
|
180
|
+
)
|
181
|
+
items = seq[: seq[0].MAX_ITEMS]
|
182
|
+
return items
|
183
|
+
|
184
|
+
|
185
|
+
def _json_helper(val, artifact):
|
186
|
+
if isinstance(val, WBValue):
|
187
|
+
return val.to_json(artifact)
|
188
|
+
elif val.__class__ is dict:
|
189
|
+
res = {}
|
190
|
+
for key in val:
|
191
|
+
res[key] = _json_helper(val[key], artifact)
|
192
|
+
return res
|
193
|
+
|
194
|
+
if hasattr(val, "tolist"):
|
195
|
+
py_val = val.tolist()
|
196
|
+
if val.__class__.__name__ == "datetime64" and isinstance(py_val, int):
|
197
|
+
# when numpy datetime64 .tolist() returns an int, it is nanoseconds.
|
198
|
+
# need to convert to milliseconds
|
199
|
+
return _json_helper(py_val / int(1e6), artifact)
|
200
|
+
return _json_helper(py_val, artifact)
|
201
|
+
elif hasattr(val, "item"):
|
202
|
+
return _json_helper(val.item(), artifact)
|
203
|
+
|
204
|
+
if isinstance(val, datetime.datetime):
|
205
|
+
if val.tzinfo is None:
|
206
|
+
val = datetime.datetime(
|
207
|
+
val.year,
|
208
|
+
val.month,
|
209
|
+
val.day,
|
210
|
+
val.hour,
|
211
|
+
val.minute,
|
212
|
+
val.second,
|
213
|
+
val.microsecond,
|
214
|
+
tzinfo=datetime.timezone.utc,
|
215
|
+
)
|
216
|
+
return int(val.timestamp() * 1000)
|
217
|
+
elif isinstance(val, datetime.date):
|
218
|
+
return int(
|
219
|
+
datetime.datetime(
|
220
|
+
val.year, val.month, val.day, tzinfo=datetime.timezone.utc
|
221
|
+
).timestamp()
|
222
|
+
* 1000
|
223
|
+
)
|
224
|
+
elif isinstance(val, (list, tuple)):
|
225
|
+
return [_json_helper(i, artifact) for i in val]
|
226
|
+
elif isinstance(val, Decimal):
|
227
|
+
return float(val)
|
228
|
+
else:
|
229
|
+
return util.json_friendly(val)[0]
|