subako 0.1.0__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.
subako/__init__.py ADDED
@@ -0,0 +1,468 @@
1
+ from subako._client import SubakoClient
2
+ from subako._core import Archive, RequestOptions, ResourceId, TokenSource
3
+ from subako._errors import (
4
+ ClientOutdatedError,
5
+ ConflictError,
6
+ ForbiddenError,
7
+ InternalError,
8
+ InvalidRequestError,
9
+ NotFoundError,
10
+ PreconditionFailedError,
11
+ SubakoConnectionError,
12
+ SubakoError,
13
+ SubakoTimeoutError,
14
+ TooManyRequestsError,
15
+ UnauthorizedError,
16
+ )
17
+ from subako._events import (
18
+ ApprovalState,
19
+ ToolCallResult,
20
+ TranscriptFold,
21
+ TranscriptMessage,
22
+ TranscriptToolCall,
23
+ is_running,
24
+ pending_approvals,
25
+ transcript,
26
+ )
27
+ from subako._pagination import Page
28
+ from subako._session import ConnectionStatus, SessionConnection
29
+ from subako._tool_client import Lifetime, Tool, ToolAnswer, ToolCall, ToolClient, ToolClientStatus
30
+ from subako._version import VERSION
31
+
32
+ # generated-exports: begin
33
+ from subako.generated.models import (
34
+ ActorBody,
35
+ AddCredentialBody,
36
+ AddWorkspaceMemberBody,
37
+ AgentBody,
38
+ AgentConfigBody,
39
+ AgentSecurityBody,
40
+ AgentVersionBody,
41
+ AllowApprovalDecisionForm,
42
+ AnthropicModelBody,
43
+ AnthropicModelConfig,
44
+ AnthropicModelUsage,
45
+ AnthropicThinkingBody,
46
+ AnthropicUsageBody,
47
+ ApiKeyBody,
48
+ ApiKeyReceiptBody,
49
+ ApiKeySessionCreator,
50
+ ApprovalDecisionBody,
51
+ ApprovalDecisionForm,
52
+ ApprovalRequestedEvent,
53
+ ApprovalResolvedEvent,
54
+ AuthSchemeBody,
55
+ ByokModelProvider,
56
+ CancelOutcomeBody,
57
+ ChangeMemberRoleBody,
58
+ ChangeWorkspaceMemberRoleBody,
59
+ ClientCallFailureBody,
60
+ ClientCallResultBody,
61
+ ClientLeaveReasonBody,
62
+ ClientLeftEvent,
63
+ ClientLifetime,
64
+ ClientLifetimeBody,
65
+ ClientLifetimeForm,
66
+ ClientPingBody,
67
+ ClientRegisteredEvent,
68
+ ClientToolAckedEvent,
69
+ ClientToolBody,
70
+ ClientToolDispatchedEvent,
71
+ ClientToolFailedEvent,
72
+ ClientToolsUpdatedEvent,
73
+ ContentBlock,
74
+ ContentBlockBody,
75
+ CreateAgentBody,
76
+ CreatedSessionBody,
77
+ CreatedSessionReceiptBody,
78
+ CreateInvitationBody,
79
+ CreateSessionBody,
80
+ CreateVaultBody,
81
+ CreateWorkspaceBody,
82
+ CreateWorkspaceModelProviderBody,
83
+ CredentialBody,
84
+ CredentialCreated,
85
+ CredentialPayload,
86
+ CredentialPayloadBody,
87
+ CreditLotBody,
88
+ CreditsBody,
89
+ CreditSourceBody,
90
+ CustomEvent,
91
+ DenyApprovalDecisionForm,
92
+ ErrorBody,
93
+ ErrorCode,
94
+ ErrorDetail,
95
+ ErrorEvent,
96
+ HarnessRuntimeUsageResource,
97
+ InputSourceBody,
98
+ InvitationBody,
99
+ KeyPermissionSchema,
100
+ LatestVersionPin,
101
+ ListAgentsQuery,
102
+ ListAgentVersionsQuery,
103
+ ListApiKeysQuery,
104
+ ListCredentialsQuery,
105
+ ListInvitationsQuery,
106
+ ListMembersQuery,
107
+ ListModelProvidersQuery,
108
+ ListSessionEventsQuery,
109
+ ListSessionsQuery,
110
+ ListSkillsQuery,
111
+ ListSkillVersionsQuery,
112
+ ListUsageQuery,
113
+ ListVaultsQuery,
114
+ ListWorkspaceMembersQuery,
115
+ ListWorkspacesQuery,
116
+ ListWorkspaceUsageQuery,
117
+ LlmTokensUsageResource,
118
+ McpGrantBody,
119
+ MeBody,
120
+ MemberRemovedBody,
121
+ MeOrgBody,
122
+ MessageAssistantEvent,
123
+ MessageBody,
124
+ MessageUserEvent,
125
+ MeUserBody,
126
+ MintApiKeyBody,
127
+ MintedApiKeyBody,
128
+ ModelConfig,
129
+ ModelConfigBody,
130
+ ModelProvider,
131
+ ModelProviderBody,
132
+ ModelProviderDetailsBody,
133
+ ModelProviderFormatBody,
134
+ ModelProviderOwnerBody,
135
+ ModelUsage,
136
+ ModelUsageBody,
137
+ NeverClientLifetime,
138
+ NeverClientLifetimeForm,
139
+ OauthCredentialPayload,
140
+ OpenaiResponsesModelBody,
141
+ OpenaiResponsesModelConfig,
142
+ OpenaiResponsesModelUsage,
143
+ OpenaiResponsesUsageBody,
144
+ OrderParam,
145
+ OrganizationBody,
146
+ OrgMemberBody,
147
+ OrgRoleBody,
148
+ OrphanedApiKeyBody,
149
+ PageOutAgentBody,
150
+ PageOutAgentVersionBody,
151
+ PageOutApiKeyBody,
152
+ PageOutCredentialBody,
153
+ PageOutInvitationBody,
154
+ PageOutModelProviderBody,
155
+ PageOutOrgMemberBody,
156
+ PageOutSessionBody,
157
+ PageOutSkillBody,
158
+ PageOutSkillVersionBody,
159
+ PageOutUsageEventBody,
160
+ PageOutVaultBody,
161
+ PageOutWorkspaceBody,
162
+ PageOutWorkspaceMemberBody,
163
+ PinnedVersionPin,
164
+ PlatformModelBody,
165
+ PlatformModelProvider,
166
+ PolicyActionBody,
167
+ PostSessionEventBody,
168
+ PublishAgentVersionBody,
169
+ PutAgentSecurityBody,
170
+ ReasoningEffortBody,
171
+ RefreshBlockBody,
172
+ RegisterClientBody,
173
+ RegisteredClientBody,
174
+ RenameAgentBody,
175
+ RenameOrganizationBody,
176
+ RenameSkillBody,
177
+ RenameWorkspaceBody,
178
+ RoleBody,
179
+ RunCancelledEvent,
180
+ RunCompletedEvent,
181
+ RunFailedEvent,
182
+ RunQueuedEvent,
183
+ RunStartedEvent,
184
+ SessionBody,
185
+ SessionCreatedEvent,
186
+ SessionCreator,
187
+ SessionCreatorBody,
188
+ SessionEvent,
189
+ SessionEventBody,
190
+ SessionEventPageOut,
191
+ SessionStatusBody,
192
+ SessionTokenBody,
193
+ SessionTokenReceiptBody,
194
+ SkillBody,
195
+ SkillGrantBody,
196
+ SkillVersionBody,
197
+ StaticBearerCredentialPayload,
198
+ StreamSessionEventsQuery,
199
+ SubmitKindBody,
200
+ SubmitOutcomeBody,
201
+ TextContentBlock,
202
+ TextContentBlockData,
203
+ ThinkingContentBlock,
204
+ ThinkingContentBlockData,
205
+ ToolCallContentBlock,
206
+ ToolCallContentBlockData,
207
+ ToolCallEvent,
208
+ ToolDescriptorBody,
209
+ ToolResultEvent,
210
+ ToolRuleBody,
211
+ TtlClientLifetime,
212
+ TtlClientLifetimeData,
213
+ TtlClientLifetimeForm,
214
+ TtlClientLifetimeFormData,
215
+ UpdateClientToolsBody,
216
+ UpdateModelProviderBody,
217
+ UpdateVaultBody,
218
+ UsageEventBody,
219
+ UsageResource,
220
+ UsageResourceBody,
221
+ UserSessionCreator,
222
+ VaultBody,
223
+ VaultCreated,
224
+ VersionPin,
225
+ VersionPinBody,
226
+ WorkspaceBody,
227
+ WorkspaceMemberBody,
228
+ WorkspaceRoleBody,
229
+ )
230
+
231
+ # generated-exports: end
232
+
233
+ __all__ = [
234
+ "VERSION",
235
+ "ApprovalState",
236
+ "Archive",
237
+ "ClientOutdatedError",
238
+ "ConflictError",
239
+ "ConnectionStatus",
240
+ "ForbiddenError",
241
+ "InternalError",
242
+ "InvalidRequestError",
243
+ "Lifetime",
244
+ "NotFoundError",
245
+ "Page",
246
+ "PreconditionFailedError",
247
+ "RequestOptions",
248
+ "ResourceId",
249
+ "SessionConnection",
250
+ "SubakoClient",
251
+ "SubakoConnectionError",
252
+ "SubakoError",
253
+ "SubakoTimeoutError",
254
+ "TokenSource",
255
+ "TooManyRequestsError",
256
+ "Tool",
257
+ "ToolAnswer",
258
+ "ToolCall",
259
+ "ToolCallResult",
260
+ "ToolClient",
261
+ "ToolClientStatus",
262
+ "TranscriptFold",
263
+ "TranscriptMessage",
264
+ "TranscriptToolCall",
265
+ "UnauthorizedError",
266
+ "is_running",
267
+ "pending_approvals",
268
+ "transcript",
269
+ ]
270
+ # generated-exports-all: begin
271
+ __all__ += [
272
+ "ActorBody",
273
+ "AddCredentialBody",
274
+ "AddWorkspaceMemberBody",
275
+ "AgentBody",
276
+ "AgentConfigBody",
277
+ "AgentSecurityBody",
278
+ "AgentVersionBody",
279
+ "AllowApprovalDecisionForm",
280
+ "AnthropicModelBody",
281
+ "AnthropicModelConfig",
282
+ "AnthropicModelUsage",
283
+ "AnthropicThinkingBody",
284
+ "AnthropicUsageBody",
285
+ "ApiKeyBody",
286
+ "ApiKeyReceiptBody",
287
+ "ApiKeySessionCreator",
288
+ "ApprovalDecisionBody",
289
+ "ApprovalDecisionForm",
290
+ "ApprovalRequestedEvent",
291
+ "ApprovalResolvedEvent",
292
+ "AuthSchemeBody",
293
+ "ByokModelProvider",
294
+ "CancelOutcomeBody",
295
+ "ChangeMemberRoleBody",
296
+ "ChangeWorkspaceMemberRoleBody",
297
+ "ClientCallFailureBody",
298
+ "ClientCallResultBody",
299
+ "ClientLeaveReasonBody",
300
+ "ClientLeftEvent",
301
+ "ClientLifetime",
302
+ "ClientLifetimeBody",
303
+ "ClientLifetimeForm",
304
+ "ClientPingBody",
305
+ "ClientRegisteredEvent",
306
+ "ClientToolAckedEvent",
307
+ "ClientToolBody",
308
+ "ClientToolDispatchedEvent",
309
+ "ClientToolFailedEvent",
310
+ "ClientToolsUpdatedEvent",
311
+ "ContentBlock",
312
+ "ContentBlockBody",
313
+ "CreateAgentBody",
314
+ "CreateInvitationBody",
315
+ "CreateSessionBody",
316
+ "CreateVaultBody",
317
+ "CreateWorkspaceBody",
318
+ "CreateWorkspaceModelProviderBody",
319
+ "CreatedSessionBody",
320
+ "CreatedSessionReceiptBody",
321
+ "CredentialBody",
322
+ "CredentialCreated",
323
+ "CredentialPayload",
324
+ "CredentialPayloadBody",
325
+ "CreditLotBody",
326
+ "CreditSourceBody",
327
+ "CreditsBody",
328
+ "CustomEvent",
329
+ "DenyApprovalDecisionForm",
330
+ "ErrorBody",
331
+ "ErrorCode",
332
+ "ErrorDetail",
333
+ "ErrorEvent",
334
+ "HarnessRuntimeUsageResource",
335
+ "InputSourceBody",
336
+ "InvitationBody",
337
+ "KeyPermissionSchema",
338
+ "LatestVersionPin",
339
+ "ListAgentVersionsQuery",
340
+ "ListAgentsQuery",
341
+ "ListApiKeysQuery",
342
+ "ListCredentialsQuery",
343
+ "ListInvitationsQuery",
344
+ "ListMembersQuery",
345
+ "ListModelProvidersQuery",
346
+ "ListSessionEventsQuery",
347
+ "ListSessionsQuery",
348
+ "ListSkillVersionsQuery",
349
+ "ListSkillsQuery",
350
+ "ListUsageQuery",
351
+ "ListVaultsQuery",
352
+ "ListWorkspaceMembersQuery",
353
+ "ListWorkspaceUsageQuery",
354
+ "ListWorkspacesQuery",
355
+ "LlmTokensUsageResource",
356
+ "McpGrantBody",
357
+ "MeBody",
358
+ "MeOrgBody",
359
+ "MeUserBody",
360
+ "MemberRemovedBody",
361
+ "MessageAssistantEvent",
362
+ "MessageBody",
363
+ "MessageUserEvent",
364
+ "MintApiKeyBody",
365
+ "MintedApiKeyBody",
366
+ "ModelConfig",
367
+ "ModelConfigBody",
368
+ "ModelProvider",
369
+ "ModelProviderBody",
370
+ "ModelProviderDetailsBody",
371
+ "ModelProviderFormatBody",
372
+ "ModelProviderOwnerBody",
373
+ "ModelUsage",
374
+ "ModelUsageBody",
375
+ "NeverClientLifetime",
376
+ "NeverClientLifetimeForm",
377
+ "OauthCredentialPayload",
378
+ "OpenaiResponsesModelBody",
379
+ "OpenaiResponsesModelConfig",
380
+ "OpenaiResponsesModelUsage",
381
+ "OpenaiResponsesUsageBody",
382
+ "OrderParam",
383
+ "OrgMemberBody",
384
+ "OrgRoleBody",
385
+ "OrganizationBody",
386
+ "OrphanedApiKeyBody",
387
+ "PageOutAgentBody",
388
+ "PageOutAgentVersionBody",
389
+ "PageOutApiKeyBody",
390
+ "PageOutCredentialBody",
391
+ "PageOutInvitationBody",
392
+ "PageOutModelProviderBody",
393
+ "PageOutOrgMemberBody",
394
+ "PageOutSessionBody",
395
+ "PageOutSkillBody",
396
+ "PageOutSkillVersionBody",
397
+ "PageOutUsageEventBody",
398
+ "PageOutVaultBody",
399
+ "PageOutWorkspaceBody",
400
+ "PageOutWorkspaceMemberBody",
401
+ "PinnedVersionPin",
402
+ "PlatformModelBody",
403
+ "PlatformModelProvider",
404
+ "PolicyActionBody",
405
+ "PostSessionEventBody",
406
+ "PublishAgentVersionBody",
407
+ "PutAgentSecurityBody",
408
+ "ReasoningEffortBody",
409
+ "RefreshBlockBody",
410
+ "RegisterClientBody",
411
+ "RegisteredClientBody",
412
+ "RenameAgentBody",
413
+ "RenameOrganizationBody",
414
+ "RenameSkillBody",
415
+ "RenameWorkspaceBody",
416
+ "RoleBody",
417
+ "RunCancelledEvent",
418
+ "RunCompletedEvent",
419
+ "RunFailedEvent",
420
+ "RunQueuedEvent",
421
+ "RunStartedEvent",
422
+ "SessionBody",
423
+ "SessionCreatedEvent",
424
+ "SessionCreator",
425
+ "SessionCreatorBody",
426
+ "SessionEvent",
427
+ "SessionEventBody",
428
+ "SessionEventPageOut",
429
+ "SessionStatusBody",
430
+ "SessionTokenBody",
431
+ "SessionTokenReceiptBody",
432
+ "SkillBody",
433
+ "SkillGrantBody",
434
+ "SkillVersionBody",
435
+ "StaticBearerCredentialPayload",
436
+ "StreamSessionEventsQuery",
437
+ "SubmitKindBody",
438
+ "SubmitOutcomeBody",
439
+ "TextContentBlock",
440
+ "TextContentBlockData",
441
+ "ThinkingContentBlock",
442
+ "ThinkingContentBlockData",
443
+ "ToolCallContentBlock",
444
+ "ToolCallContentBlockData",
445
+ "ToolCallEvent",
446
+ "ToolDescriptorBody",
447
+ "ToolResultEvent",
448
+ "ToolRuleBody",
449
+ "TtlClientLifetime",
450
+ "TtlClientLifetimeData",
451
+ "TtlClientLifetimeForm",
452
+ "TtlClientLifetimeFormData",
453
+ "UpdateClientToolsBody",
454
+ "UpdateModelProviderBody",
455
+ "UpdateVaultBody",
456
+ "UsageEventBody",
457
+ "UsageResource",
458
+ "UsageResourceBody",
459
+ "UserSessionCreator",
460
+ "VaultBody",
461
+ "VaultCreated",
462
+ "VersionPin",
463
+ "VersionPinBody",
464
+ "WorkspaceBody",
465
+ "WorkspaceMemberBody",
466
+ "WorkspaceRoleBody",
467
+ ]
468
+ # generated-exports-all: end
subako/_client.py ADDED
@@ -0,0 +1,82 @@
1
+ import asyncio
2
+ from collections.abc import Mapping
3
+ from types import TracebackType
4
+ from typing import Self
5
+
6
+ import httpx
7
+
8
+ from subako._core import DEFAULT_MAX_RETRIES, DEFAULT_TIMEOUT, Core, Sleep, TokenSource
9
+ from subako.resources.agents import Agents
10
+ from subako.resources.api_keys import ApiKeys
11
+ from subako.resources.me import Me
12
+ from subako.resources.model_providers import ModelProviders
13
+ from subako.resources.organization import Organization
14
+ from subako.resources.sessions import Sessions
15
+ from subako.resources.skills import Skills
16
+ from subako.resources.vaults import Vaults
17
+ from subako.resources.workspaces import Workspaces
18
+
19
+
20
+ def _credential(api_key: TokenSource | None, access_token: TokenSource | None) -> TokenSource:
21
+ match [source for source in (api_key, access_token) if source is not None]:
22
+ case [""]:
23
+ raise TypeError("the credential given to SubakoClient is empty")
24
+ case [source]:
25
+ return source
26
+ case _:
27
+ raise TypeError("SubakoClient takes exactly one of api_key or access_token")
28
+
29
+
30
+ class SubakoClient:
31
+ """One instance per credential and workspace; the resources on it share one token cache and one HTTP client."""
32
+
33
+ def __init__(
34
+ self,
35
+ *,
36
+ base_url: str,
37
+ api_key: TokenSource | None = None,
38
+ access_token: TokenSource | None = None,
39
+ workspace_id: str | None = None,
40
+ timeout: float = DEFAULT_TIMEOUT,
41
+ max_retries: int = DEFAULT_MAX_RETRIES,
42
+ headers: Mapping[str, str] | None = None,
43
+ http_client: httpx.AsyncClient | None = None,
44
+ sleep: Sleep = asyncio.sleep,
45
+ ) -> None:
46
+ if base_url == "":
47
+ raise TypeError("SubakoClient takes a base_url, e.g. https://api.kikuvi.com")
48
+ credential = _credential(api_key, access_token)
49
+ self._owns_http = http_client is None
50
+ self._http = httpx.AsyncClient() if http_client is None else http_client
51
+ core = Core(
52
+ http=self._http,
53
+ base_url=base_url,
54
+ credential=credential,
55
+ workspace_id=workspace_id,
56
+ timeout=timeout,
57
+ max_retries=max_retries,
58
+ headers=headers,
59
+ sleep=sleep,
60
+ )
61
+ self.agents = Agents(core)
62
+ self.api_keys = ApiKeys(core)
63
+ self.me = Me(core)
64
+ self.model_providers = ModelProviders(core)
65
+ self.organization = Organization(core)
66
+ self.sessions = Sessions(core)
67
+ self.skills = Skills(core)
68
+ self.vaults = Vaults(core)
69
+ self.workspaces = Workspaces(core)
70
+
71
+ async def aclose(self) -> None:
72
+ """Close the HTTP client this instance created; one that was passed in stays open."""
73
+ if self._owns_http:
74
+ await self._http.aclose()
75
+
76
+ async def __aenter__(self) -> Self:
77
+ return self
78
+
79
+ async def __aexit__(
80
+ self, exc_type: type[BaseException] | None, exc: BaseException | None, traceback: TracebackType | None
81
+ ) -> None:
82
+ await self.aclose()