wandb 0.22.0__py3-none-win_amd64.whl → 0.22.2__py3-none-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. wandb/__init__.py +1 -1
  2. wandb/__init__.pyi +8 -5
  3. wandb/_pydantic/__init__.py +12 -11
  4. wandb/_pydantic/base.py +49 -19
  5. wandb/apis/__init__.py +2 -0
  6. wandb/apis/attrs.py +2 -0
  7. wandb/apis/importers/internals/internal.py +16 -23
  8. wandb/apis/internal.py +2 -0
  9. wandb/apis/normalize.py +2 -0
  10. wandb/apis/public/__init__.py +3 -2
  11. wandb/apis/public/api.py +215 -164
  12. wandb/apis/public/artifacts.py +23 -20
  13. wandb/apis/public/const.py +2 -0
  14. wandb/apis/public/files.py +33 -24
  15. wandb/apis/public/history.py +2 -0
  16. wandb/apis/public/jobs.py +20 -18
  17. wandb/apis/public/projects.py +4 -2
  18. wandb/apis/public/query_generator.py +3 -0
  19. wandb/apis/public/registries/__init__.py +7 -0
  20. wandb/apis/public/registries/_freezable_list.py +9 -12
  21. wandb/apis/public/registries/registries_search.py +8 -6
  22. wandb/apis/public/registries/registry.py +22 -17
  23. wandb/apis/public/reports.py +2 -0
  24. wandb/apis/public/runs.py +261 -57
  25. wandb/apis/public/sweeps.py +10 -9
  26. wandb/apis/public/teams.py +2 -0
  27. wandb/apis/public/users.py +2 -0
  28. wandb/apis/public/utils.py +16 -15
  29. wandb/automations/_generated/__init__.py +54 -127
  30. wandb/automations/_generated/create_generic_webhook_integration.py +1 -7
  31. wandb/automations/_generated/fragments.py +26 -91
  32. wandb/bin/gpu_stats.exe +0 -0
  33. wandb/bin/wandb-core +0 -0
  34. wandb/cli/beta.py +16 -2
  35. wandb/cli/beta_leet.py +74 -0
  36. wandb/cli/beta_sync.py +9 -11
  37. wandb/cli/cli.py +34 -7
  38. wandb/errors/errors.py +3 -3
  39. wandb/proto/v3/wandb_api_pb2.py +86 -0
  40. wandb/proto/v3/wandb_internal_pb2.py +352 -351
  41. wandb/proto/v3/wandb_settings_pb2.py +2 -2
  42. wandb/proto/v3/wandb_sync_pb2.py +19 -6
  43. wandb/proto/v4/wandb_api_pb2.py +37 -0
  44. wandb/proto/v4/wandb_internal_pb2.py +352 -351
  45. wandb/proto/v4/wandb_settings_pb2.py +2 -2
  46. wandb/proto/v4/wandb_sync_pb2.py +10 -6
  47. wandb/proto/v5/wandb_api_pb2.py +38 -0
  48. wandb/proto/v5/wandb_internal_pb2.py +352 -351
  49. wandb/proto/v5/wandb_settings_pb2.py +2 -2
  50. wandb/proto/v5/wandb_sync_pb2.py +10 -6
  51. wandb/proto/v6/wandb_api_pb2.py +48 -0
  52. wandb/proto/v6/wandb_internal_pb2.py +352 -351
  53. wandb/proto/v6/wandb_settings_pb2.py +2 -2
  54. wandb/proto/v6/wandb_sync_pb2.py +10 -6
  55. wandb/proto/wandb_api_pb2.py +18 -0
  56. wandb/proto/wandb_generate_proto.py +1 -0
  57. wandb/sdk/artifacts/_factories.py +7 -2
  58. wandb/sdk/artifacts/_generated/__init__.py +112 -412
  59. wandb/sdk/artifacts/_generated/fragments.py +65 -0
  60. wandb/sdk/artifacts/_generated/operations.py +52 -22
  61. wandb/sdk/artifacts/_generated/run_input_artifacts.py +3 -23
  62. wandb/sdk/artifacts/_generated/run_output_artifacts.py +3 -23
  63. wandb/sdk/artifacts/_generated/type_info.py +19 -0
  64. wandb/sdk/artifacts/_gqlutils.py +47 -0
  65. wandb/sdk/artifacts/_models/__init__.py +4 -0
  66. wandb/sdk/artifacts/_models/base_model.py +20 -0
  67. wandb/sdk/artifacts/_validators.py +40 -12
  68. wandb/sdk/artifacts/artifact.py +99 -118
  69. wandb/sdk/artifacts/artifact_file_cache.py +6 -1
  70. wandb/sdk/artifacts/artifact_manifest_entry.py +67 -14
  71. wandb/sdk/artifacts/storage_handler.py +18 -12
  72. wandb/sdk/artifacts/storage_handlers/azure_handler.py +11 -6
  73. wandb/sdk/artifacts/storage_handlers/gcs_handler.py +9 -6
  74. wandb/sdk/artifacts/storage_handlers/http_handler.py +9 -4
  75. wandb/sdk/artifacts/storage_handlers/local_file_handler.py +10 -6
  76. wandb/sdk/artifacts/storage_handlers/multi_handler.py +5 -4
  77. wandb/sdk/artifacts/storage_handlers/s3_handler.py +10 -8
  78. wandb/sdk/artifacts/storage_handlers/tracking_handler.py +6 -4
  79. wandb/sdk/artifacts/storage_handlers/wb_artifact_handler.py +24 -21
  80. wandb/sdk/artifacts/storage_handlers/wb_local_artifact_handler.py +4 -2
  81. wandb/sdk/artifacts/storage_policies/_multipart.py +187 -0
  82. wandb/sdk/artifacts/storage_policies/wandb_storage_policy.py +71 -242
  83. wandb/sdk/artifacts/storage_policy.py +25 -12
  84. wandb/sdk/data_types/bokeh.py +5 -1
  85. wandb/sdk/data_types/image.py +17 -6
  86. wandb/sdk/data_types/object_3d.py +67 -2
  87. wandb/sdk/interface/interface.py +31 -4
  88. wandb/sdk/interface/interface_queue.py +10 -0
  89. wandb/sdk/interface/interface_shared.py +0 -7
  90. wandb/sdk/interface/interface_sock.py +9 -3
  91. wandb/sdk/internal/_generated/__init__.py +2 -12
  92. wandb/sdk/internal/job_builder.py +27 -10
  93. wandb/sdk/internal/sender.py +5 -2
  94. wandb/sdk/internal/settings_static.py +2 -82
  95. wandb/sdk/launch/create_job.py +2 -1
  96. wandb/sdk/launch/runner/kubernetes_runner.py +25 -20
  97. wandb/sdk/launch/utils.py +82 -1
  98. wandb/sdk/lib/progress.py +8 -74
  99. wandb/sdk/lib/service/service_client.py +5 -9
  100. wandb/sdk/lib/service/service_connection.py +39 -23
  101. wandb/sdk/mailbox/mailbox_handle.py +2 -0
  102. wandb/sdk/projects/_generated/__init__.py +12 -33
  103. wandb/sdk/wandb_init.py +23 -3
  104. wandb/sdk/wandb_login.py +53 -27
  105. wandb/sdk/wandb_run.py +10 -5
  106. wandb/sdk/wandb_settings.py +63 -25
  107. wandb/sync/sync.py +7 -2
  108. wandb/util.py +1 -1
  109. {wandb-0.22.0.dist-info → wandb-0.22.2.dist-info}/METADATA +1 -1
  110. {wandb-0.22.0.dist-info → wandb-0.22.2.dist-info}/RECORD +113 -103
  111. wandb/sdk/artifacts/_graphql_fragments.py +0 -19
  112. {wandb-0.22.0.dist-info → wandb-0.22.2.dist-info}/WHEEL +0 -0
  113. {wandb-0.22.0.dist-info → wandb-0.22.2.dist-info}/entry_points.txt +0 -0
  114. {wandb-0.22.0.dist-info → wandb-0.22.2.dist-info}/licenses/LICENSE +0 -0
@@ -1,99 +1,5 @@
1
1
  # Generated by ariadne-codegen
2
2
 
3
- from .create_automation import CreateAutomation
4
- from .create_generic_webhook_integration import (
5
- CreateGenericWebhookIntegration,
6
- CreateGenericWebhookIntegrationCreateGenericWebhookIntegration,
7
- CreateGenericWebhookIntegrationCreateGenericWebhookIntegrationIntegrationGenericWebhookIntegration,
8
- CreateGenericWebhookIntegrationCreateGenericWebhookIntegrationIntegrationIntegration,
9
- )
10
- from .delete_automation import DeleteAutomation
11
- from .enums import (
12
- AlertSeverity,
13
- EventTriggeringConditionType,
14
- TriggeredActionType,
15
- TriggerScopeType,
16
- )
17
- from .fragments import (
18
- ArtifactPortfolioScopeFields,
19
- ArtifactSequenceScopeFields,
20
- FilterEventFields,
21
- GenericWebhookActionFields,
22
- GenericWebhookActionFieldsIntegrationGenericWebhookIntegration,
23
- GenericWebhookActionFieldsIntegrationIntegration,
24
- GenericWebhookIntegrationConnectionFields,
25
- GenericWebhookIntegrationConnectionFieldsEdges,
26
- GenericWebhookIntegrationConnectionFieldsEdgesNodeGenericWebhookIntegration,
27
- GenericWebhookIntegrationConnectionFieldsEdgesNodeIntegration,
28
- GenericWebhookIntegrationFields,
29
- IntegrationConnectionFields,
30
- IntegrationConnectionFieldsEdges,
31
- IntegrationConnectionFieldsEdgesNodeGenericWebhookIntegration,
32
- IntegrationConnectionFieldsEdgesNodeIntegration,
33
- IntegrationConnectionFieldsEdgesNodeSlackIntegration,
34
- NoOpActionFields,
35
- NotificationActionFields,
36
- NotificationActionFieldsIntegrationIntegration,
37
- NotificationActionFieldsIntegrationSlackIntegration,
38
- PageInfoFields,
39
- ProjectConnectionFields,
40
- ProjectConnectionFieldsEdges,
41
- ProjectConnectionFieldsEdgesNode,
42
- ProjectScopeFields,
43
- QueueJobActionFields,
44
- QueueJobActionFieldsQueue,
45
- SlackIntegrationConnectionFields,
46
- SlackIntegrationConnectionFieldsEdges,
47
- SlackIntegrationConnectionFieldsEdgesNodeIntegration,
48
- SlackIntegrationConnectionFieldsEdgesNodeSlackIntegration,
49
- SlackIntegrationFields,
50
- TriggerFields,
51
- TriggerFieldsActionGenericWebhookTriggeredAction,
52
- TriggerFieldsActionNoOpTriggeredAction,
53
- TriggerFieldsActionNotificationTriggeredAction,
54
- TriggerFieldsActionQueueJobTriggeredAction,
55
- TriggerFieldsEventFilterEventTriggeringCondition,
56
- TriggerFieldsScopeArtifactPortfolio,
57
- TriggerFieldsScopeArtifactSequence,
58
- TriggerFieldsScopeProject,
59
- )
60
- from .generic_webhook_integrations_by_entity import (
61
- GenericWebhookIntegrationsByEntity,
62
- GenericWebhookIntegrationsByEntityEntity,
63
- )
64
- from .get_automations import GetAutomations, GetAutomationsSearchScope
65
- from .get_automations_by_entity import (
66
- GetAutomationsByEntity,
67
- GetAutomationsByEntitySearchScope,
68
- )
69
- from .input_types import (
70
- CreateFilterTriggerInput,
71
- CreateGenericWebhookIntegrationInput,
72
- GenericWebhookActionInput,
73
- NoOpTriggeredActionInput,
74
- NotificationActionInput,
75
- QueueJobActionInput,
76
- TriggeredActionConfig,
77
- UpdateFilterTriggerInput,
78
- )
79
- from .integrations_by_entity import IntegrationsByEntity, IntegrationsByEntityEntity
80
- from .operations import (
81
- CREATE_AUTOMATION_GQL,
82
- CREATE_GENERIC_WEBHOOK_INTEGRATION_GQL,
83
- DELETE_AUTOMATION_GQL,
84
- GENERIC_WEBHOOK_INTEGRATIONS_BY_ENTITY_GQL,
85
- GET_AUTOMATIONS_BY_ENTITY_GQL,
86
- GET_AUTOMATIONS_GQL,
87
- INTEGRATIONS_BY_ENTITY_GQL,
88
- SLACK_INTEGRATIONS_BY_ENTITY_GQL,
89
- UPDATE_AUTOMATION_GQL,
90
- )
91
- from .slack_integrations_by_entity import (
92
- SlackIntegrationsByEntity,
93
- SlackIntegrationsByEntityEntity,
94
- )
95
- from .update_automation import UpdateAutomation
96
-
97
3
  __all__ = [
98
4
  "CREATE_AUTOMATION_GQL",
99
5
  "CREATE_GENERIC_WEBHOOK_INTEGRATION_GQL",
@@ -105,22 +11,14 @@ __all__ = [
105
11
  "SLACK_INTEGRATIONS_BY_ENTITY_GQL",
106
12
  "UPDATE_AUTOMATION_GQL",
107
13
  "GetAutomations",
108
- "GetAutomationsSearchScope",
109
14
  "GetAutomationsByEntity",
110
- "GetAutomationsByEntitySearchScope",
111
15
  "CreateAutomation",
112
16
  "UpdateAutomation",
113
17
  "DeleteAutomation",
114
18
  "IntegrationsByEntity",
115
- "IntegrationsByEntityEntity",
116
19
  "SlackIntegrationsByEntity",
117
- "SlackIntegrationsByEntityEntity",
118
20
  "GenericWebhookIntegrationsByEntity",
119
- "GenericWebhookIntegrationsByEntityEntity",
120
21
  "CreateGenericWebhookIntegration",
121
- "CreateGenericWebhookIntegrationCreateGenericWebhookIntegration",
122
- "CreateGenericWebhookIntegrationCreateGenericWebhookIntegrationIntegrationGenericWebhookIntegration",
123
- "CreateGenericWebhookIntegrationCreateGenericWebhookIntegrationIntegrationIntegration",
124
22
  "CreateFilterTriggerInput",
125
23
  "CreateGenericWebhookIntegrationInput",
126
24
  "GenericWebhookActionInput",
@@ -133,45 +31,74 @@ __all__ = [
133
31
  "ArtifactSequenceScopeFields",
134
32
  "FilterEventFields",
135
33
  "GenericWebhookActionFields",
136
- "GenericWebhookActionFieldsIntegrationGenericWebhookIntegration",
137
- "GenericWebhookActionFieldsIntegrationIntegration",
138
34
  "GenericWebhookIntegrationConnectionFields",
139
- "GenericWebhookIntegrationConnectionFieldsEdges",
140
- "GenericWebhookIntegrationConnectionFieldsEdgesNodeGenericWebhookIntegration",
141
- "GenericWebhookIntegrationConnectionFieldsEdgesNodeIntegration",
142
35
  "GenericWebhookIntegrationFields",
143
36
  "IntegrationConnectionFields",
144
- "IntegrationConnectionFieldsEdges",
145
- "IntegrationConnectionFieldsEdgesNodeGenericWebhookIntegration",
146
- "IntegrationConnectionFieldsEdgesNodeIntegration",
147
- "IntegrationConnectionFieldsEdgesNodeSlackIntegration",
148
37
  "NoOpActionFields",
149
38
  "NotificationActionFields",
150
- "NotificationActionFieldsIntegrationIntegration",
151
- "NotificationActionFieldsIntegrationSlackIntegration",
152
39
  "PageInfoFields",
153
40
  "ProjectConnectionFields",
154
- "ProjectConnectionFieldsEdges",
155
- "ProjectConnectionFieldsEdgesNode",
156
41
  "ProjectScopeFields",
157
42
  "QueueJobActionFields",
158
- "QueueJobActionFieldsQueue",
159
43
  "SlackIntegrationConnectionFields",
160
- "SlackIntegrationConnectionFieldsEdges",
161
- "SlackIntegrationConnectionFieldsEdgesNodeIntegration",
162
- "SlackIntegrationConnectionFieldsEdgesNodeSlackIntegration",
163
44
  "SlackIntegrationFields",
164
45
  "TriggerFields",
165
- "TriggerFieldsActionGenericWebhookTriggeredAction",
166
- "TriggerFieldsActionNoOpTriggeredAction",
167
- "TriggerFieldsActionNotificationTriggeredAction",
168
- "TriggerFieldsActionQueueJobTriggeredAction",
169
- "TriggerFieldsEventFilterEventTriggeringCondition",
170
- "TriggerFieldsScopeArtifactPortfolio",
171
- "TriggerFieldsScopeArtifactSequence",
172
- "TriggerFieldsScopeProject",
173
46
  "AlertSeverity",
174
47
  "EventTriggeringConditionType",
175
48
  "TriggerScopeType",
176
49
  "TriggeredActionType",
177
50
  ]
51
+ from .create_automation import CreateAutomation
52
+ from .create_generic_webhook_integration import CreateGenericWebhookIntegration
53
+ from .delete_automation import DeleteAutomation
54
+ from .enums import (
55
+ AlertSeverity,
56
+ EventTriggeringConditionType,
57
+ TriggeredActionType,
58
+ TriggerScopeType,
59
+ )
60
+ from .fragments import (
61
+ ArtifactPortfolioScopeFields,
62
+ ArtifactSequenceScopeFields,
63
+ FilterEventFields,
64
+ GenericWebhookActionFields,
65
+ GenericWebhookIntegrationConnectionFields,
66
+ GenericWebhookIntegrationFields,
67
+ IntegrationConnectionFields,
68
+ NoOpActionFields,
69
+ NotificationActionFields,
70
+ PageInfoFields,
71
+ ProjectConnectionFields,
72
+ ProjectScopeFields,
73
+ QueueJobActionFields,
74
+ SlackIntegrationConnectionFields,
75
+ SlackIntegrationFields,
76
+ TriggerFields,
77
+ )
78
+ from .generic_webhook_integrations_by_entity import GenericWebhookIntegrationsByEntity
79
+ from .get_automations import GetAutomations
80
+ from .get_automations_by_entity import GetAutomationsByEntity
81
+ from .input_types import (
82
+ CreateFilterTriggerInput,
83
+ CreateGenericWebhookIntegrationInput,
84
+ GenericWebhookActionInput,
85
+ NoOpTriggeredActionInput,
86
+ NotificationActionInput,
87
+ QueueJobActionInput,
88
+ TriggeredActionConfig,
89
+ UpdateFilterTriggerInput,
90
+ )
91
+ from .integrations_by_entity import IntegrationsByEntity
92
+ from .operations import (
93
+ CREATE_AUTOMATION_GQL,
94
+ CREATE_GENERIC_WEBHOOK_INTEGRATION_GQL,
95
+ DELETE_AUTOMATION_GQL,
96
+ GENERIC_WEBHOOK_INTEGRATIONS_BY_ENTITY_GQL,
97
+ GET_AUTOMATIONS_BY_ENTITY_GQL,
98
+ GET_AUTOMATIONS_GQL,
99
+ INTEGRATIONS_BY_ENTITY_GQL,
100
+ SLACK_INTEGRATIONS_BY_ENTITY_GQL,
101
+ UPDATE_AUTOMATION_GQL,
102
+ )
103
+ from .slack_integrations_by_entity import SlackIntegrationsByEntity
104
+ from .update_automation import UpdateAutomation
@@ -21,7 +21,7 @@ class CreateGenericWebhookIntegration(GQLBase):
21
21
  class CreateGenericWebhookIntegrationCreateGenericWebhookIntegration(GQLBase):
22
22
  integration: Union[
23
23
  CreateGenericWebhookIntegrationCreateGenericWebhookIntegrationIntegrationIntegration,
24
- CreateGenericWebhookIntegrationCreateGenericWebhookIntegrationIntegrationGenericWebhookIntegration,
24
+ GenericWebhookIntegrationFields,
25
25
  ] = Field(discriminator="typename__")
26
26
 
27
27
 
@@ -33,11 +33,5 @@ class CreateGenericWebhookIntegrationCreateGenericWebhookIntegrationIntegrationI
33
33
  ]
34
34
 
35
35
 
36
- class CreateGenericWebhookIntegrationCreateGenericWebhookIntegrationIntegrationGenericWebhookIntegration(
37
- GenericWebhookIntegrationFields
38
- ):
39
- typename__: Typename[Literal["GenericWebhookIntegration"]]
40
-
41
-
42
36
  CreateGenericWebhookIntegration.model_rebuild()
43
37
  CreateGenericWebhookIntegrationCreateGenericWebhookIntegration.model_rebuild()
@@ -52,7 +52,7 @@ class GenericWebhookActionFields(GQLBase):
52
52
  )
53
53
  integration: Union[
54
54
  GenericWebhookActionFieldsIntegrationIntegration,
55
- GenericWebhookActionFieldsIntegrationGenericWebhookIntegration,
55
+ GenericWebhookIntegrationFields,
56
56
  ] = Field(discriminator="typename__")
57
57
  request_payload: Optional[str] = Field(alias="requestPayload")
58
58
 
@@ -75,7 +75,7 @@ class GenericWebhookIntegrationConnectionFieldsEdges(GQLBase):
75
75
  Annotated[
76
76
  Union[
77
77
  GenericWebhookIntegrationConnectionFieldsEdgesNodeIntegration,
78
- GenericWebhookIntegrationConnectionFieldsEdgesNodeGenericWebhookIntegration,
78
+ GenericWebhookIntegrationFields,
79
79
  ],
80
80
  Field(discriminator="typename__"),
81
81
  ]
@@ -109,8 +109,8 @@ class IntegrationConnectionFieldsEdges(GQLBase):
109
109
  Annotated[
110
110
  Union[
111
111
  IntegrationConnectionFieldsEdgesNodeIntegration,
112
- IntegrationConnectionFieldsEdgesNodeGenericWebhookIntegration,
113
- IntegrationConnectionFieldsEdgesNodeSlackIntegration,
112
+ GenericWebhookIntegrationFields,
113
+ SlackIntegrationFields,
114
114
  ],
115
115
  Field(discriminator="typename__"),
116
116
  ]
@@ -131,8 +131,7 @@ class NotificationActionFields(GQLBase):
131
131
  "NotificationTriggeredAction"
132
132
  )
133
133
  integration: Union[
134
- NotificationActionFieldsIntegrationIntegration,
135
- NotificationActionFieldsIntegrationSlackIntegration,
134
+ NotificationActionFieldsIntegrationIntegration, SlackIntegrationFields
136
135
  ] = Field(discriminator="typename__")
137
136
  title: Optional[str]
138
137
  message: Optional[str]
@@ -194,7 +193,7 @@ class SlackIntegrationConnectionFieldsEdges(GQLBase):
194
193
  Annotated[
195
194
  Union[
196
195
  SlackIntegrationConnectionFieldsEdgesNodeIntegration,
197
- SlackIntegrationConnectionFieldsEdgesNodeSlackIntegration,
196
+ SlackIntegrationFields,
198
197
  ],
199
198
  Field(discriminator="typename__"),
200
199
  ]
@@ -223,16 +222,14 @@ class TriggerFields(GQLBase):
223
222
  description: Optional[str]
224
223
  enabled: bool
225
224
  scope: Union[
226
- TriggerFieldsScopeProject,
227
- TriggerFieldsScopeArtifactSequence,
228
- TriggerFieldsScopeArtifactPortfolio,
225
+ ProjectScopeFields, ArtifactSequenceScopeFields, ArtifactPortfolioScopeFields
229
226
  ] = Field(discriminator="typename__")
230
- event: TriggerFieldsEventFilterEventTriggeringCondition
227
+ event: FilterEventFields
231
228
  action: Union[
232
- TriggerFieldsActionQueueJobTriggeredAction,
233
- TriggerFieldsActionNotificationTriggeredAction,
234
- TriggerFieldsActionGenericWebhookTriggeredAction,
235
- TriggerFieldsActionNoOpTriggeredAction,
229
+ QueueJobActionFields,
230
+ NotificationActionFields,
231
+ GenericWebhookActionFields,
232
+ NoOpActionFields,
236
233
  ] = Field(discriminator="typename__")
237
234
 
238
235
 
@@ -243,68 +240,6 @@ class UpdateAutomationResult(GQLBase):
243
240
  trigger: Optional[TriggerFields]
244
241
 
245
242
 
246
- class TriggerFieldsScopeArtifactPortfolio(ArtifactPortfolioScopeFields):
247
- typename__: Typename[Literal["ArtifactPortfolio"]]
248
-
249
-
250
- class TriggerFieldsScopeArtifactSequence(ArtifactSequenceScopeFields):
251
- typename__: Typename[Literal["ArtifactSequence"]]
252
-
253
-
254
- class TriggerFieldsEventFilterEventTriggeringCondition(FilterEventFields):
255
- typename__: Typename[Literal["FilterEventTriggeringCondition"]]
256
-
257
-
258
- class TriggerFieldsActionGenericWebhookTriggeredAction(GenericWebhookActionFields):
259
- typename__: Typename[Literal["GenericWebhookTriggeredAction"]]
260
-
261
-
262
- class GenericWebhookActionFieldsIntegrationGenericWebhookIntegration(
263
- GenericWebhookIntegrationFields
264
- ):
265
- typename__: Typename[Literal["GenericWebhookIntegration"]]
266
-
267
-
268
- class GenericWebhookIntegrationConnectionFieldsEdgesNodeGenericWebhookIntegration(
269
- GenericWebhookIntegrationFields
270
- ):
271
- typename__: Typename[Literal["GenericWebhookIntegration"]]
272
-
273
-
274
- class IntegrationConnectionFieldsEdgesNodeGenericWebhookIntegration(
275
- GenericWebhookIntegrationFields
276
- ):
277
- typename__: Typename[Literal["GenericWebhookIntegration"]]
278
-
279
-
280
- class TriggerFieldsActionNoOpTriggeredAction(NoOpActionFields):
281
- typename__: Typename[Literal["NoOpTriggeredAction"]]
282
-
283
-
284
- class TriggerFieldsActionNotificationTriggeredAction(NotificationActionFields):
285
- typename__: Typename[Literal["NotificationTriggeredAction"]]
286
-
287
-
288
- class TriggerFieldsScopeProject(ProjectScopeFields):
289
- typename__: Typename[Literal["Project"]]
290
-
291
-
292
- class TriggerFieldsActionQueueJobTriggeredAction(QueueJobActionFields):
293
- typename__: Typename[Literal["QueueJobTriggeredAction"]]
294
-
295
-
296
- class IntegrationConnectionFieldsEdgesNodeSlackIntegration(SlackIntegrationFields):
297
- typename__: Typename[Literal["SlackIntegration"]]
298
-
299
-
300
- class NotificationActionFieldsIntegrationSlackIntegration(SlackIntegrationFields):
301
- typename__: Typename[Literal["SlackIntegration"]]
302
-
303
-
304
- class SlackIntegrationConnectionFieldsEdgesNodeSlackIntegration(SlackIntegrationFields):
305
- typename__: Typename[Literal["SlackIntegration"]]
306
-
307
-
308
243
  ArtifactPortfolioScopeFields.model_rebuild()
309
244
  ArtifactSequenceScopeFields.model_rebuild()
310
245
  CreateAutomationResult.model_rebuild()
@@ -335,24 +270,24 @@ SlackIntegrationConnectionFieldsEdgesNodeIntegration.model_rebuild()
335
270
  SlackIntegrationFields.model_rebuild()
336
271
  TriggerFields.model_rebuild()
337
272
  UpdateAutomationResult.model_rebuild()
338
- TriggerFieldsScopeArtifactPortfolio.model_rebuild()
339
- TriggerFieldsScopeArtifactSequence.model_rebuild()
340
- TriggerFieldsEventFilterEventTriggeringCondition.model_rebuild()
341
- TriggerFieldsActionGenericWebhookTriggeredAction.model_rebuild()
342
- GenericWebhookActionFieldsIntegrationGenericWebhookIntegration.model_rebuild()
343
- GenericWebhookIntegrationConnectionFieldsEdgesNodeGenericWebhookIntegration.model_rebuild()
344
- IntegrationConnectionFieldsEdgesNodeGenericWebhookIntegration.model_rebuild()
345
- TriggerFieldsActionNoOpTriggeredAction.model_rebuild()
346
- TriggerFieldsActionNotificationTriggeredAction.model_rebuild()
273
+ ArtifactPortfolioScopeFields.model_rebuild()
274
+ ArtifactSequenceScopeFields.model_rebuild()
275
+ FilterEventFields.model_rebuild()
276
+ GenericWebhookActionFields.model_rebuild()
277
+ GenericWebhookIntegrationFields.model_rebuild()
278
+ GenericWebhookIntegrationFields.model_rebuild()
279
+ GenericWebhookIntegrationFields.model_rebuild()
280
+ NoOpActionFields.model_rebuild()
281
+ NotificationActionFields.model_rebuild()
347
282
  PageInfoFields.model_rebuild()
348
283
  PageInfoFields.model_rebuild()
349
284
  PageInfoFields.model_rebuild()
350
285
  PageInfoFields.model_rebuild()
351
- TriggerFieldsScopeProject.model_rebuild()
352
- TriggerFieldsActionQueueJobTriggeredAction.model_rebuild()
353
- IntegrationConnectionFieldsEdgesNodeSlackIntegration.model_rebuild()
354
- NotificationActionFieldsIntegrationSlackIntegration.model_rebuild()
355
- SlackIntegrationConnectionFieldsEdgesNodeSlackIntegration.model_rebuild()
286
+ ProjectScopeFields.model_rebuild()
287
+ QueueJobActionFields.model_rebuild()
288
+ SlackIntegrationFields.model_rebuild()
289
+ SlackIntegrationFields.model_rebuild()
290
+ SlackIntegrationFields.model_rebuild()
356
291
  TriggerFields.model_rebuild()
357
292
  TriggerFields.model_rebuild()
358
293
  TriggerFields.model_rebuild()
wandb/bin/gpu_stats.exe CHANGED
Binary file
wandb/bin/wandb-core CHANGED
Binary file
wandb/cli/beta.py CHANGED
@@ -15,8 +15,7 @@ from wandb.util import get_core_path
15
15
 
16
16
  @click.group()
17
17
  def beta():
18
- """Beta versions of wandb CLI commands. Requires wandb-core."""
19
- # this is the future that requires wandb-core!
18
+ """Beta versions of wandb CLI commands."""
20
19
  import wandb.env
21
20
 
22
21
  wandb._sentry.configure_scope(process_context="wandb_beta")
@@ -32,6 +31,21 @@ def beta():
32
31
  )
33
32
 
34
33
 
34
+ @beta.command()
35
+ @click.argument("path", nargs=1, type=click.Path(exists=True), required=False)
36
+ def leet(path: str | None = None) -> None:
37
+ """Launch W&B LEET: the Lightweight Experiment Exploration Tool.
38
+
39
+ LEET is a terminal UI for viewing a W&B run specified by an optional PATH.
40
+
41
+ PATH can include a .wandb file or a run directory containing a .wandb file.
42
+ If PATH is not provided, the command will look for the latest run.
43
+ """
44
+ from . import beta_leet
45
+
46
+ beta_leet.launch(path)
47
+
48
+
35
49
  @beta.command()
36
50
  @click.argument("paths", type=click.Path(exists=True), nargs=-1)
37
51
  @click.option(
wandb/cli/beta_leet.py ADDED
@@ -0,0 +1,74 @@
1
+ from __future__ import annotations
2
+
3
+ import os
4
+ import pathlib
5
+ import subprocess
6
+ import sys
7
+
8
+ import click
9
+ from typing_extensions import Never
10
+
11
+ import wandb
12
+ from wandb.env import error_reporting_enabled, is_debug
13
+ from wandb.sdk import wandb_setup
14
+ from wandb.util import get_core_path
15
+
16
+ from .beta_sync import _find_wandb_files
17
+
18
+
19
+ def _fatal(message: str) -> Never:
20
+ """Print an error message and exit with code 1."""
21
+ click.echo(f"Error: {message}", err=True)
22
+ sys.exit(1)
23
+
24
+
25
+ def _wandb_file_path(path: str | None) -> str:
26
+ """Returns absolute path to the .wandb file to display with LEET.
27
+
28
+ If `path` is not provided, looks for the latest W&B run.
29
+
30
+ Prints an error and exits if a valid path is not found.
31
+ """
32
+ if not path:
33
+ wandb_dir = wandb_setup.singleton().settings.wandb_dir
34
+
35
+ wandb_run_path = (pathlib.Path(wandb_dir) / "latest-run").resolve()
36
+ else:
37
+ wandb_run_path = pathlib.Path(path).resolve()
38
+
39
+ wandb_files = list(_find_wandb_files(wandb_run_path, skip_synced=False))
40
+
41
+ if len(wandb_files) == 0:
42
+ _fatal(f"Could not find a .wandb file in {wandb_run_path}.")
43
+ elif len(wandb_files) > 1:
44
+ _fatal(f"Found multiple .wandb files in {wandb_run_path}.")
45
+
46
+ return wandb_files[0]
47
+
48
+
49
+ def launch(path: str | None) -> Never:
50
+ wandb._sentry.configure_scope(process_context="leet")
51
+
52
+ wandb_file = _wandb_file_path(path)
53
+
54
+ try:
55
+ core_path = get_core_path()
56
+
57
+ args = [core_path, "leet"]
58
+ args.append(wandb_file)
59
+
60
+ if not error_reporting_enabled():
61
+ args.append("--no-observability")
62
+
63
+ if is_debug(default="False"):
64
+ args.extend(["--log-level", "-4"])
65
+
66
+ result = subprocess.run(
67
+ args,
68
+ env=os.environ,
69
+ close_fds=True,
70
+ )
71
+ sys.exit(result.returncode)
72
+
73
+ except Exception as e:
74
+ wandb._sentry.reraise(e)
wandb/cli/beta_sync.py CHANGED
@@ -14,7 +14,7 @@ import wandb
14
14
  from wandb.proto.wandb_sync_pb2 import ServerSyncResponse
15
15
  from wandb.sdk import wandb_setup
16
16
  from wandb.sdk.lib import asyncio_compat
17
- from wandb.sdk.lib.printer import ERROR, Printer, new_printer
17
+ from wandb.sdk.lib.printer import Printer, new_printer
18
18
  from wandb.sdk.lib.progress import progress_printer
19
19
  from wandb.sdk.lib.service.service_connection import ServiceConnection
20
20
  from wandb.sdk.mailbox.mailbox_handle import MailboxHandle
@@ -86,12 +86,10 @@ async def _do_sync(
86
86
 
87
87
  This is factored out to make the progress animation testable.
88
88
  """
89
- init_result = await service.init_sync(
90
- wandb_files,
91
- settings,
92
- ).wait_async(timeout=5)
89
+ init_handle = await service.init_sync(wandb_files, settings)
90
+ init_result = await init_handle.wait_async(timeout=5)
93
91
 
94
- sync_handle = service.sync(init_result.id, parallelism=parallelism)
92
+ sync_handle = await service.sync(init_result.id, parallelism=parallelism)
95
93
 
96
94
  await _SyncStatusLoop(
97
95
  init_result.id,
@@ -130,19 +128,19 @@ class _SyncStatusLoop:
130
128
  handle: MailboxHandle[ServerSyncResponse],
131
129
  ) -> None:
132
130
  response = await handle.wait_async(timeout=None)
133
- if messages := list(response.errors):
134
- self._printer.display(messages, level=ERROR)
131
+ for msg in response.messages:
132
+ self._printer.display(msg.content, level=msg.severity)
135
133
  self._done.set()
136
134
 
137
135
  async def _show_progress_until_done(self) -> None:
138
136
  """Show rate-limited status updates until _done is set."""
139
137
  with progress_printer(self._printer, "Syncing...") as progress:
140
138
  while not await self._rate_limit_check_done():
141
- handle = self._service.sync_status(self._id)
139
+ handle = await self._service.sync_status(self._id)
142
140
  response = await handle.wait_async(timeout=None)
143
141
 
144
- if messages := list(response.new_errors):
145
- self._printer.display(messages, level=ERROR)
142
+ for msg in response.new_messages:
143
+ self._printer.display(msg.content, level=msg.severity)
146
144
  progress.update(response.stats)
147
145
 
148
146
  async def _rate_limit_check_done(self) -> bool:
wandb/cli/cli.py CHANGED
@@ -244,7 +244,7 @@ def projects(entity, display=True):
244
244
  return projects
245
245
 
246
246
 
247
- @cli.command(context_settings=CONTEXT, help="Login to Weights & Biases")
247
+ @cli.command(context_settings=CONTEXT)
248
248
  @click.argument("key", nargs=-1)
249
249
  @click.option("--cloud", is_flag=True, help="Login to the cloud instead of local")
250
250
  @click.option(
@@ -262,6 +262,16 @@ def projects(entity, display=True):
262
262
  )
263
263
  @display_error
264
264
  def login(key, host, cloud, relogin, anonymously, verify, no_offline=False):
265
+ """Verify and store your API key for authentication with W&B services.
266
+
267
+ By default, only store credentials locally without verifying them with W&B.
268
+ To verify credentials, set `--verify=True`.
269
+
270
+ For server deployments (dedicated cloud or customer-managed instances),
271
+ specify the host URL using the `--host` flag. You can also set environment
272
+ variables `WANDB_BASE_URL` and `WANDB_API_KEY` instead of running
273
+ the `login` command with host parameters.
274
+ """
265
275
  # TODO: handle no_offline
266
276
  anon_mode = "must" if anonymously else "never"
267
277
 
@@ -422,9 +432,7 @@ def init(ctx, project, entity, reset, mode):
422
432
  )
423
433
 
424
434
 
425
- @cli.command(
426
- context_settings=CONTEXT, help="Upload an offline training directory to W&B"
427
- )
435
+ @cli.command(context_settings=CONTEXT)
428
436
  @click.pass_context
429
437
  @click.argument("path", nargs=-1, type=click.Path(exists=True))
430
438
  @click.option("--view", is_flag=True, default=False, help="View runs", hidden=True)
@@ -518,9 +526,23 @@ def sync(
518
526
  skip_console=None,
519
527
  replace_tags=None,
520
528
  ):
529
+ """Synchronize W&B run data to the cloud.
530
+
531
+ If PATH is provided, sync runs found at the given path. If a path
532
+ is not specified, search for `./wandb` first, then search for a
533
+ `wandb/` subdirectory.
534
+
535
+ To sync a specific run:
536
+
537
+ wandb sync ./wandb/run-20250813_124246-n67z9ude
538
+
539
+ Or equivalently:
540
+
541
+ wandb sync ./wandb/run-20250813_124246-n67z9ude/run-n67z9ude.wandb
542
+ """
521
543
  api = _get_cling_api()
522
544
  if not api.is_authenticated:
523
- wandb.termlog("Login to W&B to sync offline runs")
545
+ wandb.termlog("Login to W&B to sync runs")
524
546
  ctx.invoke(login, no_offline=True)
525
547
  api = _get_cling_api(reset=True)
526
548
 
@@ -2700,9 +2722,10 @@ Run `git clone {repo}` and restore from there or pass the --no-git flag."""
2700
2722
  return commit, json_config, patch_content, repo, metadata
2701
2723
 
2702
2724
 
2703
- @cli.command("online", help="Enable W&B sync")
2725
+ @cli.command("online")
2704
2726
  @display_error
2705
2727
  def online():
2728
+ """Undo `wandb offline`."""
2706
2729
  api = InternalApi()
2707
2730
  try:
2708
2731
  api.clear_setting("mode", persist=True)
@@ -2713,9 +2736,13 @@ def online():
2713
2736
  )
2714
2737
 
2715
2738
 
2716
- @cli.command("offline", help="Disable W&B sync")
2739
+ @cli.command("offline")
2717
2740
  @display_error
2718
2741
  def offline():
2742
+ """Save data logged to W&B locally without uploading it to the cloud.
2743
+
2744
+ Use `wandb online` or `wandb sync` to upload offline runs.
2745
+ """
2719
2746
  api = InternalApi()
2720
2747
  try:
2721
2748
  api.set_setting("mode", "offline", persist=True)