studyfetch-sdk 0.1.0a4__py3-none-any.whl → 0.1.0a6__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 (45) hide show
  1. studyfetch_sdk/_version.py +1 -1
  2. studyfetch_sdk/resources/v1/__init__.py +12 -12
  3. studyfetch_sdk/resources/v1/chat/chat.py +13 -15
  4. studyfetch_sdk/resources/v1/components.py +40 -37
  5. studyfetch_sdk/resources/v1/explainers.py +234 -9
  6. studyfetch_sdk/resources/v1/flashcards.py +15 -15
  7. studyfetch_sdk/resources/v1/materials/materials.py +19 -20
  8. studyfetch_sdk/resources/v1/materials/upload.py +19 -20
  9. studyfetch_sdk/resources/v1/scenarios/component.py +116 -12
  10. studyfetch_sdk/resources/v1/scenarios/scenarios.py +255 -19
  11. studyfetch_sdk/resources/v1/scenarios/submissions/user.py +50 -50
  12. studyfetch_sdk/resources/v1/v1.py +48 -48
  13. studyfetch_sdk/types/v1/__init__.py +8 -11
  14. studyfetch_sdk/types/v1/{chat_retrieve_session_params.py → chat_get_session_params.py} +2 -2
  15. studyfetch_sdk/types/v1/{component_create_response.py → component.py} +2 -2
  16. studyfetch_sdk/types/v1/component_create_params.py +60 -6
  17. studyfetch_sdk/types/v1/{component_embed_params.py → component_generate_embed_params.py} +2 -2
  18. studyfetch_sdk/types/v1/{component_embed_response.py → component_generate_embed_response.py} +2 -2
  19. studyfetch_sdk/types/v1/component_list_response.py +5 -46
  20. studyfetch_sdk/types/v1/explainer_create_params.py +45 -0
  21. studyfetch_sdk/types/v1/explainer_handle_webhook_params.py +45 -3
  22. studyfetch_sdk/types/v1/{flashcard_get_algorithm_info_response.py → flashcard_get_algorithm_response.py} +2 -2
  23. studyfetch_sdk/types/v1/{material_create_response.py → material.py} +2 -2
  24. studyfetch_sdk/types/v1/material_list_response.py +5 -60
  25. studyfetch_sdk/types/v1/materials/__init__.py +0 -2
  26. studyfetch_sdk/types/v1/scenario_create_params.py +39 -2
  27. studyfetch_sdk/types/v1/scenario_submit_answer_params.py +18 -0
  28. studyfetch_sdk/types/v1/scenario_update_params.py +39 -2
  29. studyfetch_sdk/types/v1/scenarios/component_update_params.py +39 -2
  30. {studyfetch_sdk-0.1.0a4.dist-info → studyfetch_sdk-0.1.0a6.dist-info}/METADATA +28 -12
  31. {studyfetch_sdk-0.1.0a4.dist-info → studyfetch_sdk-0.1.0a6.dist-info}/RECORD +33 -43
  32. studyfetch_sdk/types/v1/admin/__init__.py +0 -3
  33. studyfetch_sdk/types/v1/admin/organizations/__init__.py +0 -3
  34. studyfetch_sdk/types/v1/admin/organizations/models/__init__.py +0 -3
  35. studyfetch_sdk/types/v1/component_retrieve_response.py +0 -48
  36. studyfetch_sdk/types/v1/component_update_response.py +0 -48
  37. studyfetch_sdk/types/v1/material_retrieve_response.py +0 -62
  38. studyfetch_sdk/types/v1/materials/upload_upload_file_response.py +0 -62
  39. studyfetch_sdk/types/v1/materials/upload_upload_from_url_response.py +0 -62
  40. studyfetch_sdk/types/v1/organizations/__init__.py +0 -3
  41. studyfetch_sdk/types/v1/organizations/logo/__init__.py +0 -3
  42. studyfetch_sdk/types/v1/organizations/profile/__init__.py +0 -3
  43. studyfetch_sdk/types/v1/organizations/team/__init__.py +0 -3
  44. {studyfetch_sdk-0.1.0a4.dist-info → studyfetch_sdk-0.1.0a6.dist-info}/WHEEL +0 -0
  45. {studyfetch_sdk-0.1.0a4.dist-info → studyfetch_sdk-0.1.0a6.dist-info}/licenses/LICENSE +0 -0
@@ -121,10 +121,6 @@ class V1Resource(SyncAPIResource):
121
121
  def materials(self) -> MaterialsResource:
122
122
  return MaterialsResource(self._client)
123
123
 
124
- @cached_property
125
- def usage(self) -> UsageResource:
126
- return UsageResource(self._client)
127
-
128
124
  @cached_property
129
125
  def folders(self) -> FoldersResource:
130
126
  return FoldersResource(self._client)
@@ -133,6 +129,10 @@ class V1Resource(SyncAPIResource):
133
129
  def components(self) -> ComponentsResource:
134
130
  return ComponentsResource(self._client)
135
131
 
132
+ @cached_property
133
+ def usage(self) -> UsageResource:
134
+ return UsageResource(self._client)
135
+
136
136
  @cached_property
137
137
  def embed(self) -> EmbedResource:
138
138
  return EmbedResource(self._client)
@@ -141,10 +141,6 @@ class V1Resource(SyncAPIResource):
141
141
  def chat(self) -> ChatResource:
142
142
  return ChatResource(self._client)
143
143
 
144
- @cached_property
145
- def flashcards(self) -> FlashcardsResource:
146
- return FlashcardsResource(self._client)
147
-
148
144
  @cached_property
149
145
  def tests(self) -> TestsResource:
150
146
  return TestsResource(self._client)
@@ -153,6 +149,10 @@ class V1Resource(SyncAPIResource):
153
149
  def audio_recaps(self) -> AudioRecapsResource:
154
150
  return AudioRecapsResource(self._client)
155
151
 
152
+ @cached_property
153
+ def flashcards(self) -> FlashcardsResource:
154
+ return FlashcardsResource(self._client)
155
+
156
156
  @cached_property
157
157
  def scenarios(self) -> ScenariosResource:
158
158
  return ScenariosResource(self._client)
@@ -194,10 +194,6 @@ class AsyncV1Resource(AsyncAPIResource):
194
194
  def materials(self) -> AsyncMaterialsResource:
195
195
  return AsyncMaterialsResource(self._client)
196
196
 
197
- @cached_property
198
- def usage(self) -> AsyncUsageResource:
199
- return AsyncUsageResource(self._client)
200
-
201
197
  @cached_property
202
198
  def folders(self) -> AsyncFoldersResource:
203
199
  return AsyncFoldersResource(self._client)
@@ -206,6 +202,10 @@ class AsyncV1Resource(AsyncAPIResource):
206
202
  def components(self) -> AsyncComponentsResource:
207
203
  return AsyncComponentsResource(self._client)
208
204
 
205
+ @cached_property
206
+ def usage(self) -> AsyncUsageResource:
207
+ return AsyncUsageResource(self._client)
208
+
209
209
  @cached_property
210
210
  def embed(self) -> AsyncEmbedResource:
211
211
  return AsyncEmbedResource(self._client)
@@ -214,10 +214,6 @@ class AsyncV1Resource(AsyncAPIResource):
214
214
  def chat(self) -> AsyncChatResource:
215
215
  return AsyncChatResource(self._client)
216
216
 
217
- @cached_property
218
- def flashcards(self) -> AsyncFlashcardsResource:
219
- return AsyncFlashcardsResource(self._client)
220
-
221
217
  @cached_property
222
218
  def tests(self) -> AsyncTestsResource:
223
219
  return AsyncTestsResource(self._client)
@@ -226,6 +222,10 @@ class AsyncV1Resource(AsyncAPIResource):
226
222
  def audio_recaps(self) -> AsyncAudioRecapsResource:
227
223
  return AsyncAudioRecapsResource(self._client)
228
224
 
225
+ @cached_property
226
+ def flashcards(self) -> AsyncFlashcardsResource:
227
+ return AsyncFlashcardsResource(self._client)
228
+
229
229
  @cached_property
230
230
  def scenarios(self) -> AsyncScenariosResource:
231
231
  return AsyncScenariosResource(self._client)
@@ -270,10 +270,6 @@ class V1ResourceWithRawResponse:
270
270
  def materials(self) -> MaterialsResourceWithRawResponse:
271
271
  return MaterialsResourceWithRawResponse(self._v1.materials)
272
272
 
273
- @cached_property
274
- def usage(self) -> UsageResourceWithRawResponse:
275
- return UsageResourceWithRawResponse(self._v1.usage)
276
-
277
273
  @cached_property
278
274
  def folders(self) -> FoldersResourceWithRawResponse:
279
275
  return FoldersResourceWithRawResponse(self._v1.folders)
@@ -282,6 +278,10 @@ class V1ResourceWithRawResponse:
282
278
  def components(self) -> ComponentsResourceWithRawResponse:
283
279
  return ComponentsResourceWithRawResponse(self._v1.components)
284
280
 
281
+ @cached_property
282
+ def usage(self) -> UsageResourceWithRawResponse:
283
+ return UsageResourceWithRawResponse(self._v1.usage)
284
+
285
285
  @cached_property
286
286
  def embed(self) -> EmbedResourceWithRawResponse:
287
287
  return EmbedResourceWithRawResponse(self._v1.embed)
@@ -290,10 +290,6 @@ class V1ResourceWithRawResponse:
290
290
  def chat(self) -> ChatResourceWithRawResponse:
291
291
  return ChatResourceWithRawResponse(self._v1.chat)
292
292
 
293
- @cached_property
294
- def flashcards(self) -> FlashcardsResourceWithRawResponse:
295
- return FlashcardsResourceWithRawResponse(self._v1.flashcards)
296
-
297
293
  @cached_property
298
294
  def tests(self) -> TestsResourceWithRawResponse:
299
295
  return TestsResourceWithRawResponse(self._v1.tests)
@@ -302,6 +298,10 @@ class V1ResourceWithRawResponse:
302
298
  def audio_recaps(self) -> AudioRecapsResourceWithRawResponse:
303
299
  return AudioRecapsResourceWithRawResponse(self._v1.audio_recaps)
304
300
 
301
+ @cached_property
302
+ def flashcards(self) -> FlashcardsResourceWithRawResponse:
303
+ return FlashcardsResourceWithRawResponse(self._v1.flashcards)
304
+
305
305
  @cached_property
306
306
  def scenarios(self) -> ScenariosResourceWithRawResponse:
307
307
  return ScenariosResourceWithRawResponse(self._v1.scenarios)
@@ -327,10 +327,6 @@ class AsyncV1ResourceWithRawResponse:
327
327
  def materials(self) -> AsyncMaterialsResourceWithRawResponse:
328
328
  return AsyncMaterialsResourceWithRawResponse(self._v1.materials)
329
329
 
330
- @cached_property
331
- def usage(self) -> AsyncUsageResourceWithRawResponse:
332
- return AsyncUsageResourceWithRawResponse(self._v1.usage)
333
-
334
330
  @cached_property
335
331
  def folders(self) -> AsyncFoldersResourceWithRawResponse:
336
332
  return AsyncFoldersResourceWithRawResponse(self._v1.folders)
@@ -339,6 +335,10 @@ class AsyncV1ResourceWithRawResponse:
339
335
  def components(self) -> AsyncComponentsResourceWithRawResponse:
340
336
  return AsyncComponentsResourceWithRawResponse(self._v1.components)
341
337
 
338
+ @cached_property
339
+ def usage(self) -> AsyncUsageResourceWithRawResponse:
340
+ return AsyncUsageResourceWithRawResponse(self._v1.usage)
341
+
342
342
  @cached_property
343
343
  def embed(self) -> AsyncEmbedResourceWithRawResponse:
344
344
  return AsyncEmbedResourceWithRawResponse(self._v1.embed)
@@ -347,10 +347,6 @@ class AsyncV1ResourceWithRawResponse:
347
347
  def chat(self) -> AsyncChatResourceWithRawResponse:
348
348
  return AsyncChatResourceWithRawResponse(self._v1.chat)
349
349
 
350
- @cached_property
351
- def flashcards(self) -> AsyncFlashcardsResourceWithRawResponse:
352
- return AsyncFlashcardsResourceWithRawResponse(self._v1.flashcards)
353
-
354
350
  @cached_property
355
351
  def tests(self) -> AsyncTestsResourceWithRawResponse:
356
352
  return AsyncTestsResourceWithRawResponse(self._v1.tests)
@@ -359,6 +355,10 @@ class AsyncV1ResourceWithRawResponse:
359
355
  def audio_recaps(self) -> AsyncAudioRecapsResourceWithRawResponse:
360
356
  return AsyncAudioRecapsResourceWithRawResponse(self._v1.audio_recaps)
361
357
 
358
+ @cached_property
359
+ def flashcards(self) -> AsyncFlashcardsResourceWithRawResponse:
360
+ return AsyncFlashcardsResourceWithRawResponse(self._v1.flashcards)
361
+
362
362
  @cached_property
363
363
  def scenarios(self) -> AsyncScenariosResourceWithRawResponse:
364
364
  return AsyncScenariosResourceWithRawResponse(self._v1.scenarios)
@@ -384,10 +384,6 @@ class V1ResourceWithStreamingResponse:
384
384
  def materials(self) -> MaterialsResourceWithStreamingResponse:
385
385
  return MaterialsResourceWithStreamingResponse(self._v1.materials)
386
386
 
387
- @cached_property
388
- def usage(self) -> UsageResourceWithStreamingResponse:
389
- return UsageResourceWithStreamingResponse(self._v1.usage)
390
-
391
387
  @cached_property
392
388
  def folders(self) -> FoldersResourceWithStreamingResponse:
393
389
  return FoldersResourceWithStreamingResponse(self._v1.folders)
@@ -396,6 +392,10 @@ class V1ResourceWithStreamingResponse:
396
392
  def components(self) -> ComponentsResourceWithStreamingResponse:
397
393
  return ComponentsResourceWithStreamingResponse(self._v1.components)
398
394
 
395
+ @cached_property
396
+ def usage(self) -> UsageResourceWithStreamingResponse:
397
+ return UsageResourceWithStreamingResponse(self._v1.usage)
398
+
399
399
  @cached_property
400
400
  def embed(self) -> EmbedResourceWithStreamingResponse:
401
401
  return EmbedResourceWithStreamingResponse(self._v1.embed)
@@ -404,10 +404,6 @@ class V1ResourceWithStreamingResponse:
404
404
  def chat(self) -> ChatResourceWithStreamingResponse:
405
405
  return ChatResourceWithStreamingResponse(self._v1.chat)
406
406
 
407
- @cached_property
408
- def flashcards(self) -> FlashcardsResourceWithStreamingResponse:
409
- return FlashcardsResourceWithStreamingResponse(self._v1.flashcards)
410
-
411
407
  @cached_property
412
408
  def tests(self) -> TestsResourceWithStreamingResponse:
413
409
  return TestsResourceWithStreamingResponse(self._v1.tests)
@@ -416,6 +412,10 @@ class V1ResourceWithStreamingResponse:
416
412
  def audio_recaps(self) -> AudioRecapsResourceWithStreamingResponse:
417
413
  return AudioRecapsResourceWithStreamingResponse(self._v1.audio_recaps)
418
414
 
415
+ @cached_property
416
+ def flashcards(self) -> FlashcardsResourceWithStreamingResponse:
417
+ return FlashcardsResourceWithStreamingResponse(self._v1.flashcards)
418
+
419
419
  @cached_property
420
420
  def scenarios(self) -> ScenariosResourceWithStreamingResponse:
421
421
  return ScenariosResourceWithStreamingResponse(self._v1.scenarios)
@@ -441,10 +441,6 @@ class AsyncV1ResourceWithStreamingResponse:
441
441
  def materials(self) -> AsyncMaterialsResourceWithStreamingResponse:
442
442
  return AsyncMaterialsResourceWithStreamingResponse(self._v1.materials)
443
443
 
444
- @cached_property
445
- def usage(self) -> AsyncUsageResourceWithStreamingResponse:
446
- return AsyncUsageResourceWithStreamingResponse(self._v1.usage)
447
-
448
444
  @cached_property
449
445
  def folders(self) -> AsyncFoldersResourceWithStreamingResponse:
450
446
  return AsyncFoldersResourceWithStreamingResponse(self._v1.folders)
@@ -453,6 +449,10 @@ class AsyncV1ResourceWithStreamingResponse:
453
449
  def components(self) -> AsyncComponentsResourceWithStreamingResponse:
454
450
  return AsyncComponentsResourceWithStreamingResponse(self._v1.components)
455
451
 
452
+ @cached_property
453
+ def usage(self) -> AsyncUsageResourceWithStreamingResponse:
454
+ return AsyncUsageResourceWithStreamingResponse(self._v1.usage)
455
+
456
456
  @cached_property
457
457
  def embed(self) -> AsyncEmbedResourceWithStreamingResponse:
458
458
  return AsyncEmbedResourceWithStreamingResponse(self._v1.embed)
@@ -461,10 +461,6 @@ class AsyncV1ResourceWithStreamingResponse:
461
461
  def chat(self) -> AsyncChatResourceWithStreamingResponse:
462
462
  return AsyncChatResourceWithStreamingResponse(self._v1.chat)
463
463
 
464
- @cached_property
465
- def flashcards(self) -> AsyncFlashcardsResourceWithStreamingResponse:
466
- return AsyncFlashcardsResourceWithStreamingResponse(self._v1.flashcards)
467
-
468
464
  @cached_property
469
465
  def tests(self) -> AsyncTestsResourceWithStreamingResponse:
470
466
  return AsyncTestsResourceWithStreamingResponse(self._v1.tests)
@@ -473,6 +469,10 @@ class AsyncV1ResourceWithStreamingResponse:
473
469
  def audio_recaps(self) -> AsyncAudioRecapsResourceWithStreamingResponse:
474
470
  return AsyncAudioRecapsResourceWithStreamingResponse(self._v1.audio_recaps)
475
471
 
472
+ @cached_property
473
+ def flashcards(self) -> AsyncFlashcardsResourceWithStreamingResponse:
474
+ return AsyncFlashcardsResourceWithStreamingResponse(self._v1.flashcards)
475
+
476
476
  @cached_property
477
477
  def scenarios(self) -> AsyncScenariosResourceWithStreamingResponse:
478
478
  return AsyncScenariosResourceWithStreamingResponse(self._v1.scenarios)
@@ -2,6 +2,8 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ from .material import Material as Material
6
+ from .component import Component as Component
5
7
  from .chat_stream_params import ChatStreamParams as ChatStreamParams
6
8
  from .folder_list_params import FolderListParams as FolderListParams
7
9
  from .test_create_params import TestCreateParams as TestCreateParams
@@ -13,35 +15,30 @@ from .folder_update_params import FolderUpdateParams as FolderUpdateParams
13
15
  from .material_list_params import MaterialListParams as MaterialListParams
14
16
  from .component_list_params import ComponentListParams as ComponentListParams
15
17
  from .flashcard_rate_params import FlashcardRateParams as FlashcardRateParams
16
- from .component_embed_params import ComponentEmbedParams as ComponentEmbedParams
17
18
  from .embed_get_theme_params import EmbedGetThemeParams as EmbedGetThemeParams
18
19
  from .material_create_params import MaterialCreateParams as MaterialCreateParams
19
20
  from .material_list_response import MaterialListResponse as MaterialListResponse
20
21
  from .scenario_create_params import ScenarioCreateParams as ScenarioCreateParams
21
22
  from .scenario_update_params import ScenarioUpdateParams as ScenarioUpdateParams
22
23
  from .usage_get_stats_params import UsageGetStatsParams as UsageGetStatsParams
24
+ from .chat_get_session_params import ChatGetSessionParams as ChatGetSessionParams
23
25
  from .component_create_params import ComponentCreateParams as ComponentCreateParams
24
26
  from .component_list_response import ComponentListResponse as ComponentListResponse
25
27
  from .component_update_params import ComponentUpdateParams as ComponentUpdateParams
28
+ from .explainer_create_params import ExplainerCreateParams as ExplainerCreateParams
26
29
  from .chat_send_message_params import ChatSendMessageParams as ChatSendMessageParams
27
- from .component_embed_response import ComponentEmbedResponse as ComponentEmbedResponse
28
30
  from .flashcard_get_all_params import FlashcardGetAllParams as FlashcardGetAllParams
29
31
  from .flashcard_get_due_params import FlashcardGetDueParams as FlashcardGetDueParams
30
- from .material_create_response import MaterialCreateResponse as MaterialCreateResponse
31
32
  from .usage_get_summary_params import UsageGetSummaryParams as UsageGetSummaryParams
32
33
  from .usage_list_events_params import UsageListEventsParams as UsageListEventsParams
33
- from .component_create_response import ComponentCreateResponse as ComponentCreateResponse
34
- from .component_update_response import ComponentUpdateResponse as ComponentUpdateResponse
35
34
  from .test_submit_answer_params import TestSubmitAnswerParams as TestSubmitAnswerParams
36
35
  from .flashcard_get_stats_params import FlashcardGetStatsParams as FlashcardGetStatsParams
37
- from .material_retrieve_response import MaterialRetrieveResponse as MaterialRetrieveResponse
38
- from .component_retrieve_response import ComponentRetrieveResponse as ComponentRetrieveResponse
39
- from .chat_retrieve_session_params import ChatRetrieveSessionParams as ChatRetrieveSessionParams
40
36
  from .flashcard_get_types_response import FlashcardGetTypesResponse as FlashcardGetTypesResponse
37
+ from .scenario_submit_answer_params import ScenarioSubmitAnswerParams as ScenarioSubmitAnswerParams
41
38
  from .flashcard_batch_process_params import FlashcardBatchProcessParams as FlashcardBatchProcessParams
39
+ from .component_generate_embed_params import ComponentGenerateEmbedParams as ComponentGenerateEmbedParams
42
40
  from .explainer_handle_webhook_params import ExplainerHandleWebhookParams as ExplainerHandleWebhookParams
43
41
  from .flashcard_batch_process_response import FlashcardBatchProcessResponse as FlashcardBatchProcessResponse
42
+ from .flashcard_get_algorithm_response import FlashcardGetAlgorithmResponse as FlashcardGetAlgorithmResponse
44
43
  from .material_get_download_url_params import MaterialGetDownloadURLParams as MaterialGetDownloadURLParams
45
- from .flashcard_get_algorithm_info_response import (
46
- FlashcardGetAlgorithmInfoResponse as FlashcardGetAlgorithmInfoResponse,
47
- )
44
+ from .component_generate_embed_response import ComponentGenerateEmbedResponse as ComponentGenerateEmbedResponse
@@ -6,8 +6,8 @@ from typing_extensions import Required, Annotated, TypedDict
6
6
 
7
7
  from ..._utils import PropertyInfo
8
8
 
9
- __all__ = ["ChatRetrieveSessionParams"]
9
+ __all__ = ["ChatGetSessionParams"]
10
10
 
11
11
 
12
- class ChatRetrieveSessionParams(TypedDict, total=False):
12
+ class ChatGetSessionParams(TypedDict, total=False):
13
13
  user_id: Required[Annotated[str, PropertyInfo(alias="userId")]]
@@ -8,10 +8,10 @@ from pydantic import Field as FieldInfo
8
8
 
9
9
  from ..._models import BaseModel
10
10
 
11
- __all__ = ["ComponentCreateResponse"]
11
+ __all__ = ["Component"]
12
12
 
13
13
 
14
- class ComponentCreateResponse(BaseModel):
14
+ class Component(BaseModel):
15
15
  api_id: str = FieldInfo(alias="_id")
16
16
  """Component ID (MongoDB ObjectId)"""
17
17
 
@@ -109,6 +109,9 @@ class ConfigFlashcardsConfigDto(TypedDict, total=False):
109
109
  max_review_interval: Annotated[float, PropertyInfo(alias="maxReviewInterval")]
110
110
  """Maximum review interval in days"""
111
111
 
112
+ model: str
113
+ """AI model to use for flashcard generation"""
114
+
112
115
  total_flashcards: Annotated[float, PropertyInfo(alias="totalFlashcards")]
113
116
  """Total number of flashcards to generate"""
114
117
 
@@ -137,9 +140,15 @@ class ConfigScenariosConfigDtoTool(TypedDict, total=False):
137
140
  name: Required[str]
138
141
  """Tool name"""
139
142
 
143
+ data_format: Annotated[str, PropertyInfo(alias="dataFormat")]
144
+ """Data format provided by the tool"""
145
+
140
146
  description: str
141
147
  """Tool description"""
142
148
 
149
+ type: str
150
+ """Tool type"""
151
+
143
152
 
144
153
  class ConfigScenariosConfigDto(TypedDict, total=False):
145
154
  characters: Iterable[ConfigScenariosConfigDtoCharacter]
@@ -175,6 +184,9 @@ class ConfigScenariosConfigDto(TypedDict, total=False):
175
184
  materials: List[str]
176
185
  """Material IDs"""
177
186
 
187
+ model: str
188
+ """AI model to use for scenario generation"""
189
+
178
190
  placeholder_text: Annotated[str, PropertyInfo(alias="placeholderText")]
179
191
  """Placeholder text"""
180
192
 
@@ -226,6 +238,9 @@ class ConfigPracticeTestConfigDto(TypedDict, total=False):
226
238
  max_attempts: Annotated[float, PropertyInfo(alias="maxAttempts")]
227
239
  """Maximum attempts allowed"""
228
240
 
241
+ model: str
242
+ """AI model to use for question generation and grading"""
243
+
229
244
  passing_score: Annotated[float, PropertyInfo(alias="passingScore")]
230
245
  """Passing score percentage"""
231
246
 
@@ -254,29 +269,68 @@ class ConfigPracticeTestConfigDto(TypedDict, total=False):
254
269
 
255
270
 
256
271
  class ConfigAudioRecapConfigDto(TypedDict, total=False):
272
+ duration: float
273
+ """Duration of audio recap in minutes"""
274
+
257
275
  folders: List[str]
258
276
  """Folder IDs"""
259
277
 
260
- format: Literal["podcast", "summary", "lecture"]
261
- """Audio format"""
278
+ is_multi_voice: Annotated[bool, PropertyInfo(alias="isMultiVoice")]
279
+ """Enable multi-voice conversation mode"""
262
280
 
263
281
  materials: List[str]
264
282
  """Material IDs"""
265
283
 
266
- speed: float
267
- """Playback speed"""
284
+ model: str
285
+ """AI model to use for generation"""
286
+
287
+ num_parts: Annotated[float, PropertyInfo(alias="numParts")]
288
+ """Number of parts to split the audio into"""
289
+
290
+ recap_type: Annotated[Literal["SUMMARY", "LECTURE", "PODCAST", "AUDIO_BOOK"], PropertyInfo(alias="recapType")]
291
+ """Type of audio recap"""
292
+
293
+ theme: str
294
+ """Theme or style for the audio recap"""
268
295
 
269
- voice: str
270
- """Voice to use for audio"""
296
+ topic: str
297
+ """Specific topic to focus on"""
298
+
299
+ voice1: str
300
+ """Primary voice for narration"""
301
+
302
+ voice2: str
303
+ """Secondary voice for multi-voice mode"""
271
304
 
272
305
 
273
306
  class ConfigExplainersConfigDto(TypedDict, total=False):
274
307
  folders: List[str]
275
308
  """Folder IDs"""
276
309
 
310
+ image_search: Annotated[bool, PropertyInfo(alias="imageSearch")]
311
+ """Enable image search for visuals"""
312
+
277
313
  materials: List[str]
278
314
  """Material IDs"""
279
315
 
316
+ model: str
317
+ """AI model to use for generation"""
318
+
319
+ style: str
320
+ """Video style"""
321
+
322
+ target_length: Annotated[float, PropertyInfo(alias="targetLength")]
323
+ """Target length in seconds"""
324
+
325
+ title: str
326
+ """Video title (defaults to component name if not provided)"""
327
+
328
+ vertical_video: Annotated[bool, PropertyInfo(alias="verticalVideo")]
329
+ """Create vertical video format (9:16)"""
330
+
331
+ web_search: Annotated[bool, PropertyInfo(alias="webSearch")]
332
+ """Enable web search for additional content"""
333
+
280
334
 
281
335
  class ConfigUploadsConfigDto(TypedDict, total=False):
282
336
  folder_id: Required[Annotated[str, PropertyInfo(alias="folderId")]]
@@ -7,10 +7,10 @@ from typing_extensions import Annotated, TypedDict
7
7
 
8
8
  from ..._utils import PropertyInfo
9
9
 
10
- __all__ = ["ComponentEmbedParams", "Features", "Theme"]
10
+ __all__ = ["ComponentGenerateEmbedParams", "Features", "Theme"]
11
11
 
12
12
 
13
- class ComponentEmbedParams(TypedDict, total=False):
13
+ class ComponentGenerateEmbedParams(TypedDict, total=False):
14
14
  expiry_hours: Annotated[float, PropertyInfo(alias="expiryHours")]
15
15
  """Token expiry time in hours"""
16
16
 
@@ -7,7 +7,7 @@ from pydantic import Field as FieldInfo
7
7
 
8
8
  from ..._models import BaseModel
9
9
 
10
- __all__ = ["ComponentEmbedResponse", "Options"]
10
+ __all__ = ["ComponentGenerateEmbedResponse", "Options"]
11
11
 
12
12
 
13
13
  class Options(BaseModel):
@@ -18,7 +18,7 @@ class Options(BaseModel):
18
18
  """Embed width"""
19
19
 
20
20
 
21
- class ComponentEmbedResponse(BaseModel):
21
+ class ComponentGenerateEmbedResponse(BaseModel):
22
22
  token: str
23
23
  """JWT token for authentication"""
24
24
 
@@ -1,51 +1,10 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
- from typing import List, Optional
4
- from datetime import datetime
5
- from typing_extensions import Literal, TypeAlias
3
+ from typing import List
4
+ from typing_extensions import TypeAlias
6
5
 
7
- from pydantic import Field as FieldInfo
6
+ from .component import Component
8
7
 
9
- from ..._models import BaseModel
8
+ __all__ = ["ComponentListResponse"]
10
9
 
11
- __all__ = ["ComponentListResponse", "ComponentListResponseItem"]
12
-
13
-
14
- class ComponentListResponseItem(BaseModel):
15
- api_id: str = FieldInfo(alias="_id")
16
- """Component ID (MongoDB ObjectId)"""
17
-
18
- component_id: str = FieldInfo(alias="componentId")
19
- """Unique component identifier"""
20
-
21
- config: object
22
- """Component configuration"""
23
-
24
- created_at: datetime = FieldInfo(alias="createdAt")
25
- """Creation timestamp"""
26
-
27
- name: str
28
- """Component name"""
29
-
30
- organization: str
31
- """Organization ID"""
32
-
33
- status: Literal["active", "inactive", "draft"]
34
- """Component status"""
35
-
36
- type: Literal[
37
- "chat", "flashcards", "scenarios", "practice_test", "audio_recap", "tutor_me", "explainers", "uploads"
38
- ]
39
- """Component type"""
40
-
41
- updated_at: datetime = FieldInfo(alias="updatedAt")
42
- """Last update timestamp"""
43
-
44
- usage: object
45
- """Usage statistics"""
46
-
47
- description: Optional[str] = None
48
- """Component description"""
49
-
50
-
51
- ComponentListResponse: TypeAlias = List[ComponentListResponseItem]
10
+ ComponentListResponse: TypeAlias = List[Component]
@@ -0,0 +1,45 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import List
6
+ from typing_extensions import Required, Annotated, TypedDict
7
+
8
+ from ..._utils import PropertyInfo
9
+
10
+ __all__ = ["ExplainerCreateParams"]
11
+
12
+
13
+ class ExplainerCreateParams(TypedDict, total=False):
14
+ component_id: Required[Annotated[str, PropertyInfo(alias="componentId")]]
15
+ """Component ID"""
16
+
17
+ folder_ids: Required[Annotated[List[str], PropertyInfo(alias="folderIds")]]
18
+ """Folder IDs to include"""
19
+
20
+ material_ids: Required[Annotated[List[str], PropertyInfo(alias="materialIds")]]
21
+ """Material IDs to include"""
22
+
23
+ target_length: Required[Annotated[float, PropertyInfo(alias="targetLength")]]
24
+ """Target video length in seconds"""
25
+
26
+ title: Required[str]
27
+ """Title for the explainer video"""
28
+
29
+ image_search: Annotated[bool, PropertyInfo(alias="imageSearch")]
30
+ """Enable image search for visuals"""
31
+
32
+ model: str
33
+ """AI model to use"""
34
+
35
+ style: str
36
+ """Video style"""
37
+
38
+ user_id: Annotated[str, PropertyInfo(alias="userId")]
39
+ """User ID"""
40
+
41
+ vertical_video: Annotated[bool, PropertyInfo(alias="verticalVideo")]
42
+ """Create vertical video format (9:16)"""
43
+
44
+ web_search: Annotated[bool, PropertyInfo(alias="webSearch")]
45
+ """Enable web search for additional content"""
@@ -2,10 +2,52 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- from typing_extensions import Required, TypedDict
5
+ from typing import List
6
+ from typing_extensions import Literal, Required, Annotated, TypedDict
6
7
 
7
- __all__ = ["ExplainerHandleWebhookParams"]
8
+ from ..._utils import PropertyInfo
9
+
10
+ __all__ = ["ExplainerHandleWebhookParams", "Video"]
8
11
 
9
12
 
10
13
  class ExplainerHandleWebhookParams(TypedDict, total=False):
11
- body: Required[str]
14
+ event: Required[Literal["video.completed", "video.progress", "video.failed"]]
15
+ """Webhook event type"""
16
+
17
+ video: Required[Video]
18
+ """Video data"""
19
+
20
+
21
+ class Video(TypedDict, total=False):
22
+ id: Required[str]
23
+ """Video ID"""
24
+
25
+ image_sources: Annotated[object, PropertyInfo(alias="imageSources")]
26
+ """Image sources"""
27
+
28
+ progress: float
29
+ """Progress percentage"""
30
+
31
+ sections: List[str]
32
+ """Video sections"""
33
+
34
+ stream_id: Annotated[str, PropertyInfo(alias="streamId")]
35
+ """Stream ID"""
36
+
37
+ stream_url: Annotated[str, PropertyInfo(alias="streamUrl")]
38
+ """Stream URL"""
39
+
40
+ thumbnail_url: Annotated[str, PropertyInfo(alias="thumbnailUrl")]
41
+ """Thumbnail URL"""
42
+
43
+ transcript: str
44
+ """Video transcript"""
45
+
46
+ video_url: Annotated[str, PropertyInfo(alias="videoUrl")]
47
+ """Video URL"""
48
+
49
+ web_search_results: Annotated[object, PropertyInfo(alias="webSearchResults")]
50
+ """Web search results"""
51
+
52
+ web_search_sources: Annotated[object, PropertyInfo(alias="webSearchSources")]
53
+ """Web search sources"""
@@ -4,7 +4,7 @@ from typing import Dict, List, Optional
4
4
 
5
5
  from ..._models import BaseModel
6
6
 
7
- __all__ = ["FlashcardGetAlgorithmInfoResponse", "Intervals", "Ratings"]
7
+ __all__ = ["FlashcardGetAlgorithmResponse", "Intervals", "Ratings"]
8
8
 
9
9
 
10
10
  class Intervals(BaseModel):
@@ -26,7 +26,7 @@ class Ratings(BaseModel):
26
26
  """Rating name"""
27
27
 
28
28
 
29
- class FlashcardGetAlgorithmInfoResponse(BaseModel):
29
+ class FlashcardGetAlgorithmResponse(BaseModel):
30
30
  algorithm: Optional[str] = None
31
31
  """Algorithm name"""
32
32