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.
- studyfetch_sdk/__init__.py +100 -0
- studyfetch_sdk/_base_client.py +1992 -0
- studyfetch_sdk/_client.py +403 -0
- studyfetch_sdk/_compat.py +219 -0
- studyfetch_sdk/_constants.py +14 -0
- studyfetch_sdk/_exceptions.py +108 -0
- studyfetch_sdk/_files.py +123 -0
- studyfetch_sdk/_models.py +808 -0
- studyfetch_sdk/_qs.py +150 -0
- studyfetch_sdk/_resource.py +43 -0
- studyfetch_sdk/_response.py +832 -0
- studyfetch_sdk/_streaming.py +333 -0
- studyfetch_sdk/_types.py +219 -0
- studyfetch_sdk/_utils/__init__.py +57 -0
- studyfetch_sdk/_utils/_logs.py +25 -0
- studyfetch_sdk/_utils/_proxy.py +65 -0
- studyfetch_sdk/_utils/_reflection.py +42 -0
- studyfetch_sdk/_utils/_resources_proxy.py +24 -0
- studyfetch_sdk/_utils/_streams.py +12 -0
- studyfetch_sdk/_utils/_sync.py +86 -0
- studyfetch_sdk/_utils/_transform.py +447 -0
- studyfetch_sdk/_utils/_typing.py +151 -0
- studyfetch_sdk/_utils/_utils.py +422 -0
- studyfetch_sdk/_version.py +4 -0
- studyfetch_sdk/lib/.keep +4 -0
- studyfetch_sdk/py.typed +0 -0
- studyfetch_sdk/resources/__init__.py +19 -0
- studyfetch_sdk/resources/v1/__init__.py +215 -0
- studyfetch_sdk/resources/v1/audio_recaps/__init__.py +33 -0
- studyfetch_sdk/resources/v1/audio_recaps/audio_recaps.py +328 -0
- studyfetch_sdk/resources/v1/audio_recaps/sections.py +250 -0
- studyfetch_sdk/resources/v1/auth/__init__.py +61 -0
- studyfetch_sdk/resources/v1/auth/auth.py +620 -0
- studyfetch_sdk/resources/v1/auth/login.py +374 -0
- studyfetch_sdk/resources/v1/auth/number_2fa.py +457 -0
- studyfetch_sdk/resources/v1/auth/organization_invites.py +160 -0
- studyfetch_sdk/resources/v1/chat/__init__.py +47 -0
- studyfetch_sdk/resources/v1/chat/chat.py +576 -0
- studyfetch_sdk/resources/v1/chat/sessions.py +222 -0
- studyfetch_sdk/resources/v1/chat/test.py +190 -0
- studyfetch_sdk/resources/v1/components.py +943 -0
- studyfetch_sdk/resources/v1/embed/__init__.py +33 -0
- studyfetch_sdk/resources/v1/embed/component.py +278 -0
- studyfetch_sdk/resources/v1/embed/embed.py +346 -0
- studyfetch_sdk/resources/v1/explainers.py +216 -0
- studyfetch_sdk/resources/v1/flashcards.py +783 -0
- studyfetch_sdk/resources/v1/folders.py +744 -0
- studyfetch_sdk/resources/v1/materials/__init__.py +61 -0
- studyfetch_sdk/resources/v1/materials/bulk.py +134 -0
- studyfetch_sdk/resources/v1/materials/materials.py +1029 -0
- studyfetch_sdk/resources/v1/materials/test.py +290 -0
- studyfetch_sdk/resources/v1/materials/upload.py +410 -0
- studyfetch_sdk/resources/v1/organizations/__init__.py +103 -0
- studyfetch_sdk/resources/v1/organizations/api_keys.py +260 -0
- studyfetch_sdk/resources/v1/organizations/logo/__init__.py +33 -0
- studyfetch_sdk/resources/v1/organizations/logo/logo.py +166 -0
- studyfetch_sdk/resources/v1/organizations/logo/upload.py +184 -0
- studyfetch_sdk/resources/v1/organizations/organizations.py +428 -0
- studyfetch_sdk/resources/v1/organizations/profile/__init__.py +47 -0
- studyfetch_sdk/resources/v1/organizations/profile/models.py +134 -0
- studyfetch_sdk/resources/v1/organizations/profile/profile.py +248 -0
- studyfetch_sdk/resources/v1/organizations/profile/team.py +462 -0
- studyfetch_sdk/resources/v1/organizations/team/__init__.py +33 -0
- studyfetch_sdk/resources/v1/organizations/team/invite.py +236 -0
- studyfetch_sdk/resources/v1/organizations/team/team.py +564 -0
- studyfetch_sdk/resources/v1/organizations/theme.py +184 -0
- studyfetch_sdk/resources/v1/organizations/usage.py +160 -0
- studyfetch_sdk/resources/v1/scenarios/__init__.py +61 -0
- studyfetch_sdk/resources/v1/scenarios/component.py +330 -0
- studyfetch_sdk/resources/v1/scenarios/scenarios.py +708 -0
- studyfetch_sdk/resources/v1/scenarios/sessions.py +236 -0
- studyfetch_sdk/resources/v1/scenarios/submissions/__init__.py +33 -0
- studyfetch_sdk/resources/v1/scenarios/submissions/submissions.py +102 -0
- studyfetch_sdk/resources/v1/scenarios/submissions/user.py +210 -0
- studyfetch_sdk/resources/v1/tests/__init__.py +33 -0
- studyfetch_sdk/resources/v1/tests/component.py +160 -0
- studyfetch_sdk/resources/v1/tests/tests.py +682 -0
- studyfetch_sdk/resources/v1/upload/__init__.py +33 -0
- studyfetch_sdk/resources/v1/upload/component.py +388 -0
- studyfetch_sdk/resources/v1/upload/upload.py +102 -0
- studyfetch_sdk/resources/v1/usage.py +1126 -0
- studyfetch_sdk/resources/v1/v1.py +518 -0
- studyfetch_sdk/types/__init__.py +3 -0
- studyfetch_sdk/types/v1/__init__.py +52 -0
- studyfetch_sdk/types/v1/admin/__init__.py +3 -0
- studyfetch_sdk/types/v1/admin/organizations/__init__.py +3 -0
- studyfetch_sdk/types/v1/admin/organizations/models/__init__.py +3 -0
- studyfetch_sdk/types/v1/audio_recaps/__init__.py +3 -0
- studyfetch_sdk/types/v1/auth/__init__.py +13 -0
- studyfetch_sdk/types/v1/auth/login_authenticate_params.py +15 -0
- studyfetch_sdk/types/v1/auth/login_verify_2fa_params.py +15 -0
- studyfetch_sdk/types/v1/auth/login_verify_backup_code_params.py +17 -0
- studyfetch_sdk/types/v1/auth/number_2fa_disable_params.py +12 -0
- studyfetch_sdk/types/v1/auth/number_2fa_enable_params.py +12 -0
- studyfetch_sdk/types/v1/auth/number_2fa_regenerate_backup_codes_params.py +12 -0
- studyfetch_sdk/types/v1/auth/number_2fa_send_code_params.py +12 -0
- studyfetch_sdk/types/v1/auth_register_new_user_params.py +23 -0
- studyfetch_sdk/types/v1/auth_request_password_reset_params.py +12 -0
- studyfetch_sdk/types/v1/auth_reset_password_params.py +17 -0
- studyfetch_sdk/types/v1/chat/__init__.py +5 -0
- studyfetch_sdk/types/v1/chat/session_retrieve_params.py +11 -0
- studyfetch_sdk/types/v1/chat_retrieve_session_params.py +13 -0
- studyfetch_sdk/types/v1/chat_send_message_params.py +54 -0
- studyfetch_sdk/types/v1/chat_stream_params.py +28 -0
- studyfetch_sdk/types/v1/component_create_params.py +29 -0
- studyfetch_sdk/types/v1/component_create_response.py +46 -0
- studyfetch_sdk/types/v1/component_embed_params.py +99 -0
- studyfetch_sdk/types/v1/component_embed_response.py +38 -0
- studyfetch_sdk/types/v1/component_list_params.py +14 -0
- studyfetch_sdk/types/v1/component_list_response.py +49 -0
- studyfetch_sdk/types/v1/component_retrieve_response.py +46 -0
- studyfetch_sdk/types/v1/component_update_params.py +12 -0
- studyfetch_sdk/types/v1/component_update_response.py +46 -0
- studyfetch_sdk/types/v1/embed/__init__.py +6 -0
- studyfetch_sdk/types/v1/embed/component_interact_params.py +14 -0
- studyfetch_sdk/types/v1/embed/component_retrieve_params.py +12 -0
- studyfetch_sdk/types/v1/embed_get_theme_params.py +12 -0
- studyfetch_sdk/types/v1/embed_verify_params.py +12 -0
- studyfetch_sdk/types/v1/explainer_handle_webhook_params.py +11 -0
- studyfetch_sdk/types/v1/flashcard_batch_process_params.py +36 -0
- studyfetch_sdk/types/v1/flashcard_batch_process_response.py +39 -0
- studyfetch_sdk/types/v1/flashcard_get_algorithm_info_response.py +37 -0
- studyfetch_sdk/types/v1/flashcard_get_all_params.py +23 -0
- studyfetch_sdk/types/v1/flashcard_get_due_params.py +19 -0
- studyfetch_sdk/types/v1/flashcard_get_stats_params.py +17 -0
- studyfetch_sdk/types/v1/flashcard_get_types_response.py +14 -0
- studyfetch_sdk/types/v1/flashcard_rate_params.py +23 -0
- studyfetch_sdk/types/v1/folder_create_params.py +17 -0
- studyfetch_sdk/types/v1/folder_list_params.py +14 -0
- studyfetch_sdk/types/v1/folder_update_params.py +17 -0
- studyfetch_sdk/types/v1/material_create_params.py +34 -0
- studyfetch_sdk/types/v1/material_create_response.py +62 -0
- studyfetch_sdk/types/v1/material_get_download_url_params.py +13 -0
- studyfetch_sdk/types/v1/material_list_params.py +14 -0
- studyfetch_sdk/types/v1/material_list_response.py +65 -0
- studyfetch_sdk/types/v1/material_retrieve_response.py +62 -0
- studyfetch_sdk/types/v1/materials/__init__.py +8 -0
- studyfetch_sdk/types/v1/materials/upload_upload_file_params.py +20 -0
- studyfetch_sdk/types/v1/materials/upload_upload_file_response.py +62 -0
- studyfetch_sdk/types/v1/materials/upload_upload_from_url_params.py +20 -0
- studyfetch_sdk/types/v1/materials/upload_upload_from_url_response.py +62 -0
- studyfetch_sdk/types/v1/organizations/__init__.py +3 -0
- studyfetch_sdk/types/v1/organizations/logo/__init__.py +3 -0
- studyfetch_sdk/types/v1/organizations/profile/__init__.py +3 -0
- studyfetch_sdk/types/v1/organizations/team/__init__.py +3 -0
- studyfetch_sdk/types/v1/scenario_create_params.py +11 -0
- studyfetch_sdk/types/v1/scenario_update_params.py +11 -0
- studyfetch_sdk/types/v1/scenarios/__init__.py +5 -0
- studyfetch_sdk/types/v1/scenarios/component_update_params.py +11 -0
- studyfetch_sdk/types/v1/scenarios/submissions/__init__.py +3 -0
- studyfetch_sdk/types/v1/test_create_params.py +20 -0
- studyfetch_sdk/types/v1/test_retake_params.py +14 -0
- studyfetch_sdk/types/v1/test_submit_answer_params.py +20 -0
- studyfetch_sdk/types/v1/test_submit_params.py +14 -0
- studyfetch_sdk/types/v1/tests/__init__.py +3 -0
- studyfetch_sdk/types/v1/upload/__init__.py +3 -0
- studyfetch_sdk/types/v1/usage_get_stats_params.py +23 -0
- studyfetch_sdk/types/v1/usage_get_summary_params.py +23 -0
- studyfetch_sdk/types/v1/usage_list_events_params.py +61 -0
- studyfetch_sdk/types/v1/usage_track_chat_params.py +54 -0
- studyfetch_sdk/types/v1/usage_track_event_params.py +128 -0
- studyfetch_sdk-0.1.0a1.dist-info/METADATA +453 -0
- studyfetch_sdk-0.1.0a1.dist-info/RECORD +165 -0
- studyfetch_sdk-0.1.0a1.dist-info/WHEEL +4 -0
- 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
|
+
)
|