phenoml 0.0.6__py3-none-any.whl → 0.0.8__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. phenoml/client.py +3 -0
  2. phenoml/core/client_wrapper.py +2 -2
  3. phenoml/summary/__init__.py +39 -0
  4. phenoml/summary/client.py +656 -0
  5. phenoml/summary/errors/__init__.py +11 -0
  6. phenoml/summary/errors/bad_request_error.py +10 -0
  7. phenoml/summary/errors/forbidden_error.py +10 -0
  8. phenoml/summary/errors/internal_server_error.py +10 -0
  9. phenoml/summary/errors/not_found_error.py +10 -0
  10. phenoml/summary/errors/unauthorized_error.py +10 -0
  11. phenoml/{workflows/workflows → summary}/raw_client.py +236 -312
  12. phenoml/summary/types/__init__.py +31 -0
  13. phenoml/summary/types/create_summary_request_fhir_resources.py +8 -0
  14. phenoml/summary/types/create_summary_request_mode.py +5 -0
  15. phenoml/summary/types/create_summary_response.py +29 -0
  16. phenoml/summary/types/create_summary_template_response.py +23 -0
  17. phenoml/summary/types/fhir_bundle.py +23 -0
  18. phenoml/summary/types/fhir_bundle_entry_item.py +20 -0
  19. phenoml/summary/types/fhir_resource.py +24 -0
  20. phenoml/summary/types/summary_delete_template_response.py +20 -0
  21. phenoml/summary/types/summary_get_template_response.py +21 -0
  22. phenoml/summary/types/summary_list_templates_response.py +21 -0
  23. phenoml/summary/types/summary_template.py +41 -0
  24. phenoml/summary/types/summary_update_template_response.py +22 -0
  25. phenoml/workflows/__init__.py +3 -8
  26. phenoml/workflows/client.py +517 -33
  27. phenoml/workflows/raw_client.py +1129 -32
  28. phenoml/workflows/types/__init__.py +10 -0
  29. phenoml/workflows/{workflows/types → types}/workflows_delete_response.py +1 -1
  30. phenoml/workflows/{workflows/types → types}/workflows_get_response.py +3 -3
  31. phenoml/workflows/{workflows/types → types}/workflows_update_response.py +3 -3
  32. {phenoml-0.0.6.dist-info → phenoml-0.0.8.dist-info}/METADATA +1 -1
  33. {phenoml-0.0.6.dist-info → phenoml-0.0.8.dist-info}/RECORD +37 -33
  34. phenoml/types/__init__.py +0 -21
  35. phenoml/types/cohort_response.py +0 -5
  36. phenoml/types/lang2fhir_and_create_response.py +0 -5
  37. phenoml/types/lang2fhir_and_search_response.py +0 -5
  38. phenoml/types/mcp_server_response.py +0 -5
  39. phenoml/types/mcp_server_tool_call_response.py +0 -5
  40. phenoml/types/mcp_server_tool_response.py +0 -5
  41. phenoml/types/search_concept.py +0 -5
  42. phenoml/workflows/mcp_server/__init__.py +0 -7
  43. phenoml/workflows/mcp_server/client.py +0 -274
  44. phenoml/workflows/mcp_server/raw_client.py +0 -226
  45. phenoml/workflows/mcp_server/tools/__init__.py +0 -4
  46. phenoml/workflows/mcp_server/tools/client.py +0 -287
  47. phenoml/workflows/mcp_server/tools/raw_client.py +0 -244
  48. phenoml/workflows/workflows/__init__.py +0 -19
  49. phenoml/workflows/workflows/client.py +0 -694
  50. phenoml/workflows/workflows/types/__init__.py +0 -17
  51. /phenoml/workflows/{workflows/types → types}/create_workflow_request_fhir_provider_id.py +0 -0
  52. /phenoml/workflows/{workflows/types → types}/update_workflow_request_fhir_provider_id.py +0 -0
  53. {phenoml-0.0.6.dist-info → phenoml-0.0.8.dist-info}/LICENSE +0 -0
  54. {phenoml-0.0.6.dist-info → phenoml-0.0.8.dist-info}/WHEEL +0 -0
@@ -0,0 +1,656 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
6
+ from ..core.request_options import RequestOptions
7
+ from .raw_client import AsyncRawSummaryClient, RawSummaryClient
8
+ from .types.create_summary_request_fhir_resources import CreateSummaryRequestFhirResources
9
+ from .types.create_summary_request_mode import CreateSummaryRequestMode
10
+ from .types.create_summary_response import CreateSummaryResponse
11
+ from .types.create_summary_template_response import CreateSummaryTemplateResponse
12
+ from .types.summary_delete_template_response import SummaryDeleteTemplateResponse
13
+ from .types.summary_get_template_response import SummaryGetTemplateResponse
14
+ from .types.summary_list_templates_response import SummaryListTemplatesResponse
15
+ from .types.summary_update_template_response import SummaryUpdateTemplateResponse
16
+
17
+ # this is used as the default value for optional parameters
18
+ OMIT = typing.cast(typing.Any, ...)
19
+
20
+
21
+ class SummaryClient:
22
+ def __init__(self, *, client_wrapper: SyncClientWrapper):
23
+ self._raw_client = RawSummaryClient(client_wrapper=client_wrapper)
24
+
25
+ @property
26
+ def with_raw_response(self) -> RawSummaryClient:
27
+ """
28
+ Retrieves a raw implementation of this client that returns raw responses.
29
+
30
+ Returns
31
+ -------
32
+ RawSummaryClient
33
+ """
34
+ return self._raw_client
35
+
36
+ def list_templates(
37
+ self, *, request_options: typing.Optional[RequestOptions] = None
38
+ ) -> SummaryListTemplatesResponse:
39
+ """
40
+ Retrieves all summary templates for the authenticated user
41
+
42
+ Parameters
43
+ ----------
44
+ request_options : typing.Optional[RequestOptions]
45
+ Request-specific configuration.
46
+
47
+ Returns
48
+ -------
49
+ SummaryListTemplatesResponse
50
+ Templates retrieved successfully
51
+
52
+ Examples
53
+ --------
54
+ from phenoml import phenoml
55
+
56
+ client = phenoml(
57
+ token="YOUR_TOKEN",
58
+ )
59
+ client.summary.list_templates()
60
+ """
61
+ _response = self._raw_client.list_templates(request_options=request_options)
62
+ return _response.data
63
+
64
+ def create_template(
65
+ self,
66
+ *,
67
+ name: str,
68
+ example_summary: str,
69
+ target_resources: typing.Sequence[str],
70
+ mode: str,
71
+ description: typing.Optional[str] = OMIT,
72
+ example_fhir_data: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT,
73
+ request_options: typing.Optional[RequestOptions] = None,
74
+ ) -> CreateSummaryTemplateResponse:
75
+ """
76
+ Creates a summary template from an example using LLM function calling
77
+
78
+ Parameters
79
+ ----------
80
+ name : str
81
+ Name of the template
82
+
83
+ example_summary : str
84
+ Example summary note to generate template from
85
+
86
+ target_resources : typing.Sequence[str]
87
+ List of target FHIR resources
88
+
89
+ mode : str
90
+ Template mode (stored with the template)
91
+
92
+ description : typing.Optional[str]
93
+ Description of the template
94
+
95
+ example_fhir_data : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]
96
+ Optional example FHIR data that corresponds to the example summary
97
+
98
+ request_options : typing.Optional[RequestOptions]
99
+ Request-specific configuration.
100
+
101
+ Returns
102
+ -------
103
+ CreateSummaryTemplateResponse
104
+ Template created successfully
105
+
106
+ Examples
107
+ --------
108
+ from phenoml import phenoml
109
+
110
+ client = phenoml(
111
+ token="YOUR_TOKEN",
112
+ )
113
+ client.summary.create_template(
114
+ name="name",
115
+ example_summary="Patient John Doe, age 45, presents with hypertension diagnosed on 2024-01-15.",
116
+ target_resources=["Patient", "Condition", "Observation"],
117
+ mode="mode",
118
+ )
119
+ """
120
+ _response = self._raw_client.create_template(
121
+ name=name,
122
+ example_summary=example_summary,
123
+ target_resources=target_resources,
124
+ mode=mode,
125
+ description=description,
126
+ example_fhir_data=example_fhir_data,
127
+ request_options=request_options,
128
+ )
129
+ return _response.data
130
+
131
+ def get_template(
132
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
133
+ ) -> SummaryGetTemplateResponse:
134
+ """
135
+ Retrieves a specific summary template
136
+
137
+ Parameters
138
+ ----------
139
+ id : str
140
+ Template ID
141
+
142
+ request_options : typing.Optional[RequestOptions]
143
+ Request-specific configuration.
144
+
145
+ Returns
146
+ -------
147
+ SummaryGetTemplateResponse
148
+ Template retrieved successfully
149
+
150
+ Examples
151
+ --------
152
+ from phenoml import phenoml
153
+
154
+ client = phenoml(
155
+ token="YOUR_TOKEN",
156
+ )
157
+ client.summary.get_template(
158
+ id="id",
159
+ )
160
+ """
161
+ _response = self._raw_client.get_template(id, request_options=request_options)
162
+ return _response.data
163
+
164
+ def update_template(
165
+ self,
166
+ id: str,
167
+ *,
168
+ name: str,
169
+ template: str,
170
+ target_resources: typing.Sequence[str],
171
+ mode: str,
172
+ description: typing.Optional[str] = OMIT,
173
+ request_options: typing.Optional[RequestOptions] = None,
174
+ ) -> SummaryUpdateTemplateResponse:
175
+ """
176
+ Updates an existing summary template
177
+
178
+ Parameters
179
+ ----------
180
+ id : str
181
+ Template ID
182
+
183
+ name : str
184
+
185
+ template : str
186
+ Updated template with placeholders
187
+
188
+ target_resources : typing.Sequence[str]
189
+
190
+ mode : str
191
+ Template mode
192
+
193
+ description : typing.Optional[str]
194
+
195
+ request_options : typing.Optional[RequestOptions]
196
+ Request-specific configuration.
197
+
198
+ Returns
199
+ -------
200
+ SummaryUpdateTemplateResponse
201
+ Template updated successfully
202
+
203
+ Examples
204
+ --------
205
+ from phenoml import phenoml
206
+
207
+ client = phenoml(
208
+ token="YOUR_TOKEN",
209
+ )
210
+ client.summary.update_template(
211
+ id="id",
212
+ name="name",
213
+ template="template",
214
+ target_resources=["target_resources"],
215
+ mode="mode",
216
+ )
217
+ """
218
+ _response = self._raw_client.update_template(
219
+ id,
220
+ name=name,
221
+ template=template,
222
+ target_resources=target_resources,
223
+ mode=mode,
224
+ description=description,
225
+ request_options=request_options,
226
+ )
227
+ return _response.data
228
+
229
+ def delete_template(
230
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
231
+ ) -> SummaryDeleteTemplateResponse:
232
+ """
233
+ Deletes a summary template
234
+
235
+ Parameters
236
+ ----------
237
+ id : str
238
+ Template ID
239
+
240
+ request_options : typing.Optional[RequestOptions]
241
+ Request-specific configuration.
242
+
243
+ Returns
244
+ -------
245
+ SummaryDeleteTemplateResponse
246
+ Template deleted successfully
247
+
248
+ Examples
249
+ --------
250
+ from phenoml import phenoml
251
+
252
+ client = phenoml(
253
+ token="YOUR_TOKEN",
254
+ )
255
+ client.summary.delete_template(
256
+ id="id",
257
+ )
258
+ """
259
+ _response = self._raw_client.delete_template(id, request_options=request_options)
260
+ return _response.data
261
+
262
+ def create(
263
+ self,
264
+ *,
265
+ fhir_resources: CreateSummaryRequestFhirResources,
266
+ mode: typing.Optional[CreateSummaryRequestMode] = OMIT,
267
+ template_id: typing.Optional[str] = OMIT,
268
+ request_options: typing.Optional[RequestOptions] = None,
269
+ ) -> CreateSummaryResponse:
270
+ """
271
+ Creates a summary from FHIR resources using one of two modes:
272
+ - **narrative**: Uses a template to substitute FHIR data into placeholders (requires template_id)
273
+ - **flatten**: Flattens FHIR resources into a searchable format for RAG/search (no template needed)
274
+
275
+ Parameters
276
+ ----------
277
+ fhir_resources : CreateSummaryRequestFhirResources
278
+ FHIR resources (single resource or Bundle)
279
+
280
+ mode : typing.Optional[CreateSummaryRequestMode]
281
+ Summary generation mode:
282
+ - narrative: Substitute FHIR data into a template (requires template_id)
283
+ - flatten: Flatten FHIR resources for RAG/search (no template needed)
284
+
285
+ template_id : typing.Optional[str]
286
+ ID of the template to use (required for narrative mode)
287
+
288
+ request_options : typing.Optional[RequestOptions]
289
+ Request-specific configuration.
290
+
291
+ Returns
292
+ -------
293
+ CreateSummaryResponse
294
+ Summary generated successfully
295
+
296
+ Examples
297
+ --------
298
+ from phenoml import phenoml
299
+ from phenoml.summary import FhirResource
300
+
301
+ client = phenoml(
302
+ token="YOUR_TOKEN",
303
+ )
304
+ client.summary.create(
305
+ fhir_resources=FhirResource(
306
+ resource_type="resourceType",
307
+ ),
308
+ )
309
+ """
310
+ _response = self._raw_client.create(
311
+ fhir_resources=fhir_resources, mode=mode, template_id=template_id, request_options=request_options
312
+ )
313
+ return _response.data
314
+
315
+
316
+ class AsyncSummaryClient:
317
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
318
+ self._raw_client = AsyncRawSummaryClient(client_wrapper=client_wrapper)
319
+
320
+ @property
321
+ def with_raw_response(self) -> AsyncRawSummaryClient:
322
+ """
323
+ Retrieves a raw implementation of this client that returns raw responses.
324
+
325
+ Returns
326
+ -------
327
+ AsyncRawSummaryClient
328
+ """
329
+ return self._raw_client
330
+
331
+ async def list_templates(
332
+ self, *, request_options: typing.Optional[RequestOptions] = None
333
+ ) -> SummaryListTemplatesResponse:
334
+ """
335
+ Retrieves all summary templates for the authenticated user
336
+
337
+ Parameters
338
+ ----------
339
+ request_options : typing.Optional[RequestOptions]
340
+ Request-specific configuration.
341
+
342
+ Returns
343
+ -------
344
+ SummaryListTemplatesResponse
345
+ Templates retrieved successfully
346
+
347
+ Examples
348
+ --------
349
+ import asyncio
350
+
351
+ from phenoml import Asyncphenoml
352
+
353
+ client = Asyncphenoml(
354
+ token="YOUR_TOKEN",
355
+ )
356
+
357
+
358
+ async def main() -> None:
359
+ await client.summary.list_templates()
360
+
361
+
362
+ asyncio.run(main())
363
+ """
364
+ _response = await self._raw_client.list_templates(request_options=request_options)
365
+ return _response.data
366
+
367
+ async def create_template(
368
+ self,
369
+ *,
370
+ name: str,
371
+ example_summary: str,
372
+ target_resources: typing.Sequence[str],
373
+ mode: str,
374
+ description: typing.Optional[str] = OMIT,
375
+ example_fhir_data: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT,
376
+ request_options: typing.Optional[RequestOptions] = None,
377
+ ) -> CreateSummaryTemplateResponse:
378
+ """
379
+ Creates a summary template from an example using LLM function calling
380
+
381
+ Parameters
382
+ ----------
383
+ name : str
384
+ Name of the template
385
+
386
+ example_summary : str
387
+ Example summary note to generate template from
388
+
389
+ target_resources : typing.Sequence[str]
390
+ List of target FHIR resources
391
+
392
+ mode : str
393
+ Template mode (stored with the template)
394
+
395
+ description : typing.Optional[str]
396
+ Description of the template
397
+
398
+ example_fhir_data : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]
399
+ Optional example FHIR data that corresponds to the example summary
400
+
401
+ request_options : typing.Optional[RequestOptions]
402
+ Request-specific configuration.
403
+
404
+ Returns
405
+ -------
406
+ CreateSummaryTemplateResponse
407
+ Template created successfully
408
+
409
+ Examples
410
+ --------
411
+ import asyncio
412
+
413
+ from phenoml import Asyncphenoml
414
+
415
+ client = Asyncphenoml(
416
+ token="YOUR_TOKEN",
417
+ )
418
+
419
+
420
+ async def main() -> None:
421
+ await client.summary.create_template(
422
+ name="name",
423
+ example_summary="Patient John Doe, age 45, presents with hypertension diagnosed on 2024-01-15.",
424
+ target_resources=["Patient", "Condition", "Observation"],
425
+ mode="mode",
426
+ )
427
+
428
+
429
+ asyncio.run(main())
430
+ """
431
+ _response = await self._raw_client.create_template(
432
+ name=name,
433
+ example_summary=example_summary,
434
+ target_resources=target_resources,
435
+ mode=mode,
436
+ description=description,
437
+ example_fhir_data=example_fhir_data,
438
+ request_options=request_options,
439
+ )
440
+ return _response.data
441
+
442
+ async def get_template(
443
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
444
+ ) -> SummaryGetTemplateResponse:
445
+ """
446
+ Retrieves a specific summary template
447
+
448
+ Parameters
449
+ ----------
450
+ id : str
451
+ Template ID
452
+
453
+ request_options : typing.Optional[RequestOptions]
454
+ Request-specific configuration.
455
+
456
+ Returns
457
+ -------
458
+ SummaryGetTemplateResponse
459
+ Template retrieved successfully
460
+
461
+ Examples
462
+ --------
463
+ import asyncio
464
+
465
+ from phenoml import Asyncphenoml
466
+
467
+ client = Asyncphenoml(
468
+ token="YOUR_TOKEN",
469
+ )
470
+
471
+
472
+ async def main() -> None:
473
+ await client.summary.get_template(
474
+ id="id",
475
+ )
476
+
477
+
478
+ asyncio.run(main())
479
+ """
480
+ _response = await self._raw_client.get_template(id, request_options=request_options)
481
+ return _response.data
482
+
483
+ async def update_template(
484
+ self,
485
+ id: str,
486
+ *,
487
+ name: str,
488
+ template: str,
489
+ target_resources: typing.Sequence[str],
490
+ mode: str,
491
+ description: typing.Optional[str] = OMIT,
492
+ request_options: typing.Optional[RequestOptions] = None,
493
+ ) -> SummaryUpdateTemplateResponse:
494
+ """
495
+ Updates an existing summary template
496
+
497
+ Parameters
498
+ ----------
499
+ id : str
500
+ Template ID
501
+
502
+ name : str
503
+
504
+ template : str
505
+ Updated template with placeholders
506
+
507
+ target_resources : typing.Sequence[str]
508
+
509
+ mode : str
510
+ Template mode
511
+
512
+ description : typing.Optional[str]
513
+
514
+ request_options : typing.Optional[RequestOptions]
515
+ Request-specific configuration.
516
+
517
+ Returns
518
+ -------
519
+ SummaryUpdateTemplateResponse
520
+ Template updated successfully
521
+
522
+ Examples
523
+ --------
524
+ import asyncio
525
+
526
+ from phenoml import Asyncphenoml
527
+
528
+ client = Asyncphenoml(
529
+ token="YOUR_TOKEN",
530
+ )
531
+
532
+
533
+ async def main() -> None:
534
+ await client.summary.update_template(
535
+ id="id",
536
+ name="name",
537
+ template="template",
538
+ target_resources=["target_resources"],
539
+ mode="mode",
540
+ )
541
+
542
+
543
+ asyncio.run(main())
544
+ """
545
+ _response = await self._raw_client.update_template(
546
+ id,
547
+ name=name,
548
+ template=template,
549
+ target_resources=target_resources,
550
+ mode=mode,
551
+ description=description,
552
+ request_options=request_options,
553
+ )
554
+ return _response.data
555
+
556
+ async def delete_template(
557
+ self, id: str, *, request_options: typing.Optional[RequestOptions] = None
558
+ ) -> SummaryDeleteTemplateResponse:
559
+ """
560
+ Deletes a summary template
561
+
562
+ Parameters
563
+ ----------
564
+ id : str
565
+ Template ID
566
+
567
+ request_options : typing.Optional[RequestOptions]
568
+ Request-specific configuration.
569
+
570
+ Returns
571
+ -------
572
+ SummaryDeleteTemplateResponse
573
+ Template deleted successfully
574
+
575
+ Examples
576
+ --------
577
+ import asyncio
578
+
579
+ from phenoml import Asyncphenoml
580
+
581
+ client = Asyncphenoml(
582
+ token="YOUR_TOKEN",
583
+ )
584
+
585
+
586
+ async def main() -> None:
587
+ await client.summary.delete_template(
588
+ id="id",
589
+ )
590
+
591
+
592
+ asyncio.run(main())
593
+ """
594
+ _response = await self._raw_client.delete_template(id, request_options=request_options)
595
+ return _response.data
596
+
597
+ async def create(
598
+ self,
599
+ *,
600
+ fhir_resources: CreateSummaryRequestFhirResources,
601
+ mode: typing.Optional[CreateSummaryRequestMode] = OMIT,
602
+ template_id: typing.Optional[str] = OMIT,
603
+ request_options: typing.Optional[RequestOptions] = None,
604
+ ) -> CreateSummaryResponse:
605
+ """
606
+ Creates a summary from FHIR resources using one of two modes:
607
+ - **narrative**: Uses a template to substitute FHIR data into placeholders (requires template_id)
608
+ - **flatten**: Flattens FHIR resources into a searchable format for RAG/search (no template needed)
609
+
610
+ Parameters
611
+ ----------
612
+ fhir_resources : CreateSummaryRequestFhirResources
613
+ FHIR resources (single resource or Bundle)
614
+
615
+ mode : typing.Optional[CreateSummaryRequestMode]
616
+ Summary generation mode:
617
+ - narrative: Substitute FHIR data into a template (requires template_id)
618
+ - flatten: Flatten FHIR resources for RAG/search (no template needed)
619
+
620
+ template_id : typing.Optional[str]
621
+ ID of the template to use (required for narrative mode)
622
+
623
+ request_options : typing.Optional[RequestOptions]
624
+ Request-specific configuration.
625
+
626
+ Returns
627
+ -------
628
+ CreateSummaryResponse
629
+ Summary generated successfully
630
+
631
+ Examples
632
+ --------
633
+ import asyncio
634
+
635
+ from phenoml import Asyncphenoml
636
+ from phenoml.summary import FhirResource
637
+
638
+ client = Asyncphenoml(
639
+ token="YOUR_TOKEN",
640
+ )
641
+
642
+
643
+ async def main() -> None:
644
+ await client.summary.create(
645
+ fhir_resources=FhirResource(
646
+ resource_type="resourceType",
647
+ ),
648
+ )
649
+
650
+
651
+ asyncio.run(main())
652
+ """
653
+ _response = await self._raw_client.create(
654
+ fhir_resources=fhir_resources, mode=mode, template_id=template_id, request_options=request_options
655
+ )
656
+ return _response.data
@@ -0,0 +1,11 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ # isort: skip_file
4
+
5
+ from .bad_request_error import BadRequestError
6
+ from .forbidden_error import ForbiddenError
7
+ from .internal_server_error import InternalServerError
8
+ from .not_found_error import NotFoundError
9
+ from .unauthorized_error import UnauthorizedError
10
+
11
+ __all__ = ["BadRequestError", "ForbiddenError", "InternalServerError", "NotFoundError", "UnauthorizedError"]
@@ -0,0 +1,10 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ from ...core.api_error import ApiError
6
+
7
+
8
+ class BadRequestError(ApiError):
9
+ def __init__(self, body: typing.Optional[typing.Any], headers: typing.Optional[typing.Dict[str, str]] = None):
10
+ super().__init__(status_code=400, headers=headers, body=body)
@@ -0,0 +1,10 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ from ...core.api_error import ApiError
6
+
7
+
8
+ class ForbiddenError(ApiError):
9
+ def __init__(self, body: typing.Optional[typing.Any], headers: typing.Optional[typing.Dict[str, str]] = None):
10
+ super().__init__(status_code=403, headers=headers, body=body)
@@ -0,0 +1,10 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ from ...core.api_error import ApiError
6
+
7
+
8
+ class InternalServerError(ApiError):
9
+ def __init__(self, body: typing.Optional[typing.Any], headers: typing.Optional[typing.Dict[str, str]] = None):
10
+ super().__init__(status_code=500, headers=headers, body=body)
@@ -0,0 +1,10 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ from ...core.api_error import ApiError
6
+
7
+
8
+ class NotFoundError(ApiError):
9
+ def __init__(self, body: typing.Optional[typing.Any], headers: typing.Optional[typing.Dict[str, str]] = None):
10
+ super().__init__(status_code=404, headers=headers, body=body)