studyfetch-sdk 0.1.0a1__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 (165) hide show
  1. studyfetch_sdk/__init__.py +100 -0
  2. studyfetch_sdk/_base_client.py +1992 -0
  3. studyfetch_sdk/_client.py +403 -0
  4. studyfetch_sdk/_compat.py +219 -0
  5. studyfetch_sdk/_constants.py +14 -0
  6. studyfetch_sdk/_exceptions.py +108 -0
  7. studyfetch_sdk/_files.py +123 -0
  8. studyfetch_sdk/_models.py +808 -0
  9. studyfetch_sdk/_qs.py +150 -0
  10. studyfetch_sdk/_resource.py +43 -0
  11. studyfetch_sdk/_response.py +832 -0
  12. studyfetch_sdk/_streaming.py +333 -0
  13. studyfetch_sdk/_types.py +219 -0
  14. studyfetch_sdk/_utils/__init__.py +57 -0
  15. studyfetch_sdk/_utils/_logs.py +25 -0
  16. studyfetch_sdk/_utils/_proxy.py +65 -0
  17. studyfetch_sdk/_utils/_reflection.py +42 -0
  18. studyfetch_sdk/_utils/_resources_proxy.py +24 -0
  19. studyfetch_sdk/_utils/_streams.py +12 -0
  20. studyfetch_sdk/_utils/_sync.py +86 -0
  21. studyfetch_sdk/_utils/_transform.py +447 -0
  22. studyfetch_sdk/_utils/_typing.py +151 -0
  23. studyfetch_sdk/_utils/_utils.py +422 -0
  24. studyfetch_sdk/_version.py +4 -0
  25. studyfetch_sdk/lib/.keep +4 -0
  26. studyfetch_sdk/py.typed +0 -0
  27. studyfetch_sdk/resources/__init__.py +19 -0
  28. studyfetch_sdk/resources/v1/__init__.py +215 -0
  29. studyfetch_sdk/resources/v1/audio_recaps/__init__.py +33 -0
  30. studyfetch_sdk/resources/v1/audio_recaps/audio_recaps.py +328 -0
  31. studyfetch_sdk/resources/v1/audio_recaps/sections.py +250 -0
  32. studyfetch_sdk/resources/v1/auth/__init__.py +61 -0
  33. studyfetch_sdk/resources/v1/auth/auth.py +620 -0
  34. studyfetch_sdk/resources/v1/auth/login.py +374 -0
  35. studyfetch_sdk/resources/v1/auth/number_2fa.py +457 -0
  36. studyfetch_sdk/resources/v1/auth/organization_invites.py +160 -0
  37. studyfetch_sdk/resources/v1/chat/__init__.py +47 -0
  38. studyfetch_sdk/resources/v1/chat/chat.py +576 -0
  39. studyfetch_sdk/resources/v1/chat/sessions.py +222 -0
  40. studyfetch_sdk/resources/v1/chat/test.py +190 -0
  41. studyfetch_sdk/resources/v1/components.py +943 -0
  42. studyfetch_sdk/resources/v1/embed/__init__.py +33 -0
  43. studyfetch_sdk/resources/v1/embed/component.py +278 -0
  44. studyfetch_sdk/resources/v1/embed/embed.py +346 -0
  45. studyfetch_sdk/resources/v1/explainers.py +216 -0
  46. studyfetch_sdk/resources/v1/flashcards.py +783 -0
  47. studyfetch_sdk/resources/v1/folders.py +744 -0
  48. studyfetch_sdk/resources/v1/materials/__init__.py +61 -0
  49. studyfetch_sdk/resources/v1/materials/bulk.py +134 -0
  50. studyfetch_sdk/resources/v1/materials/materials.py +1029 -0
  51. studyfetch_sdk/resources/v1/materials/test.py +290 -0
  52. studyfetch_sdk/resources/v1/materials/upload.py +410 -0
  53. studyfetch_sdk/resources/v1/organizations/__init__.py +103 -0
  54. studyfetch_sdk/resources/v1/organizations/api_keys.py +260 -0
  55. studyfetch_sdk/resources/v1/organizations/logo/__init__.py +33 -0
  56. studyfetch_sdk/resources/v1/organizations/logo/logo.py +166 -0
  57. studyfetch_sdk/resources/v1/organizations/logo/upload.py +184 -0
  58. studyfetch_sdk/resources/v1/organizations/organizations.py +428 -0
  59. studyfetch_sdk/resources/v1/organizations/profile/__init__.py +47 -0
  60. studyfetch_sdk/resources/v1/organizations/profile/models.py +134 -0
  61. studyfetch_sdk/resources/v1/organizations/profile/profile.py +248 -0
  62. studyfetch_sdk/resources/v1/organizations/profile/team.py +462 -0
  63. studyfetch_sdk/resources/v1/organizations/team/__init__.py +33 -0
  64. studyfetch_sdk/resources/v1/organizations/team/invite.py +236 -0
  65. studyfetch_sdk/resources/v1/organizations/team/team.py +564 -0
  66. studyfetch_sdk/resources/v1/organizations/theme.py +184 -0
  67. studyfetch_sdk/resources/v1/organizations/usage.py +160 -0
  68. studyfetch_sdk/resources/v1/scenarios/__init__.py +61 -0
  69. studyfetch_sdk/resources/v1/scenarios/component.py +330 -0
  70. studyfetch_sdk/resources/v1/scenarios/scenarios.py +708 -0
  71. studyfetch_sdk/resources/v1/scenarios/sessions.py +236 -0
  72. studyfetch_sdk/resources/v1/scenarios/submissions/__init__.py +33 -0
  73. studyfetch_sdk/resources/v1/scenarios/submissions/submissions.py +102 -0
  74. studyfetch_sdk/resources/v1/scenarios/submissions/user.py +210 -0
  75. studyfetch_sdk/resources/v1/tests/__init__.py +33 -0
  76. studyfetch_sdk/resources/v1/tests/component.py +160 -0
  77. studyfetch_sdk/resources/v1/tests/tests.py +682 -0
  78. studyfetch_sdk/resources/v1/upload/__init__.py +33 -0
  79. studyfetch_sdk/resources/v1/upload/component.py +388 -0
  80. studyfetch_sdk/resources/v1/upload/upload.py +102 -0
  81. studyfetch_sdk/resources/v1/usage.py +1126 -0
  82. studyfetch_sdk/resources/v1/v1.py +518 -0
  83. studyfetch_sdk/types/__init__.py +3 -0
  84. studyfetch_sdk/types/v1/__init__.py +52 -0
  85. studyfetch_sdk/types/v1/admin/__init__.py +3 -0
  86. studyfetch_sdk/types/v1/admin/organizations/__init__.py +3 -0
  87. studyfetch_sdk/types/v1/admin/organizations/models/__init__.py +3 -0
  88. studyfetch_sdk/types/v1/audio_recaps/__init__.py +3 -0
  89. studyfetch_sdk/types/v1/auth/__init__.py +13 -0
  90. studyfetch_sdk/types/v1/auth/login_authenticate_params.py +15 -0
  91. studyfetch_sdk/types/v1/auth/login_verify_2fa_params.py +15 -0
  92. studyfetch_sdk/types/v1/auth/login_verify_backup_code_params.py +17 -0
  93. studyfetch_sdk/types/v1/auth/number_2fa_disable_params.py +12 -0
  94. studyfetch_sdk/types/v1/auth/number_2fa_enable_params.py +12 -0
  95. studyfetch_sdk/types/v1/auth/number_2fa_regenerate_backup_codes_params.py +12 -0
  96. studyfetch_sdk/types/v1/auth/number_2fa_send_code_params.py +12 -0
  97. studyfetch_sdk/types/v1/auth_register_new_user_params.py +23 -0
  98. studyfetch_sdk/types/v1/auth_request_password_reset_params.py +12 -0
  99. studyfetch_sdk/types/v1/auth_reset_password_params.py +17 -0
  100. studyfetch_sdk/types/v1/chat/__init__.py +5 -0
  101. studyfetch_sdk/types/v1/chat/session_retrieve_params.py +11 -0
  102. studyfetch_sdk/types/v1/chat_retrieve_session_params.py +13 -0
  103. studyfetch_sdk/types/v1/chat_send_message_params.py +54 -0
  104. studyfetch_sdk/types/v1/chat_stream_params.py +28 -0
  105. studyfetch_sdk/types/v1/component_create_params.py +29 -0
  106. studyfetch_sdk/types/v1/component_create_response.py +46 -0
  107. studyfetch_sdk/types/v1/component_embed_params.py +99 -0
  108. studyfetch_sdk/types/v1/component_embed_response.py +38 -0
  109. studyfetch_sdk/types/v1/component_list_params.py +14 -0
  110. studyfetch_sdk/types/v1/component_list_response.py +49 -0
  111. studyfetch_sdk/types/v1/component_retrieve_response.py +46 -0
  112. studyfetch_sdk/types/v1/component_update_params.py +12 -0
  113. studyfetch_sdk/types/v1/component_update_response.py +46 -0
  114. studyfetch_sdk/types/v1/embed/__init__.py +6 -0
  115. studyfetch_sdk/types/v1/embed/component_interact_params.py +14 -0
  116. studyfetch_sdk/types/v1/embed/component_retrieve_params.py +12 -0
  117. studyfetch_sdk/types/v1/embed_get_theme_params.py +12 -0
  118. studyfetch_sdk/types/v1/embed_verify_params.py +12 -0
  119. studyfetch_sdk/types/v1/explainer_handle_webhook_params.py +11 -0
  120. studyfetch_sdk/types/v1/flashcard_batch_process_params.py +36 -0
  121. studyfetch_sdk/types/v1/flashcard_batch_process_response.py +39 -0
  122. studyfetch_sdk/types/v1/flashcard_get_algorithm_info_response.py +37 -0
  123. studyfetch_sdk/types/v1/flashcard_get_all_params.py +23 -0
  124. studyfetch_sdk/types/v1/flashcard_get_due_params.py +19 -0
  125. studyfetch_sdk/types/v1/flashcard_get_stats_params.py +17 -0
  126. studyfetch_sdk/types/v1/flashcard_get_types_response.py +14 -0
  127. studyfetch_sdk/types/v1/flashcard_rate_params.py +23 -0
  128. studyfetch_sdk/types/v1/folder_create_params.py +17 -0
  129. studyfetch_sdk/types/v1/folder_list_params.py +14 -0
  130. studyfetch_sdk/types/v1/folder_update_params.py +17 -0
  131. studyfetch_sdk/types/v1/material_create_params.py +34 -0
  132. studyfetch_sdk/types/v1/material_create_response.py +62 -0
  133. studyfetch_sdk/types/v1/material_get_download_url_params.py +13 -0
  134. studyfetch_sdk/types/v1/material_list_params.py +14 -0
  135. studyfetch_sdk/types/v1/material_list_response.py +65 -0
  136. studyfetch_sdk/types/v1/material_retrieve_response.py +62 -0
  137. studyfetch_sdk/types/v1/materials/__init__.py +8 -0
  138. studyfetch_sdk/types/v1/materials/upload_upload_file_params.py +20 -0
  139. studyfetch_sdk/types/v1/materials/upload_upload_file_response.py +62 -0
  140. studyfetch_sdk/types/v1/materials/upload_upload_from_url_params.py +20 -0
  141. studyfetch_sdk/types/v1/materials/upload_upload_from_url_response.py +62 -0
  142. studyfetch_sdk/types/v1/organizations/__init__.py +3 -0
  143. studyfetch_sdk/types/v1/organizations/logo/__init__.py +3 -0
  144. studyfetch_sdk/types/v1/organizations/profile/__init__.py +3 -0
  145. studyfetch_sdk/types/v1/organizations/team/__init__.py +3 -0
  146. studyfetch_sdk/types/v1/scenario_create_params.py +11 -0
  147. studyfetch_sdk/types/v1/scenario_update_params.py +11 -0
  148. studyfetch_sdk/types/v1/scenarios/__init__.py +5 -0
  149. studyfetch_sdk/types/v1/scenarios/component_update_params.py +11 -0
  150. studyfetch_sdk/types/v1/scenarios/submissions/__init__.py +3 -0
  151. studyfetch_sdk/types/v1/test_create_params.py +20 -0
  152. studyfetch_sdk/types/v1/test_retake_params.py +14 -0
  153. studyfetch_sdk/types/v1/test_submit_answer_params.py +20 -0
  154. studyfetch_sdk/types/v1/test_submit_params.py +14 -0
  155. studyfetch_sdk/types/v1/tests/__init__.py +3 -0
  156. studyfetch_sdk/types/v1/upload/__init__.py +3 -0
  157. studyfetch_sdk/types/v1/usage_get_stats_params.py +23 -0
  158. studyfetch_sdk/types/v1/usage_get_summary_params.py +23 -0
  159. studyfetch_sdk/types/v1/usage_list_events_params.py +61 -0
  160. studyfetch_sdk/types/v1/usage_track_chat_params.py +54 -0
  161. studyfetch_sdk/types/v1/usage_track_event_params.py +128 -0
  162. studyfetch_sdk-0.1.0a1.dist-info/METADATA +453 -0
  163. studyfetch_sdk-0.1.0a1.dist-info/RECORD +165 -0
  164. studyfetch_sdk-0.1.0a1.dist-info/WHEEL +4 -0
  165. studyfetch_sdk-0.1.0a1.dist-info/licenses/LICENSE +201 -0
@@ -0,0 +1,1126 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing_extensions import Literal
6
+
7
+ import httpx
8
+
9
+ from ..._types import NOT_GIVEN, Body, Query, Headers, NoneType, NotGiven
10
+ from ..._utils import maybe_transform, async_maybe_transform
11
+ from ..._compat import cached_property
12
+ from ...types.v1 import (
13
+ usage_get_stats_params,
14
+ usage_track_chat_params,
15
+ usage_get_summary_params,
16
+ usage_list_events_params,
17
+ usage_track_event_params,
18
+ )
19
+ from ..._resource import SyncAPIResource, AsyncAPIResource
20
+ from ..._response import (
21
+ to_raw_response_wrapper,
22
+ to_streamed_response_wrapper,
23
+ async_to_raw_response_wrapper,
24
+ async_to_streamed_response_wrapper,
25
+ )
26
+ from ..._base_client import make_request_options
27
+
28
+ __all__ = ["UsageResource", "AsyncUsageResource"]
29
+
30
+
31
+ class UsageResource(SyncAPIResource):
32
+ @cached_property
33
+ def with_raw_response(self) -> UsageResourceWithRawResponse:
34
+ """
35
+ This property can be used as a prefix for any HTTP method call to return
36
+ the raw response object instead of the parsed content.
37
+
38
+ For more information, see https://www.github.com/GoStudyFetchGo/studyfetch-sdk-python#accessing-raw-response-data-eg-headers
39
+ """
40
+ return UsageResourceWithRawResponse(self)
41
+
42
+ @cached_property
43
+ def with_streaming_response(self) -> UsageResourceWithStreamingResponse:
44
+ """
45
+ An alternative to `.with_raw_response` that doesn't eagerly read the response body.
46
+
47
+ For more information, see https://www.github.com/GoStudyFetchGo/studyfetch-sdk-python#with_streaming_response
48
+ """
49
+ return UsageResourceWithStreamingResponse(self)
50
+
51
+ def get_stats(
52
+ self,
53
+ *,
54
+ end_date: str | NotGiven = NOT_GIVEN,
55
+ group_id: str | NotGiven = NOT_GIVEN,
56
+ start_date: str | NotGiven = NOT_GIVEN,
57
+ user_id: str | NotGiven = NOT_GIVEN,
58
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
59
+ # The extra values given here take precedence over values defined on the client or passed to this method.
60
+ extra_headers: Headers | None = None,
61
+ extra_query: Query | None = None,
62
+ extra_body: Body | None = None,
63
+ timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
64
+ ) -> None:
65
+ """
66
+ Get usage statistics
67
+
68
+ Args:
69
+ end_date: End date for stats (ISO 8601)
70
+
71
+ group_id: Filter by group ID
72
+
73
+ start_date: Start date for stats (ISO 8601)
74
+
75
+ user_id: Filter by user ID
76
+
77
+ extra_headers: Send extra headers
78
+
79
+ extra_query: Add additional query parameters to the request
80
+
81
+ extra_body: Add additional JSON properties to the request
82
+
83
+ timeout: Override the client-level default timeout for this request, in seconds
84
+ """
85
+ extra_headers = {"Accept": "*/*", **(extra_headers or {})}
86
+ return self._get(
87
+ "/api/v1/usage/stats",
88
+ options=make_request_options(
89
+ extra_headers=extra_headers,
90
+ extra_query=extra_query,
91
+ extra_body=extra_body,
92
+ timeout=timeout,
93
+ query=maybe_transform(
94
+ {
95
+ "end_date": end_date,
96
+ "group_id": group_id,
97
+ "start_date": start_date,
98
+ "user_id": user_id,
99
+ },
100
+ usage_get_stats_params.UsageGetStatsParams,
101
+ ),
102
+ ),
103
+ cast_to=NoneType,
104
+ )
105
+
106
+ def get_summary(
107
+ self,
108
+ *,
109
+ end_date: str,
110
+ period: Literal["hourly", "daily", "monthly"],
111
+ start_date: str,
112
+ group_by: Literal["user", "group", "model", "endpoint"] | NotGiven = NOT_GIVEN,
113
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
114
+ # The extra values given here take precedence over values defined on the client or passed to this method.
115
+ extra_headers: Headers | None = None,
116
+ extra_query: Query | None = None,
117
+ extra_body: Body | None = None,
118
+ timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
119
+ ) -> None:
120
+ """
121
+ Get usage summary
122
+
123
+ Args:
124
+ end_date: End date for summary (ISO 8601)
125
+
126
+ period: Summary period
127
+
128
+ start_date: Start date for summary (ISO 8601)
129
+
130
+ group_by: Group results by
131
+
132
+ extra_headers: Send extra headers
133
+
134
+ extra_query: Add additional query parameters to the request
135
+
136
+ extra_body: Add additional JSON properties to the request
137
+
138
+ timeout: Override the client-level default timeout for this request, in seconds
139
+ """
140
+ extra_headers = {"Accept": "*/*", **(extra_headers or {})}
141
+ return self._get(
142
+ "/api/v1/usage/summary",
143
+ options=make_request_options(
144
+ extra_headers=extra_headers,
145
+ extra_query=extra_query,
146
+ extra_body=extra_body,
147
+ timeout=timeout,
148
+ query=maybe_transform(
149
+ {
150
+ "end_date": end_date,
151
+ "period": period,
152
+ "start_date": start_date,
153
+ "group_by": group_by,
154
+ },
155
+ usage_get_summary_params.UsageGetSummaryParams,
156
+ ),
157
+ ),
158
+ cast_to=NoneType,
159
+ )
160
+
161
+ def list_events(
162
+ self,
163
+ *,
164
+ end_date: str | NotGiven = NOT_GIVEN,
165
+ event_type: Literal[
166
+ "material_created",
167
+ "material_uploaded",
168
+ "material_processed",
169
+ "material_deleted",
170
+ "component_created",
171
+ "component_accessed",
172
+ "component_deleted",
173
+ "component_usage",
174
+ "chat_message_sent",
175
+ "chat_session_started",
176
+ "chat_session_ended",
177
+ "test_created",
178
+ "test_started",
179
+ "test_completed",
180
+ "test_question_answered",
181
+ "test_retaken",
182
+ "audio_recap_create",
183
+ "api_call",
184
+ "cache_hit",
185
+ "sso_login",
186
+ "sso_logout",
187
+ "student_performance",
188
+ ]
189
+ | NotGiven = NOT_GIVEN,
190
+ group_id: str | NotGiven = NOT_GIVEN,
191
+ limit: float | NotGiven = NOT_GIVEN,
192
+ offset: float | NotGiven = NOT_GIVEN,
193
+ resource_id: str | NotGiven = NOT_GIVEN,
194
+ start_date: str | NotGiven = NOT_GIVEN,
195
+ user_id: str | NotGiven = NOT_GIVEN,
196
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
197
+ # The extra values given here take precedence over values defined on the client or passed to this method.
198
+ extra_headers: Headers | None = None,
199
+ extra_query: Query | None = None,
200
+ extra_body: Body | None = None,
201
+ timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
202
+ ) -> None:
203
+ """
204
+ Get usage events
205
+
206
+ Args:
207
+ end_date: End date for filtering (ISO 8601)
208
+
209
+ event_type: Filter by event type
210
+
211
+ group_id: Filter by group ID
212
+
213
+ limit: Number of results to return
214
+
215
+ offset: Offset for pagination
216
+
217
+ resource_id: Filter by resource ID
218
+
219
+ start_date: Start date for filtering (ISO 8601)
220
+
221
+ user_id: Filter by user ID
222
+
223
+ extra_headers: Send extra headers
224
+
225
+ extra_query: Add additional query parameters to the request
226
+
227
+ extra_body: Add additional JSON properties to the request
228
+
229
+ timeout: Override the client-level default timeout for this request, in seconds
230
+ """
231
+ extra_headers = {"Accept": "*/*", **(extra_headers or {})}
232
+ return self._get(
233
+ "/api/v1/usage/events",
234
+ options=make_request_options(
235
+ extra_headers=extra_headers,
236
+ extra_query=extra_query,
237
+ extra_body=extra_body,
238
+ timeout=timeout,
239
+ query=maybe_transform(
240
+ {
241
+ "end_date": end_date,
242
+ "event_type": event_type,
243
+ "group_id": group_id,
244
+ "limit": limit,
245
+ "offset": offset,
246
+ "resource_id": resource_id,
247
+ "start_date": start_date,
248
+ "user_id": user_id,
249
+ },
250
+ usage_list_events_params.UsageListEventsParams,
251
+ ),
252
+ ),
253
+ cast_to=NoneType,
254
+ )
255
+
256
+ def track_chat(
257
+ self,
258
+ *,
259
+ input_tokens: float,
260
+ model: Literal[
261
+ "openai:gpt-4.1",
262
+ "openai:gpt-4o",
263
+ "openai:gpt-4o-mini",
264
+ "openai:gpt-4",
265
+ "openai:gpt-3.5-turbo",
266
+ "openai:o1",
267
+ "openai:o1-mini",
268
+ "openai:o3-mini",
269
+ "anthropic:claude-3-opus",
270
+ "anthropic:claude-3-sonnet",
271
+ "anthropic:claude-3-haiku",
272
+ "google:gemini-pro",
273
+ "meta:llama-3",
274
+ ],
275
+ output_tokens: float,
276
+ session_id: str,
277
+ component_id: str | NotGiven = NOT_GIVEN,
278
+ group_id: str | NotGiven = NOT_GIVEN,
279
+ metadata: object | NotGiven = NOT_GIVEN,
280
+ reasoning_tokens: float | NotGiven = NOT_GIVEN,
281
+ user_id: str | NotGiven = NOT_GIVEN,
282
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
283
+ # The extra values given here take precedence over values defined on the client or passed to this method.
284
+ extra_headers: Headers | None = None,
285
+ extra_query: Query | None = None,
286
+ extra_body: Body | None = None,
287
+ timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
288
+ ) -> None:
289
+ """
290
+ Args:
291
+ input_tokens: Number of input tokens
292
+
293
+ model: AI model used
294
+
295
+ output_tokens: Number of output tokens
296
+
297
+ session_id: Chat session ID
298
+
299
+ component_id: Component ID
300
+
301
+ group_id: Group ID
302
+
303
+ metadata: Additional metadata
304
+
305
+ reasoning_tokens: Number of reasoning tokens
306
+
307
+ user_id: User ID
308
+
309
+ extra_headers: Send extra headers
310
+
311
+ extra_query: Add additional query parameters to the request
312
+
313
+ extra_body: Add additional JSON properties to the request
314
+
315
+ timeout: Override the client-level default timeout for this request, in seconds
316
+ """
317
+ extra_headers = {"Accept": "*/*", **(extra_headers or {})}
318
+ return self._post(
319
+ "/api/v1/usage/chat",
320
+ body=maybe_transform(
321
+ {
322
+ "input_tokens": input_tokens,
323
+ "model": model,
324
+ "output_tokens": output_tokens,
325
+ "session_id": session_id,
326
+ "component_id": component_id,
327
+ "group_id": group_id,
328
+ "metadata": metadata,
329
+ "reasoning_tokens": reasoning_tokens,
330
+ "user_id": user_id,
331
+ },
332
+ usage_track_chat_params.UsageTrackChatParams,
333
+ ),
334
+ options=make_request_options(
335
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
336
+ ),
337
+ cast_to=NoneType,
338
+ )
339
+
340
+ def track_event(
341
+ self,
342
+ *,
343
+ event_type: Literal[
344
+ "material_created",
345
+ "material_uploaded",
346
+ "material_processed",
347
+ "material_deleted",
348
+ "component_created",
349
+ "component_accessed",
350
+ "component_deleted",
351
+ "component_usage",
352
+ "chat_message_sent",
353
+ "chat_session_started",
354
+ "chat_session_ended",
355
+ "test_created",
356
+ "test_started",
357
+ "test_completed",
358
+ "test_question_answered",
359
+ "test_retaken",
360
+ "audio_recap_create",
361
+ "api_call",
362
+ "cache_hit",
363
+ "sso_login",
364
+ "sso_logout",
365
+ "student_performance",
366
+ ],
367
+ cache_hit: bool | NotGiven = NOT_GIVEN,
368
+ component_name: str | NotGiven = NOT_GIVEN,
369
+ component_type: str | NotGiven = NOT_GIVEN,
370
+ content_size: float | NotGiven = NOT_GIVEN,
371
+ endpoint: str | NotGiven = NOT_GIVEN,
372
+ file_size: float | NotGiven = NOT_GIVEN,
373
+ file_type: str | NotGiven = NOT_GIVEN,
374
+ group_id: str | NotGiven = NOT_GIVEN,
375
+ input_tokens: float | NotGiven = NOT_GIVEN,
376
+ ip_address: str | NotGiven = NOT_GIVEN,
377
+ metadata: object | NotGiven = NOT_GIVEN,
378
+ method: str | NotGiven = NOT_GIVEN,
379
+ model: Literal[
380
+ "openai:gpt-4.1",
381
+ "openai:gpt-4o",
382
+ "openai:gpt-4o-mini",
383
+ "openai:gpt-4",
384
+ "openai:gpt-3.5-turbo",
385
+ "openai:o1",
386
+ "openai:o1-mini",
387
+ "openai:o3-mini",
388
+ "anthropic:claude-3-opus",
389
+ "anthropic:claude-3-sonnet",
390
+ "anthropic:claude-3-haiku",
391
+ "google:gemini-pro",
392
+ "meta:llama-3",
393
+ ]
394
+ | NotGiven = NOT_GIVEN,
395
+ output_tokens: float | NotGiven = NOT_GIVEN,
396
+ performance_data: object | NotGiven = NOT_GIVEN,
397
+ reasoning_tokens: float | NotGiven = NOT_GIVEN,
398
+ resource_id: str | NotGiven = NOT_GIVEN,
399
+ resource_type: str | NotGiven = NOT_GIVEN,
400
+ response_time: float | NotGiven = NOT_GIVEN,
401
+ session_id: str | NotGiven = NOT_GIVEN,
402
+ status_code: float | NotGiven = NOT_GIVEN,
403
+ total_tokens: float | NotGiven = NOT_GIVEN,
404
+ user_agent: str | NotGiven = NOT_GIVEN,
405
+ user_id: str | NotGiven = NOT_GIVEN,
406
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
407
+ # The extra values given here take precedence over values defined on the client or passed to this method.
408
+ extra_headers: Headers | None = None,
409
+ extra_query: Query | None = None,
410
+ extra_body: Body | None = None,
411
+ timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
412
+ ) -> None:
413
+ """
414
+ Args:
415
+ event_type: Type of usage event
416
+
417
+ cache_hit: Whether response was served from cache
418
+
419
+ component_name: Component name
420
+
421
+ component_type: Component type
422
+
423
+ content_size: Size of content in bytes
424
+
425
+ endpoint: API endpoint accessed
426
+
427
+ file_size: File size in bytes
428
+
429
+ file_type: File MIME type
430
+
431
+ group_id: Group ID for collaborative sessions
432
+
433
+ input_tokens: Number of input tokens
434
+
435
+ ip_address: Client IP address
436
+
437
+ metadata: Additional metadata
438
+
439
+ method: HTTP method used
440
+
441
+ model: AI model used
442
+
443
+ output_tokens: Number of output tokens
444
+
445
+ performance_data: Performance metrics data
446
+
447
+ reasoning_tokens: Number of reasoning tokens
448
+
449
+ resource_id: Resource ID being accessed
450
+
451
+ resource_type: Type of resource
452
+
453
+ response_time: Response time in milliseconds
454
+
455
+ session_id: Session ID
456
+
457
+ status_code: HTTP status code
458
+
459
+ total_tokens: Total number of tokens
460
+
461
+ user_agent: Client user agent
462
+
463
+ user_id: User ID
464
+
465
+ extra_headers: Send extra headers
466
+
467
+ extra_query: Add additional query parameters to the request
468
+
469
+ extra_body: Add additional JSON properties to the request
470
+
471
+ timeout: Override the client-level default timeout for this request, in seconds
472
+ """
473
+ extra_headers = {"Accept": "*/*", **(extra_headers or {})}
474
+ return self._post(
475
+ "/api/v1/usage/track",
476
+ body=maybe_transform(
477
+ {
478
+ "event_type": event_type,
479
+ "cache_hit": cache_hit,
480
+ "component_name": component_name,
481
+ "component_type": component_type,
482
+ "content_size": content_size,
483
+ "endpoint": endpoint,
484
+ "file_size": file_size,
485
+ "file_type": file_type,
486
+ "group_id": group_id,
487
+ "input_tokens": input_tokens,
488
+ "ip_address": ip_address,
489
+ "metadata": metadata,
490
+ "method": method,
491
+ "model": model,
492
+ "output_tokens": output_tokens,
493
+ "performance_data": performance_data,
494
+ "reasoning_tokens": reasoning_tokens,
495
+ "resource_id": resource_id,
496
+ "resource_type": resource_type,
497
+ "response_time": response_time,
498
+ "session_id": session_id,
499
+ "status_code": status_code,
500
+ "total_tokens": total_tokens,
501
+ "user_agent": user_agent,
502
+ "user_id": user_id,
503
+ },
504
+ usage_track_event_params.UsageTrackEventParams,
505
+ ),
506
+ options=make_request_options(
507
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
508
+ ),
509
+ cast_to=NoneType,
510
+ )
511
+
512
+ def track_performance(
513
+ self,
514
+ *,
515
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
516
+ # The extra values given here take precedence over values defined on the client or passed to this method.
517
+ extra_headers: Headers | None = None,
518
+ extra_query: Query | None = None,
519
+ extra_body: Body | None = None,
520
+ timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
521
+ ) -> None:
522
+ extra_headers = {"Accept": "*/*", **(extra_headers or {})}
523
+ return self._post(
524
+ "/api/v1/usage/performance",
525
+ options=make_request_options(
526
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
527
+ ),
528
+ cast_to=NoneType,
529
+ )
530
+
531
+
532
+ class AsyncUsageResource(AsyncAPIResource):
533
+ @cached_property
534
+ def with_raw_response(self) -> AsyncUsageResourceWithRawResponse:
535
+ """
536
+ This property can be used as a prefix for any HTTP method call to return
537
+ the raw response object instead of the parsed content.
538
+
539
+ For more information, see https://www.github.com/GoStudyFetchGo/studyfetch-sdk-python#accessing-raw-response-data-eg-headers
540
+ """
541
+ return AsyncUsageResourceWithRawResponse(self)
542
+
543
+ @cached_property
544
+ def with_streaming_response(self) -> AsyncUsageResourceWithStreamingResponse:
545
+ """
546
+ An alternative to `.with_raw_response` that doesn't eagerly read the response body.
547
+
548
+ For more information, see https://www.github.com/GoStudyFetchGo/studyfetch-sdk-python#with_streaming_response
549
+ """
550
+ return AsyncUsageResourceWithStreamingResponse(self)
551
+
552
+ async def get_stats(
553
+ self,
554
+ *,
555
+ end_date: str | NotGiven = NOT_GIVEN,
556
+ group_id: str | NotGiven = NOT_GIVEN,
557
+ start_date: str | NotGiven = NOT_GIVEN,
558
+ user_id: str | NotGiven = NOT_GIVEN,
559
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
560
+ # The extra values given here take precedence over values defined on the client or passed to this method.
561
+ extra_headers: Headers | None = None,
562
+ extra_query: Query | None = None,
563
+ extra_body: Body | None = None,
564
+ timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
565
+ ) -> None:
566
+ """
567
+ Get usage statistics
568
+
569
+ Args:
570
+ end_date: End date for stats (ISO 8601)
571
+
572
+ group_id: Filter by group ID
573
+
574
+ start_date: Start date for stats (ISO 8601)
575
+
576
+ user_id: Filter by user ID
577
+
578
+ extra_headers: Send extra headers
579
+
580
+ extra_query: Add additional query parameters to the request
581
+
582
+ extra_body: Add additional JSON properties to the request
583
+
584
+ timeout: Override the client-level default timeout for this request, in seconds
585
+ """
586
+ extra_headers = {"Accept": "*/*", **(extra_headers or {})}
587
+ return await self._get(
588
+ "/api/v1/usage/stats",
589
+ options=make_request_options(
590
+ extra_headers=extra_headers,
591
+ extra_query=extra_query,
592
+ extra_body=extra_body,
593
+ timeout=timeout,
594
+ query=await async_maybe_transform(
595
+ {
596
+ "end_date": end_date,
597
+ "group_id": group_id,
598
+ "start_date": start_date,
599
+ "user_id": user_id,
600
+ },
601
+ usage_get_stats_params.UsageGetStatsParams,
602
+ ),
603
+ ),
604
+ cast_to=NoneType,
605
+ )
606
+
607
+ async def get_summary(
608
+ self,
609
+ *,
610
+ end_date: str,
611
+ period: Literal["hourly", "daily", "monthly"],
612
+ start_date: str,
613
+ group_by: Literal["user", "group", "model", "endpoint"] | NotGiven = NOT_GIVEN,
614
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
615
+ # The extra values given here take precedence over values defined on the client or passed to this method.
616
+ extra_headers: Headers | None = None,
617
+ extra_query: Query | None = None,
618
+ extra_body: Body | None = None,
619
+ timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
620
+ ) -> None:
621
+ """
622
+ Get usage summary
623
+
624
+ Args:
625
+ end_date: End date for summary (ISO 8601)
626
+
627
+ period: Summary period
628
+
629
+ start_date: Start date for summary (ISO 8601)
630
+
631
+ group_by: Group results by
632
+
633
+ extra_headers: Send extra headers
634
+
635
+ extra_query: Add additional query parameters to the request
636
+
637
+ extra_body: Add additional JSON properties to the request
638
+
639
+ timeout: Override the client-level default timeout for this request, in seconds
640
+ """
641
+ extra_headers = {"Accept": "*/*", **(extra_headers or {})}
642
+ return await self._get(
643
+ "/api/v1/usage/summary",
644
+ options=make_request_options(
645
+ extra_headers=extra_headers,
646
+ extra_query=extra_query,
647
+ extra_body=extra_body,
648
+ timeout=timeout,
649
+ query=await async_maybe_transform(
650
+ {
651
+ "end_date": end_date,
652
+ "period": period,
653
+ "start_date": start_date,
654
+ "group_by": group_by,
655
+ },
656
+ usage_get_summary_params.UsageGetSummaryParams,
657
+ ),
658
+ ),
659
+ cast_to=NoneType,
660
+ )
661
+
662
+ async def list_events(
663
+ self,
664
+ *,
665
+ end_date: str | NotGiven = NOT_GIVEN,
666
+ event_type: Literal[
667
+ "material_created",
668
+ "material_uploaded",
669
+ "material_processed",
670
+ "material_deleted",
671
+ "component_created",
672
+ "component_accessed",
673
+ "component_deleted",
674
+ "component_usage",
675
+ "chat_message_sent",
676
+ "chat_session_started",
677
+ "chat_session_ended",
678
+ "test_created",
679
+ "test_started",
680
+ "test_completed",
681
+ "test_question_answered",
682
+ "test_retaken",
683
+ "audio_recap_create",
684
+ "api_call",
685
+ "cache_hit",
686
+ "sso_login",
687
+ "sso_logout",
688
+ "student_performance",
689
+ ]
690
+ | NotGiven = NOT_GIVEN,
691
+ group_id: str | NotGiven = NOT_GIVEN,
692
+ limit: float | NotGiven = NOT_GIVEN,
693
+ offset: float | NotGiven = NOT_GIVEN,
694
+ resource_id: str | NotGiven = NOT_GIVEN,
695
+ start_date: str | NotGiven = NOT_GIVEN,
696
+ user_id: str | NotGiven = NOT_GIVEN,
697
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
698
+ # The extra values given here take precedence over values defined on the client or passed to this method.
699
+ extra_headers: Headers | None = None,
700
+ extra_query: Query | None = None,
701
+ extra_body: Body | None = None,
702
+ timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
703
+ ) -> None:
704
+ """
705
+ Get usage events
706
+
707
+ Args:
708
+ end_date: End date for filtering (ISO 8601)
709
+
710
+ event_type: Filter by event type
711
+
712
+ group_id: Filter by group ID
713
+
714
+ limit: Number of results to return
715
+
716
+ offset: Offset for pagination
717
+
718
+ resource_id: Filter by resource ID
719
+
720
+ start_date: Start date for filtering (ISO 8601)
721
+
722
+ user_id: Filter by user ID
723
+
724
+ extra_headers: Send extra headers
725
+
726
+ extra_query: Add additional query parameters to the request
727
+
728
+ extra_body: Add additional JSON properties to the request
729
+
730
+ timeout: Override the client-level default timeout for this request, in seconds
731
+ """
732
+ extra_headers = {"Accept": "*/*", **(extra_headers or {})}
733
+ return await self._get(
734
+ "/api/v1/usage/events",
735
+ options=make_request_options(
736
+ extra_headers=extra_headers,
737
+ extra_query=extra_query,
738
+ extra_body=extra_body,
739
+ timeout=timeout,
740
+ query=await async_maybe_transform(
741
+ {
742
+ "end_date": end_date,
743
+ "event_type": event_type,
744
+ "group_id": group_id,
745
+ "limit": limit,
746
+ "offset": offset,
747
+ "resource_id": resource_id,
748
+ "start_date": start_date,
749
+ "user_id": user_id,
750
+ },
751
+ usage_list_events_params.UsageListEventsParams,
752
+ ),
753
+ ),
754
+ cast_to=NoneType,
755
+ )
756
+
757
+ async def track_chat(
758
+ self,
759
+ *,
760
+ input_tokens: float,
761
+ model: Literal[
762
+ "openai:gpt-4.1",
763
+ "openai:gpt-4o",
764
+ "openai:gpt-4o-mini",
765
+ "openai:gpt-4",
766
+ "openai:gpt-3.5-turbo",
767
+ "openai:o1",
768
+ "openai:o1-mini",
769
+ "openai:o3-mini",
770
+ "anthropic:claude-3-opus",
771
+ "anthropic:claude-3-sonnet",
772
+ "anthropic:claude-3-haiku",
773
+ "google:gemini-pro",
774
+ "meta:llama-3",
775
+ ],
776
+ output_tokens: float,
777
+ session_id: str,
778
+ component_id: str | NotGiven = NOT_GIVEN,
779
+ group_id: str | NotGiven = NOT_GIVEN,
780
+ metadata: object | NotGiven = NOT_GIVEN,
781
+ reasoning_tokens: float | NotGiven = NOT_GIVEN,
782
+ user_id: str | NotGiven = NOT_GIVEN,
783
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
784
+ # The extra values given here take precedence over values defined on the client or passed to this method.
785
+ extra_headers: Headers | None = None,
786
+ extra_query: Query | None = None,
787
+ extra_body: Body | None = None,
788
+ timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
789
+ ) -> None:
790
+ """
791
+ Args:
792
+ input_tokens: Number of input tokens
793
+
794
+ model: AI model used
795
+
796
+ output_tokens: Number of output tokens
797
+
798
+ session_id: Chat session ID
799
+
800
+ component_id: Component ID
801
+
802
+ group_id: Group ID
803
+
804
+ metadata: Additional metadata
805
+
806
+ reasoning_tokens: Number of reasoning tokens
807
+
808
+ user_id: User ID
809
+
810
+ extra_headers: Send extra headers
811
+
812
+ extra_query: Add additional query parameters to the request
813
+
814
+ extra_body: Add additional JSON properties to the request
815
+
816
+ timeout: Override the client-level default timeout for this request, in seconds
817
+ """
818
+ extra_headers = {"Accept": "*/*", **(extra_headers or {})}
819
+ return await self._post(
820
+ "/api/v1/usage/chat",
821
+ body=await async_maybe_transform(
822
+ {
823
+ "input_tokens": input_tokens,
824
+ "model": model,
825
+ "output_tokens": output_tokens,
826
+ "session_id": session_id,
827
+ "component_id": component_id,
828
+ "group_id": group_id,
829
+ "metadata": metadata,
830
+ "reasoning_tokens": reasoning_tokens,
831
+ "user_id": user_id,
832
+ },
833
+ usage_track_chat_params.UsageTrackChatParams,
834
+ ),
835
+ options=make_request_options(
836
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
837
+ ),
838
+ cast_to=NoneType,
839
+ )
840
+
841
+ async def track_event(
842
+ self,
843
+ *,
844
+ event_type: Literal[
845
+ "material_created",
846
+ "material_uploaded",
847
+ "material_processed",
848
+ "material_deleted",
849
+ "component_created",
850
+ "component_accessed",
851
+ "component_deleted",
852
+ "component_usage",
853
+ "chat_message_sent",
854
+ "chat_session_started",
855
+ "chat_session_ended",
856
+ "test_created",
857
+ "test_started",
858
+ "test_completed",
859
+ "test_question_answered",
860
+ "test_retaken",
861
+ "audio_recap_create",
862
+ "api_call",
863
+ "cache_hit",
864
+ "sso_login",
865
+ "sso_logout",
866
+ "student_performance",
867
+ ],
868
+ cache_hit: bool | NotGiven = NOT_GIVEN,
869
+ component_name: str | NotGiven = NOT_GIVEN,
870
+ component_type: str | NotGiven = NOT_GIVEN,
871
+ content_size: float | NotGiven = NOT_GIVEN,
872
+ endpoint: str | NotGiven = NOT_GIVEN,
873
+ file_size: float | NotGiven = NOT_GIVEN,
874
+ file_type: str | NotGiven = NOT_GIVEN,
875
+ group_id: str | NotGiven = NOT_GIVEN,
876
+ input_tokens: float | NotGiven = NOT_GIVEN,
877
+ ip_address: str | NotGiven = NOT_GIVEN,
878
+ metadata: object | NotGiven = NOT_GIVEN,
879
+ method: str | NotGiven = NOT_GIVEN,
880
+ model: Literal[
881
+ "openai:gpt-4.1",
882
+ "openai:gpt-4o",
883
+ "openai:gpt-4o-mini",
884
+ "openai:gpt-4",
885
+ "openai:gpt-3.5-turbo",
886
+ "openai:o1",
887
+ "openai:o1-mini",
888
+ "openai:o3-mini",
889
+ "anthropic:claude-3-opus",
890
+ "anthropic:claude-3-sonnet",
891
+ "anthropic:claude-3-haiku",
892
+ "google:gemini-pro",
893
+ "meta:llama-3",
894
+ ]
895
+ | NotGiven = NOT_GIVEN,
896
+ output_tokens: float | NotGiven = NOT_GIVEN,
897
+ performance_data: object | NotGiven = NOT_GIVEN,
898
+ reasoning_tokens: float | NotGiven = NOT_GIVEN,
899
+ resource_id: str | NotGiven = NOT_GIVEN,
900
+ resource_type: str | NotGiven = NOT_GIVEN,
901
+ response_time: float | NotGiven = NOT_GIVEN,
902
+ session_id: str | NotGiven = NOT_GIVEN,
903
+ status_code: float | NotGiven = NOT_GIVEN,
904
+ total_tokens: float | NotGiven = NOT_GIVEN,
905
+ user_agent: str | NotGiven = NOT_GIVEN,
906
+ user_id: str | NotGiven = NOT_GIVEN,
907
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
908
+ # The extra values given here take precedence over values defined on the client or passed to this method.
909
+ extra_headers: Headers | None = None,
910
+ extra_query: Query | None = None,
911
+ extra_body: Body | None = None,
912
+ timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
913
+ ) -> None:
914
+ """
915
+ Args:
916
+ event_type: Type of usage event
917
+
918
+ cache_hit: Whether response was served from cache
919
+
920
+ component_name: Component name
921
+
922
+ component_type: Component type
923
+
924
+ content_size: Size of content in bytes
925
+
926
+ endpoint: API endpoint accessed
927
+
928
+ file_size: File size in bytes
929
+
930
+ file_type: File MIME type
931
+
932
+ group_id: Group ID for collaborative sessions
933
+
934
+ input_tokens: Number of input tokens
935
+
936
+ ip_address: Client IP address
937
+
938
+ metadata: Additional metadata
939
+
940
+ method: HTTP method used
941
+
942
+ model: AI model used
943
+
944
+ output_tokens: Number of output tokens
945
+
946
+ performance_data: Performance metrics data
947
+
948
+ reasoning_tokens: Number of reasoning tokens
949
+
950
+ resource_id: Resource ID being accessed
951
+
952
+ resource_type: Type of resource
953
+
954
+ response_time: Response time in milliseconds
955
+
956
+ session_id: Session ID
957
+
958
+ status_code: HTTP status code
959
+
960
+ total_tokens: Total number of tokens
961
+
962
+ user_agent: Client user agent
963
+
964
+ user_id: User ID
965
+
966
+ extra_headers: Send extra headers
967
+
968
+ extra_query: Add additional query parameters to the request
969
+
970
+ extra_body: Add additional JSON properties to the request
971
+
972
+ timeout: Override the client-level default timeout for this request, in seconds
973
+ """
974
+ extra_headers = {"Accept": "*/*", **(extra_headers or {})}
975
+ return await self._post(
976
+ "/api/v1/usage/track",
977
+ body=await async_maybe_transform(
978
+ {
979
+ "event_type": event_type,
980
+ "cache_hit": cache_hit,
981
+ "component_name": component_name,
982
+ "component_type": component_type,
983
+ "content_size": content_size,
984
+ "endpoint": endpoint,
985
+ "file_size": file_size,
986
+ "file_type": file_type,
987
+ "group_id": group_id,
988
+ "input_tokens": input_tokens,
989
+ "ip_address": ip_address,
990
+ "metadata": metadata,
991
+ "method": method,
992
+ "model": model,
993
+ "output_tokens": output_tokens,
994
+ "performance_data": performance_data,
995
+ "reasoning_tokens": reasoning_tokens,
996
+ "resource_id": resource_id,
997
+ "resource_type": resource_type,
998
+ "response_time": response_time,
999
+ "session_id": session_id,
1000
+ "status_code": status_code,
1001
+ "total_tokens": total_tokens,
1002
+ "user_agent": user_agent,
1003
+ "user_id": user_id,
1004
+ },
1005
+ usage_track_event_params.UsageTrackEventParams,
1006
+ ),
1007
+ options=make_request_options(
1008
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
1009
+ ),
1010
+ cast_to=NoneType,
1011
+ )
1012
+
1013
+ async def track_performance(
1014
+ self,
1015
+ *,
1016
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
1017
+ # The extra values given here take precedence over values defined on the client or passed to this method.
1018
+ extra_headers: Headers | None = None,
1019
+ extra_query: Query | None = None,
1020
+ extra_body: Body | None = None,
1021
+ timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
1022
+ ) -> None:
1023
+ extra_headers = {"Accept": "*/*", **(extra_headers or {})}
1024
+ return await self._post(
1025
+ "/api/v1/usage/performance",
1026
+ options=make_request_options(
1027
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
1028
+ ),
1029
+ cast_to=NoneType,
1030
+ )
1031
+
1032
+
1033
+ class UsageResourceWithRawResponse:
1034
+ def __init__(self, usage: UsageResource) -> None:
1035
+ self._usage = usage
1036
+
1037
+ self.get_stats = to_raw_response_wrapper(
1038
+ usage.get_stats,
1039
+ )
1040
+ self.get_summary = to_raw_response_wrapper(
1041
+ usage.get_summary,
1042
+ )
1043
+ self.list_events = to_raw_response_wrapper(
1044
+ usage.list_events,
1045
+ )
1046
+ self.track_chat = to_raw_response_wrapper(
1047
+ usage.track_chat,
1048
+ )
1049
+ self.track_event = to_raw_response_wrapper(
1050
+ usage.track_event,
1051
+ )
1052
+ self.track_performance = to_raw_response_wrapper(
1053
+ usage.track_performance,
1054
+ )
1055
+
1056
+
1057
+ class AsyncUsageResourceWithRawResponse:
1058
+ def __init__(self, usage: AsyncUsageResource) -> None:
1059
+ self._usage = usage
1060
+
1061
+ self.get_stats = async_to_raw_response_wrapper(
1062
+ usage.get_stats,
1063
+ )
1064
+ self.get_summary = async_to_raw_response_wrapper(
1065
+ usage.get_summary,
1066
+ )
1067
+ self.list_events = async_to_raw_response_wrapper(
1068
+ usage.list_events,
1069
+ )
1070
+ self.track_chat = async_to_raw_response_wrapper(
1071
+ usage.track_chat,
1072
+ )
1073
+ self.track_event = async_to_raw_response_wrapper(
1074
+ usage.track_event,
1075
+ )
1076
+ self.track_performance = async_to_raw_response_wrapper(
1077
+ usage.track_performance,
1078
+ )
1079
+
1080
+
1081
+ class UsageResourceWithStreamingResponse:
1082
+ def __init__(self, usage: UsageResource) -> None:
1083
+ self._usage = usage
1084
+
1085
+ self.get_stats = to_streamed_response_wrapper(
1086
+ usage.get_stats,
1087
+ )
1088
+ self.get_summary = to_streamed_response_wrapper(
1089
+ usage.get_summary,
1090
+ )
1091
+ self.list_events = to_streamed_response_wrapper(
1092
+ usage.list_events,
1093
+ )
1094
+ self.track_chat = to_streamed_response_wrapper(
1095
+ usage.track_chat,
1096
+ )
1097
+ self.track_event = to_streamed_response_wrapper(
1098
+ usage.track_event,
1099
+ )
1100
+ self.track_performance = to_streamed_response_wrapper(
1101
+ usage.track_performance,
1102
+ )
1103
+
1104
+
1105
+ class AsyncUsageResourceWithStreamingResponse:
1106
+ def __init__(self, usage: AsyncUsageResource) -> None:
1107
+ self._usage = usage
1108
+
1109
+ self.get_stats = async_to_streamed_response_wrapper(
1110
+ usage.get_stats,
1111
+ )
1112
+ self.get_summary = async_to_streamed_response_wrapper(
1113
+ usage.get_summary,
1114
+ )
1115
+ self.list_events = async_to_streamed_response_wrapper(
1116
+ usage.list_events,
1117
+ )
1118
+ self.track_chat = async_to_streamed_response_wrapper(
1119
+ usage.track_chat,
1120
+ )
1121
+ self.track_event = async_to_streamed_response_wrapper(
1122
+ usage.track_event,
1123
+ )
1124
+ self.track_performance = async_to_streamed_response_wrapper(
1125
+ usage.track_performance,
1126
+ )