wandb 0.22.0__py3-none-win32.whl → 0.22.2__py3-none-win32.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.
- wandb/__init__.py +1 -1
- wandb/__init__.pyi +8 -5
- wandb/_pydantic/__init__.py +12 -11
- wandb/_pydantic/base.py +49 -19
- wandb/apis/__init__.py +2 -0
- wandb/apis/attrs.py +2 -0
- wandb/apis/importers/internals/internal.py +16 -23
- wandb/apis/internal.py +2 -0
- wandb/apis/normalize.py +2 -0
- wandb/apis/public/__init__.py +3 -2
- wandb/apis/public/api.py +215 -164
- wandb/apis/public/artifacts.py +23 -20
- wandb/apis/public/const.py +2 -0
- wandb/apis/public/files.py +33 -24
- wandb/apis/public/history.py +2 -0
- wandb/apis/public/jobs.py +20 -18
- wandb/apis/public/projects.py +4 -2
- wandb/apis/public/query_generator.py +3 -0
- wandb/apis/public/registries/__init__.py +7 -0
- wandb/apis/public/registries/_freezable_list.py +9 -12
- wandb/apis/public/registries/registries_search.py +8 -6
- wandb/apis/public/registries/registry.py +22 -17
- wandb/apis/public/reports.py +2 -0
- wandb/apis/public/runs.py +261 -57
- wandb/apis/public/sweeps.py +10 -9
- wandb/apis/public/teams.py +2 -0
- wandb/apis/public/users.py +2 -0
- wandb/apis/public/utils.py +16 -15
- wandb/automations/_generated/__init__.py +54 -127
- wandb/automations/_generated/create_generic_webhook_integration.py +1 -7
- wandb/automations/_generated/fragments.py +26 -91
- wandb/bin/gpu_stats.exe +0 -0
- wandb/bin/wandb-core +0 -0
- wandb/cli/beta.py +16 -2
- wandb/cli/beta_leet.py +74 -0
- wandb/cli/beta_sync.py +9 -11
- wandb/cli/cli.py +34 -7
- wandb/errors/errors.py +3 -3
- wandb/proto/v3/wandb_api_pb2.py +86 -0
- wandb/proto/v3/wandb_internal_pb2.py +352 -351
- wandb/proto/v3/wandb_settings_pb2.py +2 -2
- wandb/proto/v3/wandb_sync_pb2.py +19 -6
- wandb/proto/v4/wandb_api_pb2.py +37 -0
- wandb/proto/v4/wandb_internal_pb2.py +352 -351
- wandb/proto/v4/wandb_settings_pb2.py +2 -2
- wandb/proto/v4/wandb_sync_pb2.py +10 -6
- wandb/proto/v5/wandb_api_pb2.py +38 -0
- wandb/proto/v5/wandb_internal_pb2.py +352 -351
- wandb/proto/v5/wandb_settings_pb2.py +2 -2
- wandb/proto/v5/wandb_sync_pb2.py +10 -6
- wandb/proto/v6/wandb_api_pb2.py +48 -0
- wandb/proto/v6/wandb_internal_pb2.py +352 -351
- wandb/proto/v6/wandb_settings_pb2.py +2 -2
- wandb/proto/v6/wandb_sync_pb2.py +10 -6
- wandb/proto/wandb_api_pb2.py +18 -0
- wandb/proto/wandb_generate_proto.py +1 -0
- wandb/sdk/artifacts/_factories.py +7 -2
- wandb/sdk/artifacts/_generated/__init__.py +112 -412
- wandb/sdk/artifacts/_generated/fragments.py +65 -0
- wandb/sdk/artifacts/_generated/operations.py +52 -22
- wandb/sdk/artifacts/_generated/run_input_artifacts.py +3 -23
- wandb/sdk/artifacts/_generated/run_output_artifacts.py +3 -23
- wandb/sdk/artifacts/_generated/type_info.py +19 -0
- wandb/sdk/artifacts/_gqlutils.py +47 -0
- wandb/sdk/artifacts/_models/__init__.py +4 -0
- wandb/sdk/artifacts/_models/base_model.py +20 -0
- wandb/sdk/artifacts/_validators.py +40 -12
- wandb/sdk/artifacts/artifact.py +99 -118
- wandb/sdk/artifacts/artifact_file_cache.py +6 -1
- wandb/sdk/artifacts/artifact_manifest_entry.py +67 -14
- wandb/sdk/artifacts/storage_handler.py +18 -12
- wandb/sdk/artifacts/storage_handlers/azure_handler.py +11 -6
- wandb/sdk/artifacts/storage_handlers/gcs_handler.py +9 -6
- wandb/sdk/artifacts/storage_handlers/http_handler.py +9 -4
- wandb/sdk/artifacts/storage_handlers/local_file_handler.py +10 -6
- wandb/sdk/artifacts/storage_handlers/multi_handler.py +5 -4
- wandb/sdk/artifacts/storage_handlers/s3_handler.py +10 -8
- wandb/sdk/artifacts/storage_handlers/tracking_handler.py +6 -4
- wandb/sdk/artifacts/storage_handlers/wb_artifact_handler.py +24 -21
- wandb/sdk/artifacts/storage_handlers/wb_local_artifact_handler.py +4 -2
- wandb/sdk/artifacts/storage_policies/_multipart.py +187 -0
- wandb/sdk/artifacts/storage_policies/wandb_storage_policy.py +71 -242
- wandb/sdk/artifacts/storage_policy.py +25 -12
- wandb/sdk/data_types/bokeh.py +5 -1
- wandb/sdk/data_types/image.py +17 -6
- wandb/sdk/data_types/object_3d.py +67 -2
- wandb/sdk/interface/interface.py +31 -4
- wandb/sdk/interface/interface_queue.py +10 -0
- wandb/sdk/interface/interface_shared.py +0 -7
- wandb/sdk/interface/interface_sock.py +9 -3
- wandb/sdk/internal/_generated/__init__.py +2 -12
- wandb/sdk/internal/job_builder.py +27 -10
- wandb/sdk/internal/sender.py +5 -2
- wandb/sdk/internal/settings_static.py +2 -82
- wandb/sdk/launch/create_job.py +2 -1
- wandb/sdk/launch/runner/kubernetes_runner.py +25 -20
- wandb/sdk/launch/utils.py +82 -1
- wandb/sdk/lib/progress.py +8 -74
- wandb/sdk/lib/service/service_client.py +5 -9
- wandb/sdk/lib/service/service_connection.py +39 -23
- wandb/sdk/mailbox/mailbox_handle.py +2 -0
- wandb/sdk/projects/_generated/__init__.py +12 -33
- wandb/sdk/wandb_init.py +23 -3
- wandb/sdk/wandb_login.py +53 -27
- wandb/sdk/wandb_run.py +10 -5
- wandb/sdk/wandb_settings.py +63 -25
- wandb/sync/sync.py +7 -2
- wandb/util.py +1 -1
- {wandb-0.22.0.dist-info → wandb-0.22.2.dist-info}/METADATA +1 -1
- {wandb-0.22.0.dist-info → wandb-0.22.2.dist-info}/RECORD +113 -103
- wandb/sdk/artifacts/_graphql_fragments.py +0 -19
- {wandb-0.22.0.dist-info → wandb-0.22.2.dist-info}/WHEEL +0 -0
- {wandb-0.22.0.dist-info → wandb-0.22.2.dist-info}/entry_points.txt +0 -0
- {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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
113
|
-
|
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
|
-
|
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
|
-
|
227
|
-
TriggerFieldsScopeArtifactSequence,
|
228
|
-
TriggerFieldsScopeArtifactPortfolio,
|
225
|
+
ProjectScopeFields, ArtifactSequenceScopeFields, ArtifactPortfolioScopeFields
|
229
226
|
] = Field(discriminator="typename__")
|
230
|
-
event:
|
227
|
+
event: FilterEventFields
|
231
228
|
action: Union[
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
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
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
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
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
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.
|
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
|
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
|
-
|
90
|
-
|
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
|
-
|
134
|
-
self._printer.display(
|
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
|
-
|
145
|
-
self._printer.display(
|
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
|
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
|
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"
|
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"
|
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)
|