studyfetch-sdk 0.1.0a2__py3-none-any.whl → 0.1.0a4__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 (54) hide show
  1. studyfetch_sdk/_version.py +1 -1
  2. studyfetch_sdk/resources/v1/__init__.py +0 -14
  3. studyfetch_sdk/resources/v1/auth/__init__.py +0 -28
  4. studyfetch_sdk/resources/v1/auth/auth.py +0 -504
  5. studyfetch_sdk/resources/v1/auth/number_2fa.py +1 -294
  6. studyfetch_sdk/resources/v1/chat/chat.py +7 -7
  7. studyfetch_sdk/resources/v1/components.py +9 -8
  8. studyfetch_sdk/resources/v1/flashcards.py +16 -16
  9. studyfetch_sdk/resources/v1/usage.py +1 -593
  10. studyfetch_sdk/resources/v1/v1.py +0 -32
  11. studyfetch_sdk/types/v1/__init__.py +0 -5
  12. studyfetch_sdk/types/v1/auth/__init__.py +0 -8
  13. studyfetch_sdk/types/v1/chat_send_message_params.py +3 -3
  14. studyfetch_sdk/types/v1/component_create_params.py +295 -3
  15. studyfetch_sdk/types/v1/component_create_response.py +3 -1
  16. studyfetch_sdk/types/v1/component_embed_params.py +3 -2
  17. studyfetch_sdk/types/v1/component_list_response.py +3 -1
  18. studyfetch_sdk/types/v1/component_retrieve_response.py +3 -1
  19. studyfetch_sdk/types/v1/component_update_response.py +3 -1
  20. studyfetch_sdk/types/v1/flashcard_get_all_params.py +2 -2
  21. studyfetch_sdk/types/v1/flashcard_get_due_params.py +1 -1
  22. studyfetch_sdk/types/v1/flashcard_get_stats_params.py +2 -2
  23. {studyfetch_sdk-0.1.0a2.dist-info → studyfetch_sdk-0.1.0a4.dist-info}/METADATA +11 -35
  24. {studyfetch_sdk-0.1.0a2.dist-info → studyfetch_sdk-0.1.0a4.dist-info}/RECORD +26 -54
  25. studyfetch_sdk/resources/v1/auth/login.py +0 -374
  26. studyfetch_sdk/resources/v1/auth/organization_invites.py +0 -160
  27. studyfetch_sdk/resources/v1/organizations/__init__.py +0 -103
  28. studyfetch_sdk/resources/v1/organizations/api_keys.py +0 -260
  29. studyfetch_sdk/resources/v1/organizations/logo/__init__.py +0 -33
  30. studyfetch_sdk/resources/v1/organizations/logo/logo.py +0 -166
  31. studyfetch_sdk/resources/v1/organizations/logo/upload.py +0 -184
  32. studyfetch_sdk/resources/v1/organizations/organizations.py +0 -428
  33. studyfetch_sdk/resources/v1/organizations/profile/__init__.py +0 -47
  34. studyfetch_sdk/resources/v1/organizations/profile/models.py +0 -134
  35. studyfetch_sdk/resources/v1/organizations/profile/profile.py +0 -248
  36. studyfetch_sdk/resources/v1/organizations/profile/team.py +0 -462
  37. studyfetch_sdk/resources/v1/organizations/team/__init__.py +0 -33
  38. studyfetch_sdk/resources/v1/organizations/team/invite.py +0 -236
  39. studyfetch_sdk/resources/v1/organizations/team/team.py +0 -564
  40. studyfetch_sdk/resources/v1/organizations/theme.py +0 -184
  41. studyfetch_sdk/resources/v1/organizations/usage.py +0 -210
  42. studyfetch_sdk/types/v1/auth/login_authenticate_params.py +0 -15
  43. studyfetch_sdk/types/v1/auth/login_verify_2fa_params.py +0 -15
  44. studyfetch_sdk/types/v1/auth/login_verify_backup_code_params.py +0 -17
  45. studyfetch_sdk/types/v1/auth/number_2fa_disable_params.py +0 -12
  46. studyfetch_sdk/types/v1/auth/number_2fa_enable_params.py +0 -12
  47. studyfetch_sdk/types/v1/auth/number_2fa_regenerate_backup_codes_params.py +0 -12
  48. studyfetch_sdk/types/v1/auth_register_new_user_params.py +0 -23
  49. studyfetch_sdk/types/v1/auth_request_password_reset_params.py +0 -12
  50. studyfetch_sdk/types/v1/auth_reset_password_params.py +0 -17
  51. studyfetch_sdk/types/v1/usage_track_chat_params.py +0 -54
  52. studyfetch_sdk/types/v1/usage_track_event_params.py +0 -128
  53. {studyfetch_sdk-0.1.0a2.dist-info → studyfetch_sdk-0.1.0a4.dist-info}/WHEEL +0 -0
  54. {studyfetch_sdk-0.1.0a2.dist-info → studyfetch_sdk-0.1.0a4.dist-info}/licenses/LICENSE +0 -0
@@ -108,14 +108,6 @@ from .audio_recaps.audio_recaps import (
108
108
  AudioRecapsResourceWithStreamingResponse,
109
109
  AsyncAudioRecapsResourceWithStreamingResponse,
110
110
  )
111
- from .organizations.organizations import (
112
- OrganizationsResource,
113
- AsyncOrganizationsResource,
114
- OrganizationsResourceWithRawResponse,
115
- AsyncOrganizationsResourceWithRawResponse,
116
- OrganizationsResourceWithStreamingResponse,
117
- AsyncOrganizationsResourceWithStreamingResponse,
118
- )
119
111
 
120
112
  __all__ = ["V1Resource", "AsyncV1Resource"]
121
113
 
@@ -125,10 +117,6 @@ class V1Resource(SyncAPIResource):
125
117
  def auth(self) -> AuthResource:
126
118
  return AuthResource(self._client)
127
119
 
128
- @cached_property
129
- def organizations(self) -> OrganizationsResource:
130
- return OrganizationsResource(self._client)
131
-
132
120
  @cached_property
133
121
  def materials(self) -> MaterialsResource:
134
122
  return MaterialsResource(self._client)
@@ -202,10 +190,6 @@ class AsyncV1Resource(AsyncAPIResource):
202
190
  def auth(self) -> AsyncAuthResource:
203
191
  return AsyncAuthResource(self._client)
204
192
 
205
- @cached_property
206
- def organizations(self) -> AsyncOrganizationsResource:
207
- return AsyncOrganizationsResource(self._client)
208
-
209
193
  @cached_property
210
194
  def materials(self) -> AsyncMaterialsResource:
211
195
  return AsyncMaterialsResource(self._client)
@@ -282,10 +266,6 @@ class V1ResourceWithRawResponse:
282
266
  def auth(self) -> AuthResourceWithRawResponse:
283
267
  return AuthResourceWithRawResponse(self._v1.auth)
284
268
 
285
- @cached_property
286
- def organizations(self) -> OrganizationsResourceWithRawResponse:
287
- return OrganizationsResourceWithRawResponse(self._v1.organizations)
288
-
289
269
  @cached_property
290
270
  def materials(self) -> MaterialsResourceWithRawResponse:
291
271
  return MaterialsResourceWithRawResponse(self._v1.materials)
@@ -343,10 +323,6 @@ class AsyncV1ResourceWithRawResponse:
343
323
  def auth(self) -> AsyncAuthResourceWithRawResponse:
344
324
  return AsyncAuthResourceWithRawResponse(self._v1.auth)
345
325
 
346
- @cached_property
347
- def organizations(self) -> AsyncOrganizationsResourceWithRawResponse:
348
- return AsyncOrganizationsResourceWithRawResponse(self._v1.organizations)
349
-
350
326
  @cached_property
351
327
  def materials(self) -> AsyncMaterialsResourceWithRawResponse:
352
328
  return AsyncMaterialsResourceWithRawResponse(self._v1.materials)
@@ -404,10 +380,6 @@ class V1ResourceWithStreamingResponse:
404
380
  def auth(self) -> AuthResourceWithStreamingResponse:
405
381
  return AuthResourceWithStreamingResponse(self._v1.auth)
406
382
 
407
- @cached_property
408
- def organizations(self) -> OrganizationsResourceWithStreamingResponse:
409
- return OrganizationsResourceWithStreamingResponse(self._v1.organizations)
410
-
411
383
  @cached_property
412
384
  def materials(self) -> MaterialsResourceWithStreamingResponse:
413
385
  return MaterialsResourceWithStreamingResponse(self._v1.materials)
@@ -465,10 +437,6 @@ class AsyncV1ResourceWithStreamingResponse:
465
437
  def auth(self) -> AsyncAuthResourceWithStreamingResponse:
466
438
  return AsyncAuthResourceWithStreamingResponse(self._v1.auth)
467
439
 
468
- @cached_property
469
- def organizations(self) -> AsyncOrganizationsResourceWithStreamingResponse:
470
- return AsyncOrganizationsResourceWithStreamingResponse(self._v1.organizations)
471
-
472
440
  @cached_property
473
441
  def materials(self) -> AsyncMaterialsResourceWithStreamingResponse:
474
442
  return AsyncMaterialsResourceWithStreamingResponse(self._v1.materials)
@@ -23,7 +23,6 @@ from .usage_get_stats_params import UsageGetStatsParams as UsageGetStatsParams
23
23
  from .component_create_params import ComponentCreateParams as ComponentCreateParams
24
24
  from .component_list_response import ComponentListResponse as ComponentListResponse
25
25
  from .component_update_params import ComponentUpdateParams as ComponentUpdateParams
26
- from .usage_track_chat_params import UsageTrackChatParams as UsageTrackChatParams
27
26
  from .chat_send_message_params import ChatSendMessageParams as ChatSendMessageParams
28
27
  from .component_embed_response import ComponentEmbedResponse as ComponentEmbedResponse
29
28
  from .flashcard_get_all_params import FlashcardGetAllParams as FlashcardGetAllParams
@@ -31,22 +30,18 @@ from .flashcard_get_due_params import FlashcardGetDueParams as FlashcardGetDuePa
31
30
  from .material_create_response import MaterialCreateResponse as MaterialCreateResponse
32
31
  from .usage_get_summary_params import UsageGetSummaryParams as UsageGetSummaryParams
33
32
  from .usage_list_events_params import UsageListEventsParams as UsageListEventsParams
34
- from .usage_track_event_params import UsageTrackEventParams as UsageTrackEventParams
35
33
  from .component_create_response import ComponentCreateResponse as ComponentCreateResponse
36
34
  from .component_update_response import ComponentUpdateResponse as ComponentUpdateResponse
37
35
  from .test_submit_answer_params import TestSubmitAnswerParams as TestSubmitAnswerParams
38
- from .auth_reset_password_params import AuthResetPasswordParams as AuthResetPasswordParams
39
36
  from .flashcard_get_stats_params import FlashcardGetStatsParams as FlashcardGetStatsParams
40
37
  from .material_retrieve_response import MaterialRetrieveResponse as MaterialRetrieveResponse
41
38
  from .component_retrieve_response import ComponentRetrieveResponse as ComponentRetrieveResponse
42
39
  from .chat_retrieve_session_params import ChatRetrieveSessionParams as ChatRetrieveSessionParams
43
40
  from .flashcard_get_types_response import FlashcardGetTypesResponse as FlashcardGetTypesResponse
44
- from .auth_register_new_user_params import AuthRegisterNewUserParams as AuthRegisterNewUserParams
45
41
  from .flashcard_batch_process_params import FlashcardBatchProcessParams as FlashcardBatchProcessParams
46
42
  from .explainer_handle_webhook_params import ExplainerHandleWebhookParams as ExplainerHandleWebhookParams
47
43
  from .flashcard_batch_process_response import FlashcardBatchProcessResponse as FlashcardBatchProcessResponse
48
44
  from .material_get_download_url_params import MaterialGetDownloadURLParams as MaterialGetDownloadURLParams
49
- from .auth_request_password_reset_params import AuthRequestPasswordResetParams as AuthRequestPasswordResetParams
50
45
  from .flashcard_get_algorithm_info_response import (
51
46
  FlashcardGetAlgorithmInfoResponse as FlashcardGetAlgorithmInfoResponse,
52
47
  )
@@ -2,12 +2,4 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- from .login_verify_2fa_params import LoginVerify2faParams as LoginVerify2faParams
6
- from .number_2fa_enable_params import Number2faEnableParams as Number2faEnableParams
7
- from .login_authenticate_params import LoginAuthenticateParams as LoginAuthenticateParams
8
- from .number_2fa_disable_params import Number2faDisableParams as Number2faDisableParams
9
5
  from .number_2fa_send_code_params import Number2faSendCodeParams as Number2faSendCodeParams
10
- from .login_verify_backup_code_params import LoginVerifyBackupCodeParams as LoginVerifyBackupCodeParams
11
- from .number_2fa_regenerate_backup_codes_params import (
12
- Number2faRegenerateBackupCodesParams as Number2faRegenerateBackupCodesParams,
13
- )
@@ -2,7 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- from typing import Iterable
5
+ from typing import List, Iterable
6
6
  from typing_extensions import Required, Annotated, TypedDict
7
7
 
8
8
  from ..._utils import PropertyInfo
@@ -22,8 +22,8 @@ class ChatSendMessageParams(TypedDict, total=False):
22
22
  context: object
23
23
  """Additional context data"""
24
24
 
25
- group_id: Annotated[str, PropertyInfo(alias="groupId")]
26
- """Group ID for collaboration"""
25
+ group_ids: Annotated[List[str], PropertyInfo(alias="groupIds")]
26
+ """Group IDs for collaboration"""
27
27
 
28
28
  session_id: Annotated[str, PropertyInfo(alias="sessionId")]
29
29
  """Session ID for conversation continuity"""
@@ -2,13 +2,30 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- from typing_extensions import Literal, Required, TypedDict
5
+ from typing import List, Union, Iterable
6
+ from typing_extensions import Literal, Required, Annotated, TypeAlias, TypedDict
6
7
 
7
- __all__ = ["ComponentCreateParams"]
8
+ from ..._utils import PropertyInfo
9
+
10
+ __all__ = [
11
+ "ComponentCreateParams",
12
+ "Config",
13
+ "ConfigChatConfigDto",
14
+ "ConfigFlashcardsConfigDto",
15
+ "ConfigScenariosConfigDto",
16
+ "ConfigScenariosConfigDtoCharacter",
17
+ "ConfigScenariosConfigDtoTool",
18
+ "ConfigPracticeTestConfigDto",
19
+ "ConfigPracticeTestConfigDtoQuestionDistribution",
20
+ "ConfigAudioRecapConfigDto",
21
+ "ConfigExplainersConfigDto",
22
+ "ConfigUploadsConfigDto",
23
+ "ConfigTutorMeConfigDto",
24
+ ]
8
25
 
9
26
 
10
27
  class ComponentCreateParams(TypedDict, total=False):
11
- config: Required[object]
28
+ config: Required[Config]
12
29
  """Component-specific configuration"""
13
30
 
14
31
  name: Required[str]
@@ -27,3 +44,278 @@ class ComponentCreateParams(TypedDict, total=False):
27
44
 
28
45
  metadata: object
29
46
  """Additional metadata"""
47
+
48
+
49
+ class ConfigChatConfigDto(TypedDict, total=False):
50
+ model: Required[str]
51
+ """AI model to use"""
52
+
53
+ enable_component_creation: Annotated[bool, PropertyInfo(alias="enableComponentCreation")]
54
+ """Enable component creation"""
55
+
56
+ enable_follow_ups: Annotated[bool, PropertyInfo(alias="enableFollowUps")]
57
+ """Enable follow-up questions"""
58
+
59
+ enable_history: Annotated[bool, PropertyInfo(alias="enableHistory")]
60
+ """Enable conversation history"""
61
+
62
+ enable_rag_search: Annotated[bool, PropertyInfo(alias="enableRAGSearch")]
63
+ """Enable RAG search"""
64
+
65
+ enable_voice: Annotated[bool, PropertyInfo(alias="enableVoice")]
66
+ """Enable voice interactions"""
67
+
68
+ enable_web_search: Annotated[bool, PropertyInfo(alias="enableWebSearch")]
69
+ """Enable web search"""
70
+
71
+ folders: List[str]
72
+ """Folder IDs"""
73
+
74
+ materials: List[str]
75
+ """Material IDs"""
76
+
77
+ max_steps: Annotated[float, PropertyInfo(alias="maxSteps")]
78
+ """Maximum steps for multi-step tool calls"""
79
+
80
+ max_tokens: Annotated[float, PropertyInfo(alias="maxTokens")]
81
+ """Maximum tokens for response"""
82
+
83
+ system_prompt: Annotated[str, PropertyInfo(alias="systemPrompt")]
84
+ """System prompt for the chat"""
85
+
86
+ temperature: float
87
+ """Temperature for response generation"""
88
+
89
+
90
+ class ConfigFlashcardsConfigDto(TypedDict, total=False):
91
+ card_types: Annotated[List[str], PropertyInfo(alias="cardTypes")]
92
+ """Types of flashcards"""
93
+
94
+ difficulty: Literal["easy", "medium", "hard", "mixed"]
95
+ """Difficulty level"""
96
+
97
+ enable_spaced_repetition: Annotated[bool, PropertyInfo(alias="enableSpacedRepetition")]
98
+ """Enable spaced repetition"""
99
+
100
+ folders: List[str]
101
+ """Folder IDs"""
102
+
103
+ learning_steps: Annotated[str, PropertyInfo(alias="learningSteps")]
104
+ """Learning steps configuration"""
105
+
106
+ materials: List[str]
107
+ """Material IDs"""
108
+
109
+ max_review_interval: Annotated[float, PropertyInfo(alias="maxReviewInterval")]
110
+ """Maximum review interval in days"""
111
+
112
+ total_flashcards: Annotated[float, PropertyInfo(alias="totalFlashcards")]
113
+ """Total number of flashcards to generate"""
114
+
115
+ view_mode: Annotated[Literal["spaced_repetition", "normal"], PropertyInfo(alias="viewMode")]
116
+ """View mode for flashcards"""
117
+
118
+
119
+ class ConfigScenariosConfigDtoCharacter(TypedDict, total=False):
120
+ id: Required[str]
121
+ """Character ID"""
122
+
123
+ name: Required[str]
124
+ """Character name"""
125
+
126
+ role: Required[str]
127
+ """Character role"""
128
+
129
+ description: str
130
+ """Character description"""
131
+
132
+
133
+ class ConfigScenariosConfigDtoTool(TypedDict, total=False):
134
+ id: Required[str]
135
+ """Tool ID"""
136
+
137
+ name: Required[str]
138
+ """Tool name"""
139
+
140
+ description: str
141
+ """Tool description"""
142
+
143
+
144
+ class ConfigScenariosConfigDto(TypedDict, total=False):
145
+ characters: Iterable[ConfigScenariosConfigDtoCharacter]
146
+ """Scenario characters"""
147
+
148
+ context: str
149
+ """Scenario context"""
150
+
151
+ enable_history: Annotated[bool, PropertyInfo(alias="enableHistory")]
152
+ """Enable history"""
153
+
154
+ enable_voice: Annotated[bool, PropertyInfo(alias="enableVoice")]
155
+ """Enable voice"""
156
+
157
+ final_answer_prompt: Annotated[str, PropertyInfo(alias="finalAnswerPrompt")]
158
+ """Final answer prompt"""
159
+
160
+ folders: List[str]
161
+ """Folder IDs"""
162
+
163
+ format: str
164
+ """Scenario format"""
165
+
166
+ goal: str
167
+ """Scenario goal"""
168
+
169
+ greeting_character_id: Annotated[str, PropertyInfo(alias="greetingCharacterId")]
170
+ """Character ID for greeting"""
171
+
172
+ greeting_message: Annotated[str, PropertyInfo(alias="greetingMessage")]
173
+ """Greeting message"""
174
+
175
+ materials: List[str]
176
+ """Material IDs"""
177
+
178
+ placeholder_text: Annotated[str, PropertyInfo(alias="placeholderText")]
179
+ """Placeholder text"""
180
+
181
+ requires_final_answer: Annotated[bool, PropertyInfo(alias="requiresFinalAnswer")]
182
+ """Requires final answer"""
183
+
184
+ tools: Iterable[ConfigScenariosConfigDtoTool]
185
+ """Available tools"""
186
+
187
+
188
+ class ConfigPracticeTestConfigDtoQuestionDistribution(TypedDict, total=False):
189
+ fillinblank: float
190
+ """Number of fill in the blank questions"""
191
+
192
+ frq: float
193
+ """Number of free response questions"""
194
+
195
+ multiplechoice: float
196
+ """Number of multiple choice questions"""
197
+
198
+ shortanswer: float
199
+ """Number of short answer questions"""
200
+
201
+ truefalse: float
202
+ """Number of true/false questions"""
203
+
204
+
205
+ class ConfigPracticeTestConfigDto(TypedDict, total=False):
206
+ question_types: Required[Annotated[List[str], PropertyInfo(alias="questionTypes")]]
207
+ """Question types"""
208
+
209
+ ai_generation_mode: Annotated[
210
+ Literal["balanced", "comprehensive", "focused", "adaptive"], PropertyInfo(alias="aiGenerationMode")
211
+ ]
212
+ """AI generation mode"""
213
+
214
+ allow_retakes: Annotated[bool, PropertyInfo(alias="allowRetakes")]
215
+ """Allow retakes"""
216
+
217
+ difficulty: Literal["easy", "medium", "hard", "mixed"]
218
+ """Difficulty level"""
219
+
220
+ folders: List[str]
221
+ """Folder IDs"""
222
+
223
+ materials: List[str]
224
+ """Material IDs"""
225
+
226
+ max_attempts: Annotated[float, PropertyInfo(alias="maxAttempts")]
227
+ """Maximum attempts allowed"""
228
+
229
+ passing_score: Annotated[float, PropertyInfo(alias="passingScore")]
230
+ """Passing score percentage"""
231
+
232
+ question_distribution: Annotated[
233
+ ConfigPracticeTestConfigDtoQuestionDistribution, PropertyInfo(alias="questionDistribution")
234
+ ]
235
+ """Distribution of question types"""
236
+
237
+ questions_per_test: Annotated[float, PropertyInfo(alias="questionsPerTest")]
238
+ """Number of questions per test"""
239
+
240
+ randomize_answers: Annotated[bool, PropertyInfo(alias="randomizeAnswers")]
241
+ """Randomize answer order"""
242
+
243
+ randomize_questions: Annotated[bool, PropertyInfo(alias="randomizeQuestions")]
244
+ """Randomize question order"""
245
+
246
+ show_correct_answers: Annotated[bool, PropertyInfo(alias="showCorrectAnswers")]
247
+ """Show correct answers after submission"""
248
+
249
+ show_explanations: Annotated[bool, PropertyInfo(alias="showExplanations")]
250
+ """Show explanations for answers"""
251
+
252
+ time_limit: Annotated[float, PropertyInfo(alias="timeLimit")]
253
+ """Time limit in minutes"""
254
+
255
+
256
+ class ConfigAudioRecapConfigDto(TypedDict, total=False):
257
+ folders: List[str]
258
+ """Folder IDs"""
259
+
260
+ format: Literal["podcast", "summary", "lecture"]
261
+ """Audio format"""
262
+
263
+ materials: List[str]
264
+ """Material IDs"""
265
+
266
+ speed: float
267
+ """Playback speed"""
268
+
269
+ voice: str
270
+ """Voice to use for audio"""
271
+
272
+
273
+ class ConfigExplainersConfigDto(TypedDict, total=False):
274
+ folders: List[str]
275
+ """Folder IDs"""
276
+
277
+ materials: List[str]
278
+ """Material IDs"""
279
+
280
+
281
+ class ConfigUploadsConfigDto(TypedDict, total=False):
282
+ folder_id: Required[Annotated[str, PropertyInfo(alias="folderId")]]
283
+ """Folder ID where uploads will be stored"""
284
+
285
+ folders: List[str]
286
+ """Folder IDs"""
287
+
288
+ materials: List[str]
289
+ """Material IDs"""
290
+
291
+
292
+ class ConfigTutorMeConfigDto(TypedDict, total=False):
293
+ enable_video: Annotated[bool, PropertyInfo(alias="enableVideo")]
294
+ """Enable video"""
295
+
296
+ enable_voice: Annotated[bool, PropertyInfo(alias="enableVoice")]
297
+ """Enable voice"""
298
+
299
+ folders: List[str]
300
+ """Folder IDs"""
301
+
302
+ materials: List[str]
303
+ """Material IDs"""
304
+
305
+ session_duration: Annotated[float, PropertyInfo(alias="sessionDuration")]
306
+ """Session duration in minutes"""
307
+
308
+ tutor_personality: Annotated[str, PropertyInfo(alias="tutorPersonality")]
309
+ """Tutor personality"""
310
+
311
+
312
+ Config: TypeAlias = Union[
313
+ ConfigChatConfigDto,
314
+ ConfigFlashcardsConfigDto,
315
+ ConfigScenariosConfigDto,
316
+ ConfigPracticeTestConfigDto,
317
+ ConfigAudioRecapConfigDto,
318
+ ConfigExplainersConfigDto,
319
+ ConfigUploadsConfigDto,
320
+ ConfigTutorMeConfigDto,
321
+ ]
@@ -33,7 +33,9 @@ class ComponentCreateResponse(BaseModel):
33
33
  status: Literal["active", "inactive", "draft"]
34
34
  """Component status"""
35
35
 
36
- type: Literal["chat", "flashcards", "tests", "scenarios", "explainers", "audio-recap"]
36
+ type: Literal[
37
+ "chat", "flashcards", "scenarios", "practice_test", "audio_recap", "tutor_me", "explainers", "uploads"
38
+ ]
37
39
  """Component type"""
38
40
 
39
41
  updated_at: datetime = FieldInfo(alias="updatedAt")
@@ -2,6 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ from typing import List
5
6
  from typing_extensions import Annotated, TypedDict
6
7
 
7
8
  from ..._utils import PropertyInfo
@@ -16,8 +17,8 @@ class ComponentEmbedParams(TypedDict, total=False):
16
17
  features: Features
17
18
  """Feature toggles"""
18
19
 
19
- group_id: Annotated[str, PropertyInfo(alias="groupId")]
20
- """Group ID for collaboration"""
20
+ group_ids: Annotated[List[str], PropertyInfo(alias="groupIds")]
21
+ """Group IDs for collaboration"""
21
22
 
22
23
  height: str
23
24
  """Embed height (e.g., "400px", "100vh")"""
@@ -33,7 +33,9 @@ class ComponentListResponseItem(BaseModel):
33
33
  status: Literal["active", "inactive", "draft"]
34
34
  """Component status"""
35
35
 
36
- type: Literal["chat", "flashcards", "tests", "scenarios", "explainers", "audio-recap"]
36
+ type: Literal[
37
+ "chat", "flashcards", "scenarios", "practice_test", "audio_recap", "tutor_me", "explainers", "uploads"
38
+ ]
37
39
  """Component type"""
38
40
 
39
41
  updated_at: datetime = FieldInfo(alias="updatedAt")
@@ -33,7 +33,9 @@ class ComponentRetrieveResponse(BaseModel):
33
33
  status: Literal["active", "inactive", "draft"]
34
34
  """Component status"""
35
35
 
36
- type: Literal["chat", "flashcards", "tests", "scenarios", "explainers", "audio-recap"]
36
+ type: Literal[
37
+ "chat", "flashcards", "scenarios", "practice_test", "audio_recap", "tutor_me", "explainers", "uploads"
38
+ ]
37
39
  """Component type"""
38
40
 
39
41
  updated_at: datetime = FieldInfo(alias="updatedAt")
@@ -33,7 +33,9 @@ class ComponentUpdateResponse(BaseModel):
33
33
  status: Literal["active", "inactive", "draft"]
34
34
  """Component status"""
35
35
 
36
- type: Literal["chat", "flashcards", "tests", "scenarios", "explainers", "audio-recap"]
36
+ type: Literal[
37
+ "chat", "flashcards", "scenarios", "practice_test", "audio_recap", "tutor_me", "explainers", "uploads"
38
+ ]
37
39
  """Component type"""
38
40
 
39
41
  updated_at: datetime = FieldInfo(alias="updatedAt")
@@ -10,8 +10,8 @@ __all__ = ["FlashcardGetAllParams"]
10
10
 
11
11
 
12
12
  class FlashcardGetAllParams(TypedDict, total=False):
13
- group_id: Annotated[str, PropertyInfo(alias="groupId")]
14
- """Group ID"""
13
+ group_ids: Annotated[str, PropertyInfo(alias="groupIds")]
14
+ """Group IDs (comma-separated)"""
15
15
 
16
16
  limit: float
17
17
  """Max number of cards"""
@@ -10,7 +10,7 @@ __all__ = ["FlashcardGetDueParams"]
10
10
 
11
11
 
12
12
  class FlashcardGetDueParams(TypedDict, total=False):
13
- group_id: Required[Annotated[str, PropertyInfo(alias="groupId")]]
13
+ group_ids: Required[Annotated[str, PropertyInfo(alias="groupIds")]]
14
14
 
15
15
  limit: float
16
16
  """Max number of cards"""
@@ -10,8 +10,8 @@ __all__ = ["FlashcardGetStatsParams"]
10
10
 
11
11
 
12
12
  class FlashcardGetStatsParams(TypedDict, total=False):
13
- group_id: Annotated[str, PropertyInfo(alias="groupId")]
14
- """Group ID"""
13
+ group_ids: Annotated[str, PropertyInfo(alias="groupIds")]
14
+ """Group IDs (comma-separated)"""
15
15
 
16
16
  user_id: Annotated[str, PropertyInfo(alias="userId")]
17
17
  """User ID"""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: studyfetch_sdk
3
- Version: 0.1.0a2
3
+ Version: 0.1.0a4
4
4
  Summary: The official Python library for the studyfetch-sdk API
5
5
  Project-URL: Homepage, https://github.com/GoStudyFetchGo/studyfetch-sdk-python
6
6
  Project-URL: Repository, https://github.com/GoStudyFetchGo/studyfetch-sdk-python
@@ -67,10 +67,7 @@ client = StudyfetchSDK(
67
67
  api_key=os.environ.get("STUDYFETCH_SDK_API_KEY"), # This is the default and can be omitted
68
68
  )
69
69
 
70
- client.v1.auth.login.authenticate(
71
- email="user@example.com",
72
- password="password123",
73
- )
70
+ client.v1.auth.verify_reset_token()
74
71
  ```
75
72
 
76
73
  While you can provide an `api_key` keyword argument,
@@ -93,10 +90,7 @@ client = AsyncStudyfetchSDK(
93
90
 
94
91
 
95
92
  async def main() -> None:
96
- await client.v1.auth.login.authenticate(
97
- email="user@example.com",
98
- password="password123",
99
- )
93
+ await client.v1.auth.verify_reset_token()
100
94
 
101
95
 
102
96
  asyncio.run(main())
@@ -128,10 +122,7 @@ async def main() -> None:
128
122
  api_key="My API Key",
129
123
  http_client=DefaultAioHttpClient(),
130
124
  ) as client:
131
- await client.v1.auth.login.authenticate(
132
- email="user@example.com",
133
- password="password123",
134
- )
125
+ await client.v1.auth.verify_reset_token()
135
126
 
136
127
 
137
128
  asyncio.run(main())
@@ -196,10 +187,7 @@ from studyfetch_sdk import StudyfetchSDK
196
187
  client = StudyfetchSDK()
197
188
 
198
189
  try:
199
- client.v1.auth.login.authenticate(
200
- email="user@example.com",
201
- password="password123",
202
- )
190
+ client.v1.auth.verify_reset_token()
203
191
  except studyfetch_sdk.APIConnectionError as e:
204
192
  print("The server could not be reached")
205
193
  print(e.__cause__) # an underlying Exception, likely raised within httpx.
@@ -242,10 +230,7 @@ client = StudyfetchSDK(
242
230
  )
243
231
 
244
232
  # Or, configure per-request:
245
- client.with_options(max_retries=5).v1.auth.login.authenticate(
246
- email="user@example.com",
247
- password="password123",
248
- )
233
+ client.with_options(max_retries=5).v1.auth.verify_reset_token()
249
234
  ```
250
235
 
251
236
  ### Timeouts
@@ -268,10 +253,7 @@ client = StudyfetchSDK(
268
253
  )
269
254
 
270
255
  # Override per-request:
271
- client.with_options(timeout=5.0).v1.auth.login.authenticate(
272
- email="user@example.com",
273
- password="password123",
274
- )
256
+ client.with_options(timeout=5.0).v1.auth.verify_reset_token()
275
257
  ```
276
258
 
277
259
  On timeout, an `APITimeoutError` is thrown.
@@ -312,14 +294,11 @@ The "raw" Response object can be accessed by prefixing `.with_raw_response.` to
312
294
  from studyfetch_sdk import StudyfetchSDK
313
295
 
314
296
  client = StudyfetchSDK()
315
- response = client.v1.auth.login.with_raw_response.authenticate(
316
- email="user@example.com",
317
- password="password123",
318
- )
297
+ response = client.v1.auth.with_raw_response.verify_reset_token()
319
298
  print(response.headers.get('X-My-Header'))
320
299
 
321
- login = response.parse() # get the object that `v1.auth.login.authenticate()` would have returned
322
- print(login)
300
+ auth = response.parse() # get the object that `v1.auth.verify_reset_token()` would have returned
301
+ print(auth)
323
302
  ```
324
303
 
325
304
  These methods return an [`APIResponse`](https://github.com/GoStudyFetchGo/studyfetch-sdk-python/tree/main/src/studyfetch_sdk/_response.py) object.
@@ -333,10 +312,7 @@ The above interface eagerly reads the full response body when you make the reque
333
312
  To stream the response body, use `.with_streaming_response` instead, which requires a context manager and only reads the response body once you call `.read()`, `.text()`, `.json()`, `.iter_bytes()`, `.iter_text()`, `.iter_lines()` or `.parse()`. In the async client, these are async methods.
334
313
 
335
314
  ```python
336
- with client.v1.auth.login.with_streaming_response.authenticate(
337
- email="user@example.com",
338
- password="password123",
339
- ) as response:
315
+ with client.v1.auth.with_streaming_response.verify_reset_token() as response:
340
316
  print(response.headers.get("X-My-Header"))
341
317
 
342
318
  for line in response.iter_lines():