@tidblink/server 0.0.0-stage → 0.3.0-rc.0

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 (83) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +993 -2
  3. package/dist/audio.d.ts +63 -0
  4. package/dist/audio.d.ts.map +1 -0
  5. package/dist/audio.js +163 -0
  6. package/dist/audio.js.map +1 -0
  7. package/dist/client-tools.d.ts +46 -0
  8. package/dist/client-tools.d.ts.map +1 -0
  9. package/dist/client-tools.js +114 -0
  10. package/dist/client-tools.js.map +1 -0
  11. package/dist/control.d.ts +17 -0
  12. package/dist/control.d.ts.map +1 -0
  13. package/dist/control.js +52 -0
  14. package/dist/control.js.map +1 -0
  15. package/dist/errors.d.ts +80 -0
  16. package/dist/errors.d.ts.map +1 -0
  17. package/dist/errors.js +87 -0
  18. package/dist/errors.js.map +1 -0
  19. package/dist/files.d.ts +129 -0
  20. package/dist/files.d.ts.map +1 -0
  21. package/dist/files.js +388 -0
  22. package/dist/files.js.map +1 -0
  23. package/dist/history.d.ts +242 -0
  24. package/dist/history.d.ts.map +1 -0
  25. package/dist/history.js +91 -0
  26. package/dist/history.js.map +1 -0
  27. package/dist/http.d.ts +64 -0
  28. package/dist/http.d.ts.map +1 -0
  29. package/dist/http.js +282 -0
  30. package/dist/http.js.map +1 -0
  31. package/dist/index.d.ts +26 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +12 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/organization.d.ts +70 -0
  36. package/dist/organization.d.ts.map +1 -0
  37. package/dist/organization.js +118 -0
  38. package/dist/organization.js.map +1 -0
  39. package/dist/progress.d.ts +34 -0
  40. package/dist/progress.d.ts.map +1 -0
  41. package/dist/progress.js +154 -0
  42. package/dist/progress.js.map +1 -0
  43. package/dist/realtime.d.ts +91 -0
  44. package/dist/realtime.d.ts.map +1 -0
  45. package/dist/realtime.js +112 -0
  46. package/dist/realtime.js.map +1 -0
  47. package/dist/schedulers.d.ts +129 -0
  48. package/dist/schedulers.d.ts.map +1 -0
  49. package/dist/schedulers.js +91 -0
  50. package/dist/schedulers.js.map +1 -0
  51. package/dist/session.d.ts +136 -0
  52. package/dist/session.d.ts.map +1 -0
  53. package/dist/session.js +226 -0
  54. package/dist/session.js.map +1 -0
  55. package/dist/sse.d.ts +7 -0
  56. package/dist/sse.d.ts.map +1 -0
  57. package/dist/sse.js +45 -0
  58. package/dist/sse.js.map +1 -0
  59. package/dist/turn.d.ts +43 -0
  60. package/dist/turn.d.ts.map +1 -0
  61. package/dist/turn.js +206 -0
  62. package/dist/turn.js.map +1 -0
  63. package/dist/usage.d.ts +462 -0
  64. package/dist/usage.d.ts.map +1 -0
  65. package/dist/usage.js +20 -0
  66. package/dist/usage.js.map +1 -0
  67. package/dist/user.d.ts +96 -0
  68. package/dist/user.d.ts.map +1 -0
  69. package/dist/user.js +139 -0
  70. package/dist/user.js.map +1 -0
  71. package/examples/answer-client-tool.mjs +69 -0
  72. package/examples/control-turn.mjs +48 -0
  73. package/examples/create-session.mjs +69 -0
  74. package/examples/observe-message.mjs +44 -0
  75. package/examples/organization-session.mjs +66 -0
  76. package/examples/prepare-realtime-connection.mjs +61 -0
  77. package/examples/provision-user.mjs +83 -0
  78. package/examples/read-usage.mjs +62 -0
  79. package/examples/schedule-task.mjs +67 -0
  80. package/examples/send-message.mjs +43 -0
  81. package/examples/submit-audio.mjs +52 -0
  82. package/examples/upload-file.mjs +53 -0
  83. package/package.json +65 -4
package/dist/turn.js ADDED
@@ -0,0 +1,206 @@
1
+ import { OutcomeUnknownError, TiDBLinkApiError, TiDBLinkError, TurnFailedError, TurnInterruptedError, TurnWaitTimeoutError, InputNotAppliedError, } from "./errors.js";
2
+ import { HttpClient, sleep, requireCreationKey, requireKnownKeys, } from "./http.js";
3
+ import { getInteraction, getTurn, requireInteraction, } from "./history.js";
4
+ export const validClarification = (value) => {
5
+ if (typeof value !== "object" || value === null || Array.isArray(value))
6
+ return false;
7
+ const item = value;
8
+ const strings = (items, min, max) => Array.isArray(items) &&
9
+ items.length >= min &&
10
+ items.length <= max &&
11
+ items.every((text) => typeof text === "string" && text.length > 0);
12
+ if (typeof item.prompt !== "string" ||
13
+ !item.prompt ||
14
+ (item.selectionMode !== "single" && item.selectionMode !== "multiple") ||
15
+ !strings(item.answerChoices, 2, item.selectionMode === "single" ? 3 : 8))
16
+ return false;
17
+ if (item.response === undefined)
18
+ return true;
19
+ if (typeof item.response !== "object" ||
20
+ item.response === null ||
21
+ Array.isArray(item.response))
22
+ return false;
23
+ const response = item.response;
24
+ return (Object.keys(response).sort().join(",") === "answers,responseTurnId" &&
25
+ typeof response.responseTurnId === "string" &&
26
+ response.responseTurnId.length > 0 &&
27
+ strings(response.answers, 1, item.selectionMode === "single" ? 1 : 9));
28
+ };
29
+ export const submitMessage = async (http, sessionId, input) => {
30
+ requireKnownKeys(input, [
31
+ "clientEventId",
32
+ "text",
33
+ "userFileIds",
34
+ "clarificationSourceTurnId",
35
+ "billingTag",
36
+ "requestId",
37
+ "signal",
38
+ ], "Message input");
39
+ requireCreationKey(input.clientEventId);
40
+ const { clientEventId, requestId, signal, ...data } = input;
41
+ const texts = typeof data.text === "string" ? [data.text] : data.text;
42
+ if (!Array.isArray(texts) ||
43
+ texts.length < 1 ||
44
+ texts.length > 9 ||
45
+ texts.some((t) => typeof t !== "string" || !t))
46
+ throw new TypeError("text must contain 1-9 non-empty values");
47
+ if (data.userFileIds !== undefined &&
48
+ (!Array.isArray(data.userFileIds) ||
49
+ data.userFileIds.length > 20 ||
50
+ data.userFileIds.some((id) => typeof id !== "string" || !id || id.length > 64)))
51
+ throw new TypeError("userFileIds must contain at most 20 non-empty IDs");
52
+ if (data.clarificationSourceTurnId !== undefined &&
53
+ (typeof data.clarificationSourceTurnId !== "string" ||
54
+ !data.clarificationSourceTurnId ||
55
+ data.clarificationSourceTurnId.length > 64))
56
+ throw new TypeError("clarificationSourceTurnId must contain 1-64 characters");
57
+ signal?.throwIfAborted();
58
+ try {
59
+ const result = await http.postResponse(`/api/v1/user/sessions/${encodeURIComponent(sessionId)}/events`, { type: "agent.session.input.message", clientEventId, data }, {
60
+ ...(requestId ? { requestId } : {}),
61
+ ...(signal ? { signal } : {}),
62
+ outcomeUnknown: true,
63
+ });
64
+ try {
65
+ const receipt = requireInteraction(result.data?.interaction, clientEventId, result.requestId);
66
+ if (receipt.kind !== "message" ||
67
+ !receipt.message ||
68
+ receipt.message.role !== "user")
69
+ throw new TiDBLinkError("Message submission returned a different command receipt");
70
+ return receipt;
71
+ }
72
+ catch (cause) {
73
+ throw new OutcomeUnknownError("Message submission returned no usable receipt; query the original input", { requestId: result.requestId, cause });
74
+ }
75
+ }
76
+ catch (cause) {
77
+ if (!(cause instanceof OutcomeUnknownError))
78
+ throw cause;
79
+ throw new OutcomeUnknownError(cause.message, {
80
+ sessionId,
81
+ inputId: clientEventId,
82
+ ...(cause.requestId ? { requestId: cause.requestId } : {}),
83
+ cause,
84
+ });
85
+ }
86
+ };
87
+ export const validateWaitOptions = (options = {}) => {
88
+ requireKnownKeys(options, ["timeoutMs", "pollIntervalMs", "requestId", "signal"], "Wait options");
89
+ const timeoutMs = options.timeoutMs ?? 60_000;
90
+ const pollIntervalMs = options.pollIntervalMs ?? 250;
91
+ if (!Number.isSafeInteger(timeoutMs) ||
92
+ timeoutMs < 0 ||
93
+ timeoutMs > 2_147_483_647)
94
+ throw new TypeError("timeoutMs must be an integer between 0 and 2147483647");
95
+ if (!Number.isSafeInteger(pollIntervalMs) ||
96
+ pollIntervalMs < 1 ||
97
+ pollIntervalMs > 2_147_483_647)
98
+ throw new TypeError("pollIntervalMs must be an integer between 1 and 2147483647");
99
+ return { timeoutMs, pollIntervalMs };
100
+ };
101
+ export const waitForResult = async (http, sessionId, inputId, options = {}) => {
102
+ const { timeoutMs, pollIntervalMs } = validateWaitOptions(options);
103
+ requireCreationKey(inputId);
104
+ const deadline = new AbortController();
105
+ const timer = setTimeout(() => deadline.abort(), timeoutMs);
106
+ const signal = options.signal
107
+ ? AbortSignal.any([options.signal, deadline.signal])
108
+ : deadline.signal;
109
+ let turnId;
110
+ try {
111
+ while (true) {
112
+ signal.throwIfAborted();
113
+ const interaction = await getInteraction(http, sessionId, inputId, {
114
+ signal,
115
+ ...(options.requestId ? { requestId: options.requestId } : {}),
116
+ });
117
+ turnId = interaction.turnId;
118
+ if ((interaction.kind !== "message" && interaction.kind !== "retry") ||
119
+ (interaction.kind === "message" &&
120
+ (!interaction.message || interaction.message.role !== "user")) ||
121
+ (interaction.kind === "retry" && interaction.message !== null))
122
+ throw new TiDBLinkError("Waiting for a result requires a message or checkpoint retry receipt");
123
+ if (interaction.rejection || interaction.mode === "rejected")
124
+ throw new InputNotAppliedError(sessionId, inputId, turnId);
125
+ if (interaction.result.status !== "running" &&
126
+ !interaction.result.completedAt)
127
+ throw new TiDBLinkError("Original terminal receipt omitted its completion time");
128
+ if (interaction.result.status === "failed")
129
+ throw new TurnFailedError({
130
+ code: "turn_failed",
131
+ message: "The original Turn execution failed",
132
+ turnId,
133
+ sessionId,
134
+ inputId,
135
+ });
136
+ if (interaction.result.status === "interrupted")
137
+ throw new TurnInterruptedError(turnId, undefined, sessionId, inputId);
138
+ if (interaction.result.status === "succeeded") {
139
+ if (interaction.kind === "message" && !interaction.appliedAt)
140
+ throw new InputNotAppliedError(sessionId, inputId, turnId);
141
+ const turn = await getTurn(http, sessionId, turnId, {
142
+ signal,
143
+ ...(options.requestId ? { requestId: options.requestId } : {}),
144
+ });
145
+ const message = turn.assistantMessage;
146
+ if (turn.executor === "realtime_model" ||
147
+ turn.status !== "succeeded" ||
148
+ !interaction.result.completedAt ||
149
+ turn.completedAt !== interaction.result.completedAt ||
150
+ !message ||
151
+ message.role !== "assistant" ||
152
+ typeof message.id !== "string" ||
153
+ !message.id ||
154
+ typeof message.content !== "string" ||
155
+ message.turnId !== turnId ||
156
+ message.sessionId !== sessionId ||
157
+ (turn.clarificationItem !== undefined &&
158
+ !validClarification(turn.clarificationItem)))
159
+ throw new TiDBLinkError("Saved Turn does not match the original successful execution");
160
+ const identity = {
161
+ sessionId,
162
+ inputId,
163
+ turnId,
164
+ messageId: message.id,
165
+ text: message.content,
166
+ interaction,
167
+ };
168
+ return turn.clarificationItem
169
+ ? {
170
+ ...identity,
171
+ type: "clarification",
172
+ clarification: turn.clarificationItem,
173
+ }
174
+ : { ...identity, type: "answer" };
175
+ }
176
+ await sleep(pollIntervalMs, signal);
177
+ }
178
+ }
179
+ catch (cause) {
180
+ if (cause instanceof TurnFailedError ||
181
+ cause instanceof TurnInterruptedError ||
182
+ cause instanceof InputNotAppliedError ||
183
+ cause instanceof TiDBLinkApiError)
184
+ throw cause;
185
+ const ErrorClass = deadline.signal.aborted && !options.signal?.aborted
186
+ ? TurnWaitTimeoutError
187
+ : OutcomeUnknownError;
188
+ throw new ErrorClass(ErrorClass === TurnWaitTimeoutError
189
+ ? "Local wait timed out; query or wait for the original input"
190
+ : "Local wait stopped before the original result was established", {
191
+ sessionId,
192
+ inputId,
193
+ ...(turnId ? { turnId } : {}),
194
+ ...(cause instanceof TiDBLinkError && cause.requestId
195
+ ? { requestId: cause.requestId }
196
+ : options.requestId
197
+ ? { requestId: options.requestId }
198
+ : {}),
199
+ cause,
200
+ });
201
+ }
202
+ finally {
203
+ clearTimeout(timer);
204
+ }
205
+ };
206
+ //# sourceMappingURL=turn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turn.js","sourceRoot":"","sources":["../src/turn.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,462 @@
1
+ import type { RequestOptions } from "./organization.js";
2
+ import type { BillingTag } from "./session.js";
3
+ export type BillingUsageFactKind = "llm" | "sandbox" | "web_search";
4
+ export type BillingCostBearer = "platform" | "customer" | "unknown";
5
+ export type BillingPrincipalBucket = "human" | "user_api_key" | "organization_machine" | "organization_user";
6
+ export type BillingAttributionKind = "agent" | "user_level" | "system" | "unattributed";
7
+ export type BillingAuthKind = "session" | "user-api-key" | "organization-api-key" | "system";
8
+ export type BillingLlmRequestPurpose = "agent_turn" | "compaction" | "auto_title" | "manual_title" | "asr" | "voice_realtime";
9
+ export type LlmPricingStatus = "estimated" | "unknown";
10
+ export type LlmPricingContextTier = "short" | "long" | "all_context" | "unknown";
11
+ export type SandboxUsageStatus = "running" | "closed" | "close_failed" | "abandoned";
12
+ export type BillingUsageEvidenceStatus = "complete" | "partial" | "missing" | "unsupported";
13
+ export type BillingValuationStatus = "priced" | "unpriced";
14
+ export interface BillingValuationSummary {
15
+ status: "complete" | "incomplete";
16
+ pricedUsageCount: number;
17
+ unpricedUsageCount: number;
18
+ pricedCostMicros: number;
19
+ }
20
+ export interface BillingValuationBreakdown extends BillingValuationSummary {
21
+ byKind: Partial<Record<BillingUsageFactKind, BillingValuationSummary>>;
22
+ }
23
+ export interface BillingFactCompletenessCounters {
24
+ status: "complete" | "incomplete";
25
+ projectedFactCount: number;
26
+ pendingIntentCount: number;
27
+ indeterminateIntentCount: number;
28
+ failedIntentCount: number;
29
+ }
30
+ export interface BillingFactCompleteness extends BillingFactCompletenessCounters {
31
+ byKind: Partial<Record<BillingUsageFactKind, BillingFactCompletenessCounters>>;
32
+ }
33
+ export type UserUsageScopeLevel = "user";
34
+ export type UserUsagePeriod = "day" | "week";
35
+ export interface UserUsageScope {
36
+ level: UserUsageScopeLevel;
37
+ organizationId: string;
38
+ userId: string;
39
+ }
40
+ export interface UserUsageRange {
41
+ period: UserUsagePeriod;
42
+ from: string;
43
+ to: string;
44
+ }
45
+ export interface UsageTotals {
46
+ currency: "USD";
47
+ /** Platform-borne priced cost; other bearers remain in costByBearer. */
48
+ totalCostMicros: number;
49
+ llmCostMicros: number;
50
+ sandboxCostMicros: number;
51
+ webSearchCostMicros: number;
52
+ costByBearer: Record<BillingCostBearer, BillingBearerCostTotals>;
53
+ organizationMachineCostMicros: number;
54
+ llmRequestCount: number;
55
+ unknownLlmRequestCount: number;
56
+ sandboxUsageCount: number;
57
+ webSearchRequestCount: number;
58
+ unsettledCount: number;
59
+ inputTokens: number;
60
+ cachedInputTokens: number;
61
+ outputTokens: number;
62
+ unpricedLlmTokens: {
63
+ inputTokens: number;
64
+ cachedInputTokens: number;
65
+ outputTokens: number;
66
+ };
67
+ sandboxDurationSeconds: number;
68
+ valuation: BillingValuationBreakdown;
69
+ attribution: BillingAttributionBreakdown;
70
+ }
71
+ export interface BillingBearerCostTotals {
72
+ totalCostMicros: number;
73
+ llmCostMicros: number;
74
+ sandboxCostMicros: number;
75
+ webSearchCostMicros: number;
76
+ }
77
+ export interface BillingAttributionCounters {
78
+ status: "complete" | "incomplete";
79
+ classifiedUsageCount: number;
80
+ agentUsageCount: number;
81
+ userLevelUsageCount: number;
82
+ systemUsageCount: number;
83
+ unattributedUsageCount: number;
84
+ }
85
+ export interface BillingAttributionBreakdown extends BillingAttributionCounters {
86
+ byKind: Partial<Record<BillingUsageFactKind, BillingAttributionCounters>>;
87
+ }
88
+ export interface LlmUsageAggregate {
89
+ costBearer: BillingCostBearer;
90
+ provider: string;
91
+ model: string;
92
+ requestPurpose: BillingLlmRequestPurpose;
93
+ principalBucket: BillingPrincipalBucket;
94
+ requestCount: number;
95
+ unknownRequestCount: number;
96
+ costMicros: number;
97
+ inputTokens: number;
98
+ cachedInputTokens: number;
99
+ outputTokens: number;
100
+ valuation: BillingValuationSummary;
101
+ }
102
+ export interface UserUsageAggregate {
103
+ costBearer: BillingCostBearer;
104
+ userId: string;
105
+ displayName: string | null;
106
+ currency: "USD";
107
+ totalCostMicros: number;
108
+ llmCostMicros: number;
109
+ sandboxCostMicros: number;
110
+ webSearchCostMicros: number;
111
+ llmRequestCount: number;
112
+ unknownLlmRequestCount: number;
113
+ sandboxUsageCount: number;
114
+ webSearchRequestCount: number;
115
+ unsettledCount: number;
116
+ inputTokens: number;
117
+ cachedInputTokens: number;
118
+ outputTokens: number;
119
+ sandboxDurationSeconds: number;
120
+ valuation: BillingValuationSummary;
121
+ }
122
+ export interface SandboxUsageAggregate {
123
+ costBearer: BillingCostBearer;
124
+ provider: "e2b" | "tencent_ags" | "run9";
125
+ profileId: string;
126
+ specKey: string;
127
+ principalBucket: BillingPrincipalBucket;
128
+ usageCount: number;
129
+ settledUsageCount: number;
130
+ unsettledCount: number;
131
+ costMicros: number;
132
+ durationSeconds: number;
133
+ valuation: BillingValuationSummary;
134
+ }
135
+ export interface WebSearchUsageAggregate {
136
+ costBearer: BillingCostBearer;
137
+ provider: "exa";
138
+ searchType: "auto";
139
+ principalBucket: BillingPrincipalBucket;
140
+ requestCount: number;
141
+ requestedResultCount: number;
142
+ returnedResultCount: number;
143
+ costMicros: number;
144
+ valuation: BillingValuationSummary;
145
+ }
146
+ export interface UsageDayPoint {
147
+ date: string;
148
+ costMicros: number;
149
+ llmCostMicros: number;
150
+ sandboxCostMicros: number;
151
+ webSearchCostMicros: number;
152
+ unknownLlmRequestCount: number;
153
+ unsettledCount: number;
154
+ valuation: BillingValuationSummary;
155
+ }
156
+ export type BillingUsageSeriesInterval = "hour" | "day" | "week" | "month";
157
+ export interface BillingUsageSeriesRange {
158
+ from: string;
159
+ to: string;
160
+ interval: BillingUsageSeriesInterval;
161
+ }
162
+ interface BillingUsageSeriesBreakdownCommon {
163
+ provider: string;
164
+ costMicros: number;
165
+ truncatedCombinations?: number;
166
+ }
167
+ export interface BillingUsageSeriesLlmBreakdown extends BillingUsageSeriesBreakdownCommon {
168
+ kind: "llm";
169
+ model?: string;
170
+ usage: {
171
+ inputTokens: number;
172
+ cachedInputTokens: number;
173
+ outputTokens: number;
174
+ };
175
+ }
176
+ export interface BillingUsageSeriesSandboxBreakdown extends BillingUsageSeriesBreakdownCommon {
177
+ kind: "sandbox";
178
+ usage: {
179
+ durationSeconds: number;
180
+ usageCount: number;
181
+ };
182
+ }
183
+ export interface BillingUsageSeriesWebSearchBreakdown extends BillingUsageSeriesBreakdownCommon {
184
+ kind: "web_search";
185
+ usage: {
186
+ requestCount: number;
187
+ };
188
+ }
189
+ export type BillingUsageSeriesBreakdown = BillingUsageSeriesLlmBreakdown | BillingUsageSeriesSandboxBreakdown | BillingUsageSeriesWebSearchBreakdown;
190
+ export type BillingUsageSeriesBreakdownGroups = Record<BillingCostBearer, BillingUsageSeriesBreakdown[]>;
191
+ export interface BillingUsageSeriesPoint {
192
+ bucketStart: string;
193
+ costMicros: number;
194
+ llmCostMicros: number;
195
+ sandboxCostMicros: number;
196
+ webSearchCostMicros: number;
197
+ unknownLlmRequestCount: number;
198
+ unsettledCount: number;
199
+ breakdown: BillingUsageSeriesBreakdownGroups;
200
+ valuation: BillingValuationSummary;
201
+ }
202
+ export interface UserUsageSummary {
203
+ scope: UserUsageScope;
204
+ range: UserUsageRange;
205
+ factCompleteness: BillingFactCompleteness;
206
+ totals: UsageTotals;
207
+ users: {
208
+ aggregates: UserUsageAggregate[];
209
+ };
210
+ llm: {
211
+ aggregates: LlmUsageAggregate[];
212
+ };
213
+ sandbox: {
214
+ aggregates: SandboxUsageAggregate[];
215
+ };
216
+ webSearch: {
217
+ aggregates: WebSearchUsageAggregate[];
218
+ };
219
+ series: UsageDayPoint[];
220
+ }
221
+ export interface UserLlmUsage {
222
+ kind: "llm";
223
+ id: string;
224
+ occurredAt: string;
225
+ organizationId: string;
226
+ sessionId: string;
227
+ /** Null only for Realtime connection-scoped usage (`requestPurpose: voice_realtime`). */
228
+ turnId: string | null;
229
+ /** The Realtime connection of `voice_realtime` usage; null otherwise. */
230
+ realtimeConnectionId: string | null;
231
+ agentRunId: string | null;
232
+ agentId: string | null;
233
+ attributionKind: BillingAttributionKind;
234
+ ownerUserId: string | null;
235
+ authKind: BillingAuthKind;
236
+ principalBucket: BillingPrincipalBucket;
237
+ billingTag: BillingTag | null;
238
+ operationId: string | null;
239
+ requestPurpose: BillingLlmRequestPurpose;
240
+ provider: string;
241
+ requestModel: string;
242
+ observedResponseModel: string | null;
243
+ model: string;
244
+ providerRequestId: string | null;
245
+ inputTokens: number;
246
+ cachedInputTokens: number;
247
+ promptTokensTotal: number | null;
248
+ uncachedInputTokens: number;
249
+ cacheReadTokens: number;
250
+ cacheWrite5mTokens: number;
251
+ cacheWrite1hTokens: number;
252
+ cacheWriteUnspecifiedTokens: number;
253
+ outputTokens: number;
254
+ inputCostMicros: number | null;
255
+ cachedInputCostMicros: number | null;
256
+ cacheWrite5mCostMicros: number | null;
257
+ cacheWrite1hCostMicros: number | null;
258
+ cacheWriteUnspecifiedCostMicros: number | null;
259
+ outputCostMicros: number | null;
260
+ costMicros: number | null;
261
+ currency: "USD";
262
+ ratedAt: string;
263
+ pricingStatus: LlmPricingStatus;
264
+ unknownReason: string | null;
265
+ estimateBasis: "public_list_placeholder" | "contract" | null;
266
+ estimateLabel: string | null;
267
+ contextTier: LlmPricingContextTier;
268
+ pricingVersion: string;
269
+ rateCardDigest: string | null;
270
+ pricingSourceUrl: string | null;
271
+ pricingSourceAsOf: string | null;
272
+ pricingEffectiveAt: string;
273
+ pricingEffectiveToExclusive: string | null;
274
+ deploymentBillingJson: unknown | null;
275
+ rateSnapshotJson: unknown | null;
276
+ valuationStatus: BillingValuationStatus;
277
+ }
278
+ export interface UserSandboxUsage {
279
+ kind: "sandbox";
280
+ id: string;
281
+ occurredAt: string;
282
+ organizationId: string;
283
+ sessionId: string;
284
+ turnId: string;
285
+ agentRunId: string | null;
286
+ agentId: string | null;
287
+ attributionKind: BillingAttributionKind;
288
+ ownerUserId: string | null;
289
+ authKind: BillingAuthKind;
290
+ principalBucket: BillingPrincipalBucket;
291
+ billingTag: BillingTag | null;
292
+ provider: "e2b" | "tencent_ags" | "run9";
293
+ profileId: string;
294
+ specKey: string;
295
+ startedAt: string;
296
+ lastSeenAt: string;
297
+ endedAt: string | null;
298
+ durationSeconds: number | null;
299
+ status: SandboxUsageStatus;
300
+ closeReason: string | null;
301
+ lastError: string | null;
302
+ costMicros: number | null;
303
+ currency: "USD";
304
+ pricingVersion: string;
305
+ pricingEffectiveAt: string;
306
+ valuationStatus: BillingValuationStatus;
307
+ }
308
+ export interface UserWebSearchUsage {
309
+ kind: "web_search";
310
+ id: string;
311
+ occurredAt: string;
312
+ organizationId: string;
313
+ sessionId: string;
314
+ turnId: string;
315
+ agentRunId: string | null;
316
+ agentId: string | null;
317
+ ownerUserId: string | null;
318
+ attributionKind: BillingAttributionKind;
319
+ authKind: BillingAuthKind;
320
+ principalBucket: BillingPrincipalBucket;
321
+ billingTag: BillingTag | null;
322
+ operationId: string;
323
+ searchType: "auto";
324
+ requestCount: 1;
325
+ requestedResultCount: number;
326
+ returnedResultCount: number | null;
327
+ pricingStatus: "unpriced";
328
+ unknownReason: "no_rate_authority";
329
+ valuationStatus: "unpriced";
330
+ }
331
+ export interface UserUsageDetails {
332
+ scope: UserUsageScope;
333
+ range: UserUsageRange;
334
+ llm: UserLlmUsage[];
335
+ sandbox: UserSandboxUsage[];
336
+ webSearch: UserWebSearchUsage[];
337
+ }
338
+ export interface OrganizationUserUsageSummary {
339
+ range: BillingUsageSeriesRange;
340
+ factCompleteness: BillingFactCompleteness;
341
+ totals: UsageTotals;
342
+ llm: {
343
+ aggregates: LlmUsageAggregate[];
344
+ };
345
+ sandbox: {
346
+ aggregates: SandboxUsageAggregate[];
347
+ };
348
+ webSearch: {
349
+ aggregates: WebSearchUsageAggregate[];
350
+ };
351
+ series: BillingUsageSeriesPoint[];
352
+ }
353
+ interface OrganizationUsageCommon {
354
+ id: string;
355
+ occurredAt: string;
356
+ sessionId: string;
357
+ /** Null only when `kind=llm` and `requestPurpose=voice_realtime`. */
358
+ turnId: string | null;
359
+ /** The Realtime connection of `voice_realtime` usage; null otherwise. */
360
+ realtimeConnectionId?: string | null;
361
+ agentRunId: string | null;
362
+ agentId: string | null;
363
+ attributionKind: BillingAttributionKind;
364
+ costMicros: number | null;
365
+ currency: string | null;
366
+ pricingVersion: string;
367
+ pricingEffectiveAt: string;
368
+ valuationStatus: BillingValuationStatus;
369
+ valuationReason: string | null;
370
+ rateCardDigest: string | null;
371
+ billingTag: BillingTag | null;
372
+ }
373
+ export interface OrganizationLlmUsage extends OrganizationUsageCommon {
374
+ kind: "llm";
375
+ realtimeConnectionId: string | null;
376
+ operationId: string | null;
377
+ requestPurpose: BillingLlmRequestPurpose;
378
+ provider: string;
379
+ model: string;
380
+ observedResponseModel: string | null;
381
+ inputTokens: number;
382
+ cachedInputTokens: number;
383
+ uncachedInputTokens: number;
384
+ cacheReadTokens: number;
385
+ cacheWrite5mTokens: number;
386
+ cacheWrite1hTokens: number;
387
+ cacheWriteUnspecifiedTokens: number;
388
+ outputTokens: number;
389
+ inputCostMicros: number | null;
390
+ cachedInputCostMicros: number | null;
391
+ cacheWrite5mCostMicros: number | null;
392
+ cacheWrite1hCostMicros: number | null;
393
+ cacheWriteUnspecifiedCostMicros: number | null;
394
+ outputCostMicros: number | null;
395
+ pricingStatus: LlmPricingStatus;
396
+ estimateBasis: "public_list_placeholder" | "contract" | null;
397
+ contextTier: LlmPricingContextTier;
398
+ }
399
+ export interface OrganizationSandboxUsage extends OrganizationUsageCommon {
400
+ kind: "sandbox";
401
+ turnId: string;
402
+ provider: "e2b" | "tencent_ags" | "run9";
403
+ profileId: string;
404
+ specKey: string;
405
+ startedAt: string;
406
+ endedAt: string | null;
407
+ durationSeconds: number | null;
408
+ status: SandboxUsageStatus;
409
+ }
410
+ export interface OrganizationWebSearchUsage extends OrganizationUsageCommon {
411
+ kind: "web_search";
412
+ turnId: string;
413
+ operationId: string;
414
+ provider: "exa";
415
+ searchType: "auto";
416
+ requestCount: 1;
417
+ requestedResultCount: number;
418
+ returnedResultCount: number | null;
419
+ contentTextRequested: true;
420
+ requestOutcome: "succeeded" | "failed" | "aborted";
421
+ usageEvidenceStatus: BillingUsageEvidenceStatus;
422
+ }
423
+ export type OrganizationUsageItem = OrganizationLlmUsage | OrganizationSandboxUsage | OrganizationWebSearchUsage;
424
+ export interface OrganizationUserUsageDetails {
425
+ items: OrganizationUsageItem[];
426
+ nextCursor: string | null;
427
+ factCompleteness: BillingFactCompleteness;
428
+ }
429
+ export interface UserUsageOptions extends RequestOptions {
430
+ period?: "day" | "week";
431
+ /** Inclusive UTC date, YYYY-MM-DD. */
432
+ from?: string;
433
+ /** Inclusive UTC date, YYYY-MM-DD. */
434
+ to?: string;
435
+ tagKey?: string;
436
+ tagValue?: string;
437
+ }
438
+ export interface UserUsageDetailsOptions extends UserUsageOptions {
439
+ /** Maximum rows per kind, 1-500; this endpoint has no continuation cursor. */
440
+ limit?: number;
441
+ }
442
+ export interface OrganizationUserUsageOptions extends RequestOptions {
443
+ /** Exact inclusive UTC timestamp with milliseconds; maximum range is 31 days. */
444
+ from: string;
445
+ /** Exact exclusive UTC timestamp with milliseconds. */
446
+ to: string;
447
+ interval?: BillingUsageSeriesInterval;
448
+ tagKey?: string;
449
+ tagValue?: string;
450
+ }
451
+ export interface OrganizationUserUsageDetailsOptions extends Omit<OrganizationUserUsageOptions, "interval"> {
452
+ kind?: BillingUsageFactKind;
453
+ limit?: number;
454
+ cursor?: string;
455
+ }
456
+ export declare const usageQuery: (options: object, allowed: readonly string[]) => string;
457
+ export declare const userUsagePath: (userId: string, options: {
458
+ from: string;
459
+ to: string;
460
+ }) => string;
461
+ export {};
462
+ //# sourceMappingURL=usage.d.ts.map