flyte 0.2.0b1__py3-none-any.whl → 2.0.0b46__py3-none-any.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 (266) hide show
  1. flyte/__init__.py +83 -30
  2. flyte/_bin/connect.py +61 -0
  3. flyte/_bin/debug.py +38 -0
  4. flyte/_bin/runtime.py +87 -19
  5. flyte/_bin/serve.py +351 -0
  6. flyte/_build.py +3 -2
  7. flyte/_cache/cache.py +6 -5
  8. flyte/_cache/local_cache.py +216 -0
  9. flyte/_code_bundle/_ignore.py +31 -5
  10. flyte/_code_bundle/_packaging.py +42 -11
  11. flyte/_code_bundle/_utils.py +57 -34
  12. flyte/_code_bundle/bundle.py +130 -27
  13. flyte/_constants.py +1 -0
  14. flyte/_context.py +21 -5
  15. flyte/_custom_context.py +73 -0
  16. flyte/_debug/constants.py +37 -0
  17. flyte/_debug/utils.py +17 -0
  18. flyte/_debug/vscode.py +315 -0
  19. flyte/_deploy.py +396 -75
  20. flyte/_deployer.py +109 -0
  21. flyte/_environment.py +94 -11
  22. flyte/_excepthook.py +37 -0
  23. flyte/_group.py +2 -1
  24. flyte/_hash.py +1 -16
  25. flyte/_image.py +544 -231
  26. flyte/_initialize.py +456 -316
  27. flyte/_interface.py +40 -5
  28. flyte/_internal/controllers/__init__.py +22 -8
  29. flyte/_internal/controllers/_local_controller.py +159 -35
  30. flyte/_internal/controllers/_trace.py +18 -10
  31. flyte/_internal/controllers/remote/__init__.py +38 -9
  32. flyte/_internal/controllers/remote/_action.py +82 -12
  33. flyte/_internal/controllers/remote/_client.py +6 -2
  34. flyte/_internal/controllers/remote/_controller.py +290 -64
  35. flyte/_internal/controllers/remote/_core.py +155 -95
  36. flyte/_internal/controllers/remote/_informer.py +40 -20
  37. flyte/_internal/controllers/remote/_service_protocol.py +2 -2
  38. flyte/_internal/imagebuild/__init__.py +2 -10
  39. flyte/_internal/imagebuild/docker_builder.py +391 -84
  40. flyte/_internal/imagebuild/image_builder.py +111 -55
  41. flyte/_internal/imagebuild/remote_builder.py +409 -0
  42. flyte/_internal/imagebuild/utils.py +79 -0
  43. flyte/_internal/resolvers/_app_env_module.py +92 -0
  44. flyte/_internal/resolvers/_task_module.py +5 -38
  45. flyte/_internal/resolvers/app_env.py +26 -0
  46. flyte/_internal/resolvers/common.py +8 -1
  47. flyte/_internal/resolvers/default.py +2 -2
  48. flyte/_internal/runtime/convert.py +319 -36
  49. flyte/_internal/runtime/entrypoints.py +106 -18
  50. flyte/_internal/runtime/io.py +71 -23
  51. flyte/_internal/runtime/resources_serde.py +21 -7
  52. flyte/_internal/runtime/reuse.py +125 -0
  53. flyte/_internal/runtime/rusty.py +196 -0
  54. flyte/_internal/runtime/task_serde.py +239 -66
  55. flyte/_internal/runtime/taskrunner.py +48 -8
  56. flyte/_internal/runtime/trigger_serde.py +162 -0
  57. flyte/_internal/runtime/types_serde.py +7 -16
  58. flyte/_keyring/file.py +115 -0
  59. flyte/_link.py +30 -0
  60. flyte/_logging.py +241 -42
  61. flyte/_map.py +312 -0
  62. flyte/_metrics.py +59 -0
  63. flyte/_module.py +74 -0
  64. flyte/_pod.py +30 -0
  65. flyte/_resources.py +296 -33
  66. flyte/_retry.py +1 -7
  67. flyte/_reusable_environment.py +72 -7
  68. flyte/_run.py +462 -132
  69. flyte/_secret.py +47 -11
  70. flyte/_serve.py +333 -0
  71. flyte/_task.py +245 -56
  72. flyte/_task_environment.py +219 -97
  73. flyte/_task_plugins.py +47 -0
  74. flyte/_tools.py +8 -8
  75. flyte/_trace.py +15 -24
  76. flyte/_trigger.py +1027 -0
  77. flyte/_utils/__init__.py +12 -1
  78. flyte/_utils/asyn.py +3 -1
  79. flyte/_utils/async_cache.py +139 -0
  80. flyte/_utils/coro_management.py +5 -4
  81. flyte/_utils/description_parser.py +19 -0
  82. flyte/_utils/docker_credentials.py +173 -0
  83. flyte/_utils/helpers.py +45 -19
  84. flyte/_utils/module_loader.py +123 -0
  85. flyte/_utils/org_discovery.py +57 -0
  86. flyte/_utils/uv_script_parser.py +8 -1
  87. flyte/_version.py +16 -3
  88. flyte/app/__init__.py +27 -0
  89. flyte/app/_app_environment.py +362 -0
  90. flyte/app/_connector_environment.py +40 -0
  91. flyte/app/_deploy.py +130 -0
  92. flyte/app/_parameter.py +343 -0
  93. flyte/app/_runtime/__init__.py +3 -0
  94. flyte/app/_runtime/app_serde.py +383 -0
  95. flyte/app/_types.py +113 -0
  96. flyte/app/extras/__init__.py +9 -0
  97. flyte/app/extras/_auth_middleware.py +217 -0
  98. flyte/app/extras/_fastapi.py +93 -0
  99. flyte/app/extras/_model_loader/__init__.py +3 -0
  100. flyte/app/extras/_model_loader/config.py +7 -0
  101. flyte/app/extras/_model_loader/loader.py +288 -0
  102. flyte/cli/__init__.py +12 -0
  103. flyte/cli/_abort.py +28 -0
  104. flyte/cli/_build.py +114 -0
  105. flyte/cli/_common.py +493 -0
  106. flyte/cli/_create.py +371 -0
  107. flyte/cli/_delete.py +45 -0
  108. flyte/cli/_deploy.py +401 -0
  109. flyte/cli/_gen.py +316 -0
  110. flyte/cli/_get.py +446 -0
  111. flyte/cli/_option.py +33 -0
  112. flyte/{_cli → cli}/_params.py +57 -17
  113. flyte/cli/_plugins.py +209 -0
  114. flyte/cli/_prefetch.py +292 -0
  115. flyte/cli/_run.py +690 -0
  116. flyte/cli/_serve.py +338 -0
  117. flyte/cli/_update.py +86 -0
  118. flyte/cli/_user.py +20 -0
  119. flyte/cli/main.py +246 -0
  120. flyte/config/__init__.py +2 -167
  121. flyte/config/_config.py +215 -163
  122. flyte/config/_internal.py +10 -1
  123. flyte/config/_reader.py +225 -0
  124. flyte/connectors/__init__.py +11 -0
  125. flyte/connectors/_connector.py +330 -0
  126. flyte/connectors/_server.py +194 -0
  127. flyte/connectors/utils.py +159 -0
  128. flyte/errors.py +134 -2
  129. flyte/extend.py +24 -0
  130. flyte/extras/_container.py +69 -56
  131. flyte/git/__init__.py +3 -0
  132. flyte/git/_config.py +279 -0
  133. flyte/io/__init__.py +8 -1
  134. flyte/io/{structured_dataset → _dataframe}/__init__.py +32 -30
  135. flyte/io/{structured_dataset → _dataframe}/basic_dfs.py +75 -68
  136. flyte/io/{structured_dataset/structured_dataset.py → _dataframe/dataframe.py} +207 -242
  137. flyte/io/_dir.py +575 -113
  138. flyte/io/_file.py +587 -141
  139. flyte/io/_hashing_io.py +342 -0
  140. flyte/io/extend.py +7 -0
  141. flyte/models.py +635 -0
  142. flyte/prefetch/__init__.py +22 -0
  143. flyte/prefetch/_hf_model.py +563 -0
  144. flyte/remote/__init__.py +14 -3
  145. flyte/remote/_action.py +879 -0
  146. flyte/remote/_app.py +346 -0
  147. flyte/remote/_auth_metadata.py +42 -0
  148. flyte/remote/_client/_protocols.py +62 -4
  149. flyte/remote/_client/auth/_auth_utils.py +19 -0
  150. flyte/remote/_client/auth/_authenticators/base.py +8 -2
  151. flyte/remote/_client/auth/_authenticators/device_code.py +4 -5
  152. flyte/remote/_client/auth/_authenticators/factory.py +4 -0
  153. flyte/remote/_client/auth/_authenticators/passthrough.py +79 -0
  154. flyte/remote/_client/auth/_authenticators/pkce.py +17 -18
  155. flyte/remote/_client/auth/_channel.py +47 -18
  156. flyte/remote/_client/auth/_client_config.py +5 -3
  157. flyte/remote/_client/auth/_keyring.py +15 -2
  158. flyte/remote/_client/auth/_token_client.py +3 -3
  159. flyte/remote/_client/controlplane.py +206 -18
  160. flyte/remote/_common.py +66 -0
  161. flyte/remote/_data.py +107 -22
  162. flyte/remote/_logs.py +116 -33
  163. flyte/remote/_project.py +21 -19
  164. flyte/remote/_run.py +164 -631
  165. flyte/remote/_secret.py +72 -29
  166. flyte/remote/_task.py +387 -46
  167. flyte/remote/_trigger.py +368 -0
  168. flyte/remote/_user.py +43 -0
  169. flyte/report/_report.py +10 -6
  170. flyte/storage/__init__.py +13 -1
  171. flyte/storage/_config.py +237 -0
  172. flyte/storage/_parallel_reader.py +289 -0
  173. flyte/storage/_storage.py +268 -59
  174. flyte/syncify/__init__.py +56 -0
  175. flyte/syncify/_api.py +414 -0
  176. flyte/types/__init__.py +39 -0
  177. flyte/types/_interface.py +22 -7
  178. flyte/{io/pickle/transformer.py → types/_pickle.py} +37 -9
  179. flyte/types/_string_literals.py +8 -9
  180. flyte/types/_type_engine.py +226 -126
  181. flyte/types/_utils.py +1 -1
  182. flyte-2.0.0b46.data/scripts/debug.py +38 -0
  183. flyte-2.0.0b46.data/scripts/runtime.py +194 -0
  184. flyte-2.0.0b46.dist-info/METADATA +352 -0
  185. flyte-2.0.0b46.dist-info/RECORD +221 -0
  186. flyte-2.0.0b46.dist-info/entry_points.txt +8 -0
  187. flyte-2.0.0b46.dist-info/licenses/LICENSE +201 -0
  188. flyte/_api_commons.py +0 -3
  189. flyte/_cli/_common.py +0 -299
  190. flyte/_cli/_create.py +0 -42
  191. flyte/_cli/_delete.py +0 -23
  192. flyte/_cli/_deploy.py +0 -140
  193. flyte/_cli/_get.py +0 -235
  194. flyte/_cli/_run.py +0 -174
  195. flyte/_cli/main.py +0 -98
  196. flyte/_datastructures.py +0 -342
  197. flyte/_internal/controllers/pbhash.py +0 -39
  198. flyte/_protos/common/authorization_pb2.py +0 -66
  199. flyte/_protos/common/authorization_pb2.pyi +0 -108
  200. flyte/_protos/common/authorization_pb2_grpc.py +0 -4
  201. flyte/_protos/common/identifier_pb2.py +0 -71
  202. flyte/_protos/common/identifier_pb2.pyi +0 -82
  203. flyte/_protos/common/identifier_pb2_grpc.py +0 -4
  204. flyte/_protos/common/identity_pb2.py +0 -48
  205. flyte/_protos/common/identity_pb2.pyi +0 -72
  206. flyte/_protos/common/identity_pb2_grpc.py +0 -4
  207. flyte/_protos/common/list_pb2.py +0 -36
  208. flyte/_protos/common/list_pb2.pyi +0 -69
  209. flyte/_protos/common/list_pb2_grpc.py +0 -4
  210. flyte/_protos/common/policy_pb2.py +0 -37
  211. flyte/_protos/common/policy_pb2.pyi +0 -27
  212. flyte/_protos/common/policy_pb2_grpc.py +0 -4
  213. flyte/_protos/common/role_pb2.py +0 -37
  214. flyte/_protos/common/role_pb2.pyi +0 -53
  215. flyte/_protos/common/role_pb2_grpc.py +0 -4
  216. flyte/_protos/common/runtime_version_pb2.py +0 -28
  217. flyte/_protos/common/runtime_version_pb2.pyi +0 -24
  218. flyte/_protos/common/runtime_version_pb2_grpc.py +0 -4
  219. flyte/_protos/logs/dataplane/payload_pb2.py +0 -96
  220. flyte/_protos/logs/dataplane/payload_pb2.pyi +0 -168
  221. flyte/_protos/logs/dataplane/payload_pb2_grpc.py +0 -4
  222. flyte/_protos/secret/definition_pb2.py +0 -49
  223. flyte/_protos/secret/definition_pb2.pyi +0 -93
  224. flyte/_protos/secret/definition_pb2_grpc.py +0 -4
  225. flyte/_protos/secret/payload_pb2.py +0 -62
  226. flyte/_protos/secret/payload_pb2.pyi +0 -94
  227. flyte/_protos/secret/payload_pb2_grpc.py +0 -4
  228. flyte/_protos/secret/secret_pb2.py +0 -38
  229. flyte/_protos/secret/secret_pb2.pyi +0 -6
  230. flyte/_protos/secret/secret_pb2_grpc.py +0 -198
  231. flyte/_protos/secret/secret_pb2_grpc_grpc.py +0 -198
  232. flyte/_protos/validate/validate/validate_pb2.py +0 -76
  233. flyte/_protos/workflow/node_execution_service_pb2.py +0 -26
  234. flyte/_protos/workflow/node_execution_service_pb2.pyi +0 -4
  235. flyte/_protos/workflow/node_execution_service_pb2_grpc.py +0 -32
  236. flyte/_protos/workflow/queue_service_pb2.py +0 -106
  237. flyte/_protos/workflow/queue_service_pb2.pyi +0 -141
  238. flyte/_protos/workflow/queue_service_pb2_grpc.py +0 -172
  239. flyte/_protos/workflow/run_definition_pb2.py +0 -128
  240. flyte/_protos/workflow/run_definition_pb2.pyi +0 -310
  241. flyte/_protos/workflow/run_definition_pb2_grpc.py +0 -4
  242. flyte/_protos/workflow/run_logs_service_pb2.py +0 -41
  243. flyte/_protos/workflow/run_logs_service_pb2.pyi +0 -28
  244. flyte/_protos/workflow/run_logs_service_pb2_grpc.py +0 -69
  245. flyte/_protos/workflow/run_service_pb2.py +0 -133
  246. flyte/_protos/workflow/run_service_pb2.pyi +0 -175
  247. flyte/_protos/workflow/run_service_pb2_grpc.py +0 -412
  248. flyte/_protos/workflow/state_service_pb2.py +0 -58
  249. flyte/_protos/workflow/state_service_pb2.pyi +0 -71
  250. flyte/_protos/workflow/state_service_pb2_grpc.py +0 -138
  251. flyte/_protos/workflow/task_definition_pb2.py +0 -72
  252. flyte/_protos/workflow/task_definition_pb2.pyi +0 -65
  253. flyte/_protos/workflow/task_definition_pb2_grpc.py +0 -4
  254. flyte/_protos/workflow/task_service_pb2.py +0 -44
  255. flyte/_protos/workflow/task_service_pb2.pyi +0 -31
  256. flyte/_protos/workflow/task_service_pb2_grpc.py +0 -104
  257. flyte/io/_dataframe.py +0 -0
  258. flyte/io/pickle/__init__.py +0 -0
  259. flyte/remote/_console.py +0 -18
  260. flyte-0.2.0b1.dist-info/METADATA +0 -179
  261. flyte-0.2.0b1.dist-info/RECORD +0 -204
  262. flyte-0.2.0b1.dist-info/entry_points.txt +0 -3
  263. /flyte/{_cli → _debug}/__init__.py +0 -0
  264. /flyte/{_protos → _keyring}/__init__.py +0 -0
  265. {flyte-0.2.0b1.dist-info → flyte-2.0.0b46.dist-info}/WHEEL +0 -0
  266. {flyte-0.2.0b1.dist-info → flyte-2.0.0b46.dist-info}/top_level.txt +0 -0
@@ -1,11 +1,20 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
+ from typing import Literal, Optional
4
5
 
5
- from flyteidl.core import execution_pb2
6
+ from flyteidl2.common import identifier_pb2, phase_pb2
7
+ from flyteidl2.core import execution_pb2, interface_pb2
8
+ from flyteidl2.task import common_pb2, task_definition_pb2
9
+ from flyteidl2.workflow import (
10
+ run_definition_pb2,
11
+ state_service_pb2,
12
+ )
13
+ from google.protobuf import timestamp_pb2
6
14
 
7
- from flyte._datastructures import GroupData
8
- from flyte._protos.workflow import run_definition_pb2, state_service_pb2, task_definition_pb2
15
+ from flyte.models import GroupData
16
+
17
+ ActionType = Literal["task", "trace"]
9
18
 
10
19
 
11
20
  @dataclass
@@ -15,19 +24,23 @@ class Action:
15
24
  Holds the inmemory state of a task. It is combined representation of local and remote states.
16
25
  """
17
26
 
18
- action_id: run_definition_pb2.ActionIdentifier
27
+ action_id: identifier_pb2.ActionIdentifier
19
28
  parent_action_name: str
29
+ type: ActionType = "task" # type of action, task or trace
20
30
  friendly_name: str | None = None
21
31
  group: GroupData | None = None
22
32
  task: task_definition_pb2.TaskSpec | None = None
33
+ trace: run_definition_pb2.TraceAction | None = None
23
34
  inputs_uri: str | None = None
24
35
  run_output_base: str | None = None
25
36
  realized_outputs_uri: str | None = None
26
37
  err: execution_pb2.ExecutionError | None = None
27
- phase: run_definition_pb2.Phase | None = None
38
+ phase: phase_pb2.ActionPhase | None = None
28
39
  started: bool = False
29
40
  retries: int = 0
41
+ queue: Optional[str] = None # The queue to which this action was submitted.
30
42
  client_err: Exception | None = None # This error is set when something goes wrong in the controller.
43
+ cache_key: str | None = None # None means no caching, otherwise it is the version of the cache.
31
44
 
32
45
  @property
33
46
  def name(self) -> str:
@@ -42,10 +55,10 @@ class Action:
42
55
  if self.phase is None:
43
56
  return False
44
57
  return self.phase in [
45
- run_definition_pb2.Phase.PHASE_FAILED,
46
- run_definition_pb2.Phase.PHASE_SUCCEEDED,
47
- run_definition_pb2.Phase.PHASE_ABORTED,
48
- run_definition_pb2.Phase.PHASE_TIMED_OUT,
58
+ phase_pb2.ACTION_PHASE_FAILED,
59
+ phase_pb2.ACTION_PHASE_SUCCEEDED,
60
+ phase_pb2.ACTION_PHASE_ABORTED,
61
+ phase_pb2.ACTION_PHASE_TIMED_OUT,
49
62
  ]
50
63
 
51
64
  def increment_retries(self):
@@ -61,7 +74,7 @@ class Action:
61
74
 
62
75
  def mark_cancelled(self):
63
76
  self.mark_started()
64
- self.phase = run_definition_pb2.Phase.PHASE_ABORTED
77
+ self.phase = phase_pb2.ACTION_PHASE_ABORTED
65
78
 
66
79
  def merge_state(self, obj: state_service_pb2.ActionUpdate):
67
80
  """
@@ -91,6 +104,8 @@ class Action:
91
104
  if not self.started:
92
105
  self.task = action.task
93
106
 
107
+ self.cache_key = action.cache_key
108
+
94
109
  def set_client_error(self, exc: Exception):
95
110
  self.client_err = exc
96
111
 
@@ -101,11 +116,13 @@ class Action:
101
116
  def from_task(
102
117
  cls,
103
118
  parent_action_name: str,
104
- sub_action_id: run_definition_pb2.ActionIdentifier,
119
+ sub_action_id: identifier_pb2.ActionIdentifier,
105
120
  group_data: GroupData | None,
106
121
  task_spec: task_definition_pb2.TaskSpec,
107
122
  inputs_uri: str,
108
123
  run_output_base: str,
124
+ cache_key: str | None = None,
125
+ queue: Optional[str] = None,
109
126
  ) -> Action:
110
127
  return cls(
111
128
  action_id=sub_action_id,
@@ -115,6 +132,8 @@ class Action:
115
132
  task=task_spec,
116
133
  inputs_uri=inputs_uri,
117
134
  run_output_base=run_output_base,
135
+ cache_key=cache_key,
136
+ queue=queue,
118
137
  )
119
138
 
120
139
  @classmethod
@@ -130,7 +149,7 @@ class Action:
130
149
  """
131
150
  from flyte._logging import logger
132
151
 
133
- logger.info(f"In Action from_state {obj.action_id} {obj.phase} {obj.output_uri}")
152
+ logger.debug(f"In Action from_state {obj.action_id} {obj.phase} {obj.output_uri}")
134
153
  return cls(
135
154
  action_id=obj.action_id,
136
155
  parent_action_name=parent_action_name,
@@ -139,3 +158,54 @@ class Action:
139
158
  err=obj.error if obj.HasField("error") else None,
140
159
  realized_outputs_uri=obj.output_uri,
141
160
  )
161
+
162
+ @classmethod
163
+ def from_trace(
164
+ cls,
165
+ parent_action_name: str,
166
+ action_id: identifier_pb2.ActionIdentifier,
167
+ friendly_name: str,
168
+ group_data: GroupData | None,
169
+ inputs_uri: str,
170
+ outputs_uri: str,
171
+ start_time: float, # Unix timestamp in seconds with fractional seconds
172
+ end_time: float, # Unix timestamp in seconds with fractional seconds
173
+ run_output_base: str,
174
+ report_uri: str | None = None,
175
+ typed_interface: interface_pb2.TypedInterface | None = None,
176
+ ) -> Action:
177
+ """
178
+ This creates a new action for tracing purposes. It is used to track the execution of a trace.
179
+ """
180
+ st = timestamp_pb2.Timestamp()
181
+ st.FromSeconds(int(start_time))
182
+ st.nanos = int((start_time % 1) * 1e9)
183
+
184
+ et = timestamp_pb2.Timestamp()
185
+ et.FromSeconds(int(end_time))
186
+ et.nanos = int((end_time % 1) * 1e9)
187
+
188
+ spec = task_definition_pb2.TraceSpec(interface=typed_interface) if typed_interface else None
189
+
190
+ return cls(
191
+ action_id=action_id,
192
+ parent_action_name=parent_action_name,
193
+ type="trace",
194
+ friendly_name=friendly_name,
195
+ group=group_data,
196
+ inputs_uri=inputs_uri,
197
+ realized_outputs_uri=outputs_uri,
198
+ phase=phase_pb2.ACTION_PHASE_SUCCEEDED,
199
+ run_output_base=run_output_base,
200
+ trace=run_definition_pb2.TraceAction(
201
+ name=friendly_name,
202
+ phase=phase_pb2.ACTION_PHASE_SUCCEEDED,
203
+ start_time=st,
204
+ end_time=et,
205
+ outputs=common_pb2.OutputReferences(
206
+ output_uri=outputs_uri,
207
+ report_uri=report_uri,
208
+ ),
209
+ spec=spec,
210
+ ),
211
+ )
@@ -1,8 +1,8 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import grpc.aio
4
+ from flyteidl2.workflow import queue_service_pb2_grpc, state_service_pb2_grpc
4
5
 
5
- from flyte._protos.workflow import queue_service_pb2_grpc, state_service_pb2_grpc
6
6
  from flyte.remote import create_channel
7
7
 
8
8
  from ._service_protocol import QueueService, StateService
@@ -20,7 +20,11 @@ class ControllerClient:
20
20
 
21
21
  @classmethod
22
22
  async def for_endpoint(cls, endpoint: str, insecure: bool = False, **kwargs) -> ControllerClient:
23
- return cls(await create_channel(endpoint, insecure=insecure, **kwargs))
23
+ return cls(await create_channel(endpoint, None, insecure=insecure, **kwargs))
24
+
25
+ @classmethod
26
+ async def for_api_key(cls, api_key: str, insecure: bool = False, **kwargs) -> ControllerClient:
27
+ return cls(await create_channel(None, api_key, insecure=insecure, **kwargs))
24
28
 
25
29
  @property
26
30
  def state_service(self) -> StateService: