wandb 0.16.6__py3-none-any.whl → 0.17.0__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (193) hide show
  1. package_readme.md +95 -0
  2. wandb/__init__.py +2 -3
  3. wandb/agents/pyagent.py +0 -1
  4. wandb/analytics/sentry.py +2 -1
  5. wandb/apis/importers/internals/internal.py +0 -1
  6. wandb/apis/importers/internals/protocols.py +30 -56
  7. wandb/apis/importers/mlflow.py +13 -26
  8. wandb/apis/importers/wandb.py +8 -14
  9. wandb/apis/internal.py +0 -3
  10. wandb/apis/public/api.py +55 -3
  11. wandb/apis/public/artifacts.py +1 -0
  12. wandb/apis/public/files.py +1 -0
  13. wandb/apis/public/history.py +1 -0
  14. wandb/apis/public/jobs.py +17 -4
  15. wandb/apis/public/projects.py +1 -0
  16. wandb/apis/public/reports.py +1 -0
  17. wandb/apis/public/runs.py +15 -17
  18. wandb/apis/public/sweeps.py +1 -0
  19. wandb/apis/public/teams.py +1 -0
  20. wandb/apis/public/users.py +1 -0
  21. wandb/apis/reports/v1/_blocks.py +3 -7
  22. wandb/apis/reports/v2/gql.py +1 -0
  23. wandb/apis/reports/v2/interface.py +3 -4
  24. wandb/apis/reports/v2/internal.py +5 -8
  25. wandb/cli/cli.py +92 -22
  26. wandb/data_types.py +9 -6
  27. wandb/docker/__init__.py +1 -1
  28. wandb/env.py +38 -8
  29. wandb/errors/__init__.py +5 -0
  30. wandb/errors/term.py +10 -2
  31. wandb/filesync/step_checksum.py +1 -4
  32. wandb/filesync/step_prepare.py +4 -24
  33. wandb/filesync/step_upload.py +4 -106
  34. wandb/filesync/upload_job.py +0 -76
  35. wandb/integration/catboost/catboost.py +1 -1
  36. wandb/integration/fastai/__init__.py +1 -0
  37. wandb/integration/huggingface/resolver.py +2 -2
  38. wandb/integration/keras/__init__.py +1 -0
  39. wandb/integration/keras/callbacks/metrics_logger.py +1 -1
  40. wandb/integration/keras/keras.py +7 -7
  41. wandb/integration/langchain/wandb_tracer.py +1 -0
  42. wandb/integration/lightning/fabric/logger.py +1 -3
  43. wandb/integration/metaflow/metaflow.py +41 -6
  44. wandb/integration/openai/fine_tuning.py +3 -3
  45. wandb/integration/prodigy/prodigy.py +1 -1
  46. wandb/old/summary.py +1 -1
  47. wandb/plot/confusion_matrix.py +1 -1
  48. wandb/plot/pr_curve.py +2 -1
  49. wandb/plot/roc_curve.py +2 -1
  50. wandb/{plots → plot}/utils.py +13 -25
  51. wandb/proto/v3/wandb_internal_pb2.py +364 -332
  52. wandb/proto/v3/wandb_settings_pb2.py +2 -2
  53. wandb/proto/v3/wandb_telemetry_pb2.py +10 -10
  54. wandb/proto/v4/wandb_internal_pb2.py +322 -316
  55. wandb/proto/v4/wandb_settings_pb2.py +2 -2
  56. wandb/proto/v4/wandb_telemetry_pb2.py +10 -10
  57. wandb/proto/wandb_deprecated.py +7 -1
  58. wandb/proto/wandb_internal_codegen.py +3 -29
  59. wandb/sdk/artifacts/artifact.py +26 -11
  60. wandb/sdk/artifacts/artifact_download_logger.py +1 -0
  61. wandb/sdk/artifacts/artifact_file_cache.py +18 -4
  62. wandb/sdk/artifacts/artifact_instance_cache.py +1 -0
  63. wandb/sdk/artifacts/artifact_manifest.py +1 -0
  64. wandb/sdk/artifacts/artifact_manifest_entry.py +7 -3
  65. wandb/sdk/artifacts/artifact_manifests/artifact_manifest_v1.py +1 -0
  66. wandb/sdk/artifacts/artifact_saver.py +2 -8
  67. wandb/sdk/artifacts/artifact_state.py +1 -0
  68. wandb/sdk/artifacts/artifact_ttl.py +1 -0
  69. wandb/sdk/artifacts/exceptions.py +1 -0
  70. wandb/sdk/artifacts/storage_handlers/azure_handler.py +1 -0
  71. wandb/sdk/artifacts/storage_handlers/gcs_handler.py +13 -18
  72. wandb/sdk/artifacts/storage_handlers/http_handler.py +1 -0
  73. wandb/sdk/artifacts/storage_handlers/local_file_handler.py +1 -0
  74. wandb/sdk/artifacts/storage_handlers/multi_handler.py +1 -0
  75. wandb/sdk/artifacts/storage_handlers/s3_handler.py +5 -3
  76. wandb/sdk/artifacts/storage_handlers/tracking_handler.py +1 -0
  77. wandb/sdk/artifacts/storage_handlers/wb_artifact_handler.py +1 -0
  78. wandb/sdk/artifacts/storage_handlers/wb_local_artifact_handler.py +1 -0
  79. wandb/sdk/artifacts/storage_policies/wandb_storage_policy.py +3 -42
  80. wandb/sdk/artifacts/storage_policy.py +2 -12
  81. wandb/sdk/data_types/_dtypes.py +8 -8
  82. wandb/sdk/data_types/base_types/media.py +3 -6
  83. wandb/sdk/data_types/helper_types/bounding_boxes_2d.py +3 -1
  84. wandb/sdk/data_types/image.py +1 -1
  85. wandb/sdk/data_types/video.py +1 -1
  86. wandb/sdk/integration_utils/auto_logging.py +5 -6
  87. wandb/sdk/integration_utils/data_logging.py +10 -6
  88. wandb/sdk/interface/interface.py +68 -32
  89. wandb/sdk/interface/interface_shared.py +7 -13
  90. wandb/sdk/internal/datastore.py +1 -1
  91. wandb/sdk/internal/file_pusher.py +2 -5
  92. wandb/sdk/internal/file_stream.py +5 -18
  93. wandb/sdk/internal/handler.py +18 -2
  94. wandb/sdk/internal/internal.py +0 -1
  95. wandb/sdk/internal/internal_api.py +1 -129
  96. wandb/sdk/internal/internal_util.py +0 -1
  97. wandb/sdk/internal/job_builder.py +159 -45
  98. wandb/sdk/internal/profiler.py +1 -0
  99. wandb/sdk/internal/progress.py +0 -28
  100. wandb/sdk/internal/run.py +1 -0
  101. wandb/sdk/internal/sender.py +1 -2
  102. wandb/sdk/internal/system/assets/gpu_amd.py +44 -44
  103. wandb/sdk/internal/system/assets/gpu_apple.py +56 -11
  104. wandb/sdk/internal/system/assets/interfaces.py +6 -8
  105. wandb/sdk/internal/system/assets/open_metrics.py +2 -2
  106. wandb/sdk/internal/system/assets/trainium.py +1 -3
  107. wandb/sdk/launch/__init__.py +9 -1
  108. wandb/sdk/launch/_launch.py +4 -24
  109. wandb/sdk/launch/_launch_add.py +1 -3
  110. wandb/sdk/launch/_project_spec.py +186 -224
  111. wandb/sdk/launch/agent/agent.py +37 -13
  112. wandb/sdk/launch/agent/config.py +72 -14
  113. wandb/sdk/launch/builder/abstract.py +69 -1
  114. wandb/sdk/launch/builder/build.py +156 -555
  115. wandb/sdk/launch/builder/context_manager.py +235 -0
  116. wandb/sdk/launch/builder/docker_builder.py +8 -23
  117. wandb/sdk/launch/builder/kaniko_builder.py +12 -25
  118. wandb/sdk/launch/builder/noop.py +1 -0
  119. wandb/sdk/launch/builder/templates/dockerfile.py +92 -0
  120. wandb/sdk/launch/create_job.py +47 -37
  121. wandb/sdk/launch/environment/abstract.py +1 -0
  122. wandb/sdk/launch/environment/gcp_environment.py +1 -0
  123. wandb/sdk/launch/environment/local_environment.py +1 -0
  124. wandb/sdk/launch/inputs/files.py +148 -0
  125. wandb/sdk/launch/inputs/internal.py +217 -0
  126. wandb/sdk/launch/inputs/manage.py +95 -0
  127. wandb/sdk/launch/loader.py +1 -0
  128. wandb/sdk/launch/registry/abstract.py +1 -0
  129. wandb/sdk/launch/registry/azure_container_registry.py +1 -0
  130. wandb/sdk/launch/registry/elastic_container_registry.py +1 -0
  131. wandb/sdk/launch/registry/google_artifact_registry.py +2 -1
  132. wandb/sdk/launch/registry/local_registry.py +1 -0
  133. wandb/sdk/launch/runner/abstract.py +1 -0
  134. wandb/sdk/launch/runner/kubernetes_monitor.py +1 -0
  135. wandb/sdk/launch/runner/kubernetes_runner.py +9 -10
  136. wandb/sdk/launch/runner/local_container.py +2 -3
  137. wandb/sdk/launch/runner/local_process.py +8 -29
  138. wandb/sdk/launch/runner/sagemaker_runner.py +21 -20
  139. wandb/sdk/launch/runner/vertex_runner.py +8 -7
  140. wandb/sdk/launch/sweeps/scheduler.py +4 -3
  141. wandb/sdk/launch/sweeps/scheduler_sweep.py +2 -1
  142. wandb/sdk/launch/sweeps/utils.py +3 -3
  143. wandb/sdk/launch/utils.py +15 -140
  144. wandb/sdk/lib/_settings_toposort_generated.py +0 -5
  145. wandb/sdk/lib/fsm.py +8 -12
  146. wandb/sdk/lib/gitlib.py +4 -4
  147. wandb/sdk/lib/import_hooks.py +1 -1
  148. wandb/sdk/lib/lazyloader.py +0 -1
  149. wandb/sdk/lib/proto_util.py +23 -2
  150. wandb/sdk/lib/redirect.py +19 -14
  151. wandb/sdk/lib/retry.py +3 -2
  152. wandb/sdk/lib/tracelog.py +1 -1
  153. wandb/sdk/service/service.py +19 -16
  154. wandb/sdk/verify/verify.py +2 -1
  155. wandb/sdk/wandb_init.py +14 -55
  156. wandb/sdk/wandb_manager.py +2 -2
  157. wandb/sdk/wandb_require.py +5 -0
  158. wandb/sdk/wandb_run.py +114 -56
  159. wandb/sdk/wandb_settings.py +0 -48
  160. wandb/sdk/wandb_setup.py +1 -1
  161. wandb/sklearn/__init__.py +1 -0
  162. wandb/sklearn/plot/__init__.py +1 -0
  163. wandb/sklearn/plot/classifier.py +11 -12
  164. wandb/sklearn/plot/clusterer.py +2 -1
  165. wandb/sklearn/plot/regressor.py +1 -0
  166. wandb/sklearn/plot/shared.py +1 -0
  167. wandb/sklearn/utils.py +1 -0
  168. wandb/testing/relay.py +4 -4
  169. wandb/trigger.py +1 -0
  170. wandb/util.py +67 -54
  171. wandb/wandb_controller.py +2 -3
  172. wandb/wandb_torch.py +1 -2
  173. {wandb-0.16.6.dist-info → wandb-0.17.0.dist-info}/METADATA +67 -70
  174. {wandb-0.16.6.dist-info → wandb-0.17.0.dist-info}/RECORD +177 -187
  175. {wandb-0.16.6.dist-info → wandb-0.17.0.dist-info}/WHEEL +1 -2
  176. wandb/bin/apple_gpu_stats +0 -0
  177. wandb/catboost/__init__.py +0 -9
  178. wandb/fastai/__init__.py +0 -9
  179. wandb/keras/__init__.py +0 -18
  180. wandb/lightgbm/__init__.py +0 -9
  181. wandb/plots/__init__.py +0 -6
  182. wandb/plots/explain_text.py +0 -36
  183. wandb/plots/heatmap.py +0 -81
  184. wandb/plots/named_entity.py +0 -43
  185. wandb/plots/part_of_speech.py +0 -50
  186. wandb/plots/plot_definitions.py +0 -768
  187. wandb/plots/precision_recall.py +0 -121
  188. wandb/plots/roc.py +0 -103
  189. wandb/sacred/__init__.py +0 -3
  190. wandb/xgboost/__init__.py +0 -9
  191. wandb-0.16.6.dist-info/top_level.txt +0 -1
  192. {wandb-0.16.6.dist-info → wandb-0.17.0.dist-info}/entry_points.txt +0 -0
  193. {wandb-0.16.6.dist-info → wandb-0.17.0.dist-info/licenses}/LICENSE +0 -0
@@ -37,6 +37,12 @@ class _Stats(TypedDict):
37
37
  # cpuWaitMs: float
38
38
 
39
39
 
40
+ def get_apple_gpu_path() -> pathlib.Path:
41
+ return (
42
+ pathlib.Path(sys.modules["wandb"].__path__[0]) / "bin" / "apple_gpu_stats"
43
+ ).resolve()
44
+
45
+
40
46
  class GPUAppleStats:
41
47
  """Apple GPU stats available on Arm Macs."""
42
48
 
@@ -49,9 +55,7 @@ class GPUAppleStats:
49
55
 
50
56
  def __init__(self) -> None:
51
57
  self.samples = deque()
52
- self.binary_path = (
53
- pathlib.Path(sys.modules["wandb"].__path__[0]) / "bin" / "apple_gpu_stats"
54
- ).resolve()
58
+ self.binary_path = get_apple_gpu_path()
55
59
 
56
60
  def sample(self) -> None:
57
61
  try:
@@ -63,22 +67,47 @@ class GPUAppleStats:
63
67
  )[0]
64
68
  raw_stats = json.loads(output)
65
69
 
70
+ temp_keys = [
71
+ "m1Gpu1",
72
+ "m1Gpu2",
73
+ "m1Gpu3",
74
+ "m1Gpu4",
75
+ "m2Gpu1",
76
+ "m2Gpu2",
77
+ "m3Gpu1",
78
+ "m3Gpu2",
79
+ "m3Gpu3",
80
+ "m3Gpu4",
81
+ "m3Gpu5",
82
+ "m3Gpu6",
83
+ "m3Gpu7",
84
+ "m3Gpu8",
85
+ ]
86
+ temp, count = 0, 0
87
+ for k in temp_keys:
88
+ if raw_stats.get(k, 0) > 0:
89
+ temp += raw_stats[k]
90
+ count += 1
91
+
66
92
  stats: _Stats = {
67
93
  "gpu": raw_stats["utilization"],
68
- "memoryAllocated": raw_stats["mem_used"],
69
- "temp": raw_stats["temperature"],
70
- "powerWatts": raw_stats["power"],
71
- "powerPercent": (raw_stats["power"] / self.MAX_POWER_WATTS) * 100,
94
+ "memoryAllocated": (
95
+ raw_stats["inUseSystemMemory"]
96
+ / raw_stats["allocatedSystemMemory"]
97
+ * 100
98
+ ),
99
+ "powerWatts": raw_stats["systemPower"],
100
+ "powerPercent": (raw_stats["systemPower"] / self.MAX_POWER_WATTS) * 100,
101
+ "temp": temp / count if count > 0 else 0,
72
102
  # TODO: this stat could be useful eventually, it was consistently
73
103
  # 0 in my experimentation and requires a frontend change
74
104
  # so leaving it out for now.
75
105
  # "cpuWaitMs": raw_stats["cpu_wait_ms"],
76
106
  }
77
-
78
107
  self.samples.append(stats)
79
108
 
80
109
  except (OSError, ValueError, TypeError, subprocess.CalledProcessError) as e:
81
- logger.exception(f"GPU stats error: {e}")
110
+ logger.exception("GPU stats error: %s", e)
82
111
 
83
112
  def clear(self) -> None:
84
113
  self.samples.clear()
@@ -116,6 +145,7 @@ class GPUApple:
116
145
  telemetry_record = telemetry.TelemetryRecord()
117
146
  telemetry_record.env.m1_gpu = True
118
147
  interface._publish_telemetry(telemetry_record)
148
+ self.binary_path = get_apple_gpu_path()
119
149
 
120
150
  @classmethod
121
151
  def is_available(cls) -> bool:
@@ -128,5 +158,20 @@ class GPUApple:
128
158
  self.metrics_monitor.finish()
129
159
 
130
160
  def probe(self) -> dict:
131
- # todo: make this actually meaningful
132
- return {self.name: {"type": "arm", "vendor": "Apple"}}
161
+ try:
162
+ command = [str(self.binary_path), "--json"]
163
+ output = (
164
+ subprocess.check_output(command, universal_newlines=True)
165
+ .strip()
166
+ .split("\n")
167
+ )[0]
168
+ raw_stats = json.loads(output)
169
+ return {
170
+ self.name: {
171
+ "type": raw_stats["name"],
172
+ "vendor": raw_stats["vendor"],
173
+ }
174
+ }
175
+ except (OSError, ValueError, TypeError, subprocess.CalledProcessError) as e:
176
+ logger.exception("GPU stats error: %s", e)
177
+ return {self.name: {"type": "arm", "vendor": "Apple"}}
@@ -68,8 +68,7 @@ class Asset(Protocol):
68
68
  metrics: List[Metric]
69
69
  metrics_monitor: "MetricsMonitor"
70
70
 
71
- def __init__(self, *args: Any, **kwargs: Any) -> None:
72
- ... # pragma: no cover
71
+ def __init__(self, *args: Any, **kwargs: Any) -> None: ... # pragma: no cover
73
72
 
74
73
  @classmethod
75
74
  def is_available(cls) -> bool:
@@ -90,14 +89,13 @@ class Asset(Protocol):
90
89
 
91
90
 
92
91
  class Interface(Protocol):
93
- def publish_stats(self, stats: dict) -> None:
94
- ... # pragma: no cover
92
+ def publish_stats(self, stats: dict) -> None: ... # pragma: no cover
95
93
 
96
- def _publish_telemetry(self, telemetry: "TelemetryRecord") -> None:
97
- ... # pragma: no cover
94
+ def _publish_telemetry(
95
+ self, telemetry: "TelemetryRecord"
96
+ ) -> None: ... # pragma: no cover
98
97
 
99
- def publish_files(self, files_dict: "FilesDict") -> None:
100
- ... # pragma: no cover
98
+ def publish_files(self, files_dict: "FilesDict") -> None: ... # pragma: no cover
101
99
 
102
100
 
103
101
  class MetricsMonitor:
@@ -65,13 +65,13 @@ def _setup_requests_session() -> requests.Session:
65
65
 
66
66
 
67
67
  def _nested_dict_to_tuple(
68
- nested_dict: Mapping[str, Mapping[str, str]]
68
+ nested_dict: Mapping[str, Mapping[str, str]],
69
69
  ) -> Tuple[Tuple[str, Tuple[str, str]], ...]:
70
70
  return tuple((k, *v.items()) for k, v in nested_dict.items()) # type: ignore
71
71
 
72
72
 
73
73
  def _tuple_to_nested_dict(
74
- nested_tuple: Tuple[Tuple[str, Tuple[str, str]], ...]
74
+ nested_tuple: Tuple[Tuple[str, Tuple[str, str]], ...],
75
75
  ) -> Dict[str, Dict[str, str]]:
76
76
  return {k: dict(v) for k, *v in nested_tuple}
77
77
 
@@ -197,9 +197,7 @@ class NeuronCoreStats:
197
197
  entry["report"]
198
198
  for entry in raw_stats["neuron_runtime_data"]
199
199
  if self._is_matching_entry(entry)
200
- ][
201
- 0
202
- ] # there should be only one entry with the pid
200
+ ][0] # there should be only one entry with the pid
203
201
 
204
202
  neuroncores_in_use = neuron_runtime_data["neuroncore_counters"][
205
203
  "neuroncores_in_use"
@@ -1,6 +1,14 @@
1
1
  from ._launch import launch
2
2
  from ._launch_add import launch_add
3
3
  from .agent.agent import LaunchAgent
4
+ from .inputs.manage import manage_config_file, manage_wandb_config
4
5
  from .utils import load_wandb_config
5
6
 
6
- __all__ = ["LaunchAgent", "launch", "launch_add", "load_wandb_config"]
7
+ __all__ = [
8
+ "LaunchAgent",
9
+ "launch",
10
+ "launch_add",
11
+ "load_wandb_config",
12
+ "manage_config_file",
13
+ "manage_wandb_config",
14
+ ]
@@ -12,13 +12,12 @@ from wandb.apis.internal import Api
12
12
  from . import loader
13
13
  from ._project_spec import LaunchProject
14
14
  from .agent import LaunchAgent
15
- from .builder.build import construct_agent_configs
15
+ from .agent.agent import construct_agent_configs
16
16
  from .environment.local_environment import LocalEnvironment
17
17
  from .errors import ExecutionError, LaunchError
18
18
  from .runner.abstract import AbstractRun
19
19
  from .utils import (
20
20
  LAUNCH_CONFIG_FILE,
21
- LAUNCH_DEFAULT_PROJECT,
22
21
  PROJECT_SYNCHRONOUS,
23
22
  construct_launch_spec,
24
23
  validate_launch_spec_source,
@@ -58,7 +57,6 @@ def set_launch_logfile(logfile: str) -> None:
58
57
 
59
58
  def resolve_agent_config( # noqa: C901
60
59
  entity: Optional[str],
61
- project: Optional[str],
62
60
  max_jobs: Optional[int],
63
61
  queues: Optional[Tuple[str]],
64
62
  config: Optional[str],
@@ -69,7 +67,6 @@ def resolve_agent_config( # noqa: C901
69
67
  Arguments:
70
68
  api (Api): The api.
71
69
  entity (str): The entity.
72
- project (str): The project.
73
70
  max_jobs (int): The max number of jobs.
74
71
  queues (Tuple[str]): The queues.
75
72
  config (str): The config.
@@ -79,7 +76,6 @@ def resolve_agent_config( # noqa: C901
79
76
  Tuple[Dict[str, Any], Api]: The resolved config and api.
80
77
  """
81
78
  defaults = {
82
- "project": LAUNCH_DEFAULT_PROJECT,
83
79
  "max_jobs": 1,
84
80
  "max_schedulers": 1,
85
81
  "queues": [],
@@ -87,7 +83,6 @@ def resolve_agent_config( # noqa: C901
87
83
  "builder": {},
88
84
  "verbosity": 0,
89
85
  }
90
- user_set_project = False
91
86
  resolved_config: Dict[str, Any] = defaults
92
87
  config_path = config or os.path.expanduser(LAUNCH_CONFIG_FILE)
93
88
  if os.path.isfile(config_path):
@@ -100,16 +95,11 @@ def resolve_agent_config( # noqa: C901
100
95
  launch_config = {} # type: ignore
101
96
  except yaml.YAMLError as e:
102
97
  raise LaunchError(f"Invalid launch agent config: {e}")
103
- if launch_config.get("project") is not None:
104
- user_set_project = True
105
98
  resolved_config.update(launch_config.items())
106
99
  elif config is not None:
107
100
  raise LaunchError(
108
101
  f"Could not find use specified launch config file: {config_path}"
109
102
  )
110
- if os.environ.get("WANDB_PROJECT") is not None:
111
- resolved_config.update({"project": os.environ.get("WANDB_PROJECT")})
112
- user_set_project = True
113
103
  if os.environ.get("WANDB_ENTITY") is not None:
114
104
  resolved_config.update({"entity": os.environ.get("WANDB_ENTITY")})
115
105
  if os.environ.get("WANDB_LAUNCH_MAX_JOBS") is not None:
@@ -117,9 +107,6 @@ def resolve_agent_config( # noqa: C901
117
107
  {"max_jobs": int(os.environ.get("WANDB_LAUNCH_MAX_JOBS", 1))}
118
108
  )
119
109
 
120
- if project is not None:
121
- resolved_config.update({"project": project})
122
- user_set_project = True
123
110
  if entity is not None:
124
111
  resolved_config.update({"entity": entity})
125
112
  if max_jobs is not None:
@@ -138,7 +125,7 @@ def resolve_agent_config( # noqa: C901
138
125
  + " (expected str). Specify multiple queues with the 'queues' key"
139
126
  )
140
127
 
141
- keys = ["project", "entity"]
128
+ keys = ["entity"]
142
129
  settings = {
143
130
  k: resolved_config.get(k) for k in keys if resolved_config.get(k) is not None
144
131
  }
@@ -147,10 +134,6 @@ def resolve_agent_config( # noqa: C901
147
134
 
148
135
  if resolved_config.get("entity") is None:
149
136
  resolved_config.update({"entity": api.default_entity})
150
- if user_set_project:
151
- wandb.termwarn(
152
- "Specifying a project for the launch agent is deprecated. Please use queues found in the Launch application at https://wandb.ai/launch."
153
- )
154
137
 
155
138
  return resolved_config, api
156
139
 
@@ -188,7 +171,6 @@ def create_and_run_agent(
188
171
 
189
172
  async def _launch(
190
173
  api: Api,
191
- uri: Optional[str] = None,
192
174
  job: Optional[str] = None,
193
175
  name: Optional[str] = None,
194
176
  project: Optional[str] = None,
@@ -209,7 +191,7 @@ async def _launch(
209
191
  if resource is None:
210
192
  resource = "local-container"
211
193
  launch_spec = construct_launch_spec(
212
- uri,
194
+ None,
213
195
  job,
214
196
  api,
215
197
  name,
@@ -228,7 +210,7 @@ async def _launch(
228
210
  validate_launch_spec_source(launch_spec)
229
211
  launch_project = LaunchProject.from_spec(launch_spec, api)
230
212
  launch_project.fetch_and_validate_project()
231
- entrypoint = launch_project.get_single_entry_point()
213
+ entrypoint = launch_project.get_job_entry_point()
232
214
  image_uri = launch_project.docker_image # Either set by user or None.
233
215
 
234
216
  # construct runner config.
@@ -326,8 +308,6 @@ def launch(
326
308
  """
327
309
  submitted_run_obj = asyncio.run(
328
310
  _launch(
329
- # TODO: fully deprecate URI path
330
- uri=None,
331
311
  job=job,
332
312
  name=name,
333
313
  project=project,
@@ -109,7 +109,6 @@ def launch_add(
109
109
 
110
110
  return _launch_add(
111
111
  api,
112
- uri,
113
112
  job,
114
113
  config,
115
114
  template_variables,
@@ -134,7 +133,6 @@ def launch_add(
134
133
 
135
134
  def _launch_add(
136
135
  api: Api,
137
- uri: Optional[str],
138
136
  job: Optional[str],
139
137
  config: Optional[Dict[str, Any]],
140
138
  template_variables: Optional[dict],
@@ -156,7 +154,7 @@ def _launch_add(
156
154
  priority: Optional[int] = None,
157
155
  ) -> "public.QueuedRun":
158
156
  launch_spec = construct_launch_spec(
159
- uri,
157
+ None,
160
158
  job,
161
159
  api,
162
160
  name,