arbi 0.18.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. arbi/__init__.py +92 -0
  2. arbi/_base_client.py +2124 -0
  3. arbi/_client.py +442 -0
  4. arbi/_compat.py +219 -0
  5. arbi/_constants.py +14 -0
  6. arbi/_exceptions.py +108 -0
  7. arbi/_files.py +123 -0
  8. arbi/_models.py +872 -0
  9. arbi/_qs.py +150 -0
  10. arbi/_resource.py +43 -0
  11. arbi/_response.py +830 -0
  12. arbi/_streaming.py +333 -0
  13. arbi/_types.py +270 -0
  14. arbi/_utils/__init__.py +64 -0
  15. arbi/_utils/_compat.py +45 -0
  16. arbi/_utils/_datetime_parse.py +136 -0
  17. arbi/_utils/_logs.py +25 -0
  18. arbi/_utils/_proxy.py +65 -0
  19. arbi/_utils/_reflection.py +42 -0
  20. arbi/_utils/_resources_proxy.py +24 -0
  21. arbi/_utils/_streams.py +12 -0
  22. arbi/_utils/_sync.py +58 -0
  23. arbi/_utils/_transform.py +457 -0
  24. arbi/_utils/_typing.py +156 -0
  25. arbi/_utils/_utils.py +421 -0
  26. arbi/_version.py +4 -0
  27. arbi/lib/.keep +4 -0
  28. arbi/py.typed +0 -0
  29. arbi/resources/__init__.py +19 -0
  30. arbi/resources/api/__init__.py +145 -0
  31. arbi/resources/api/api.py +422 -0
  32. arbi/resources/api/assistant.py +312 -0
  33. arbi/resources/api/configs.py +533 -0
  34. arbi/resources/api/conversation/__init__.py +33 -0
  35. arbi/resources/api/conversation/conversation.py +648 -0
  36. arbi/resources/api/conversation/user.py +270 -0
  37. arbi/resources/api/document/__init__.py +33 -0
  38. arbi/resources/api/document/doctag.py +516 -0
  39. arbi/resources/api/document/document.py +929 -0
  40. arbi/resources/api/health.py +253 -0
  41. arbi/resources/api/notifications.py +478 -0
  42. arbi/resources/api/tag.py +409 -0
  43. arbi/resources/api/user/__init__.py +61 -0
  44. arbi/resources/api/user/contacts.py +322 -0
  45. arbi/resources/api/user/settings.py +283 -0
  46. arbi/resources/api/user/subscription.py +230 -0
  47. arbi/resources/api/user/user.py +943 -0
  48. arbi/resources/api/workspace.py +1198 -0
  49. arbi/types/__init__.py +8 -0
  50. arbi/types/api/__init__.py +94 -0
  51. arbi/types/api/assistant_query_params.py +95 -0
  52. arbi/types/api/assistant_retrieve_params.py +95 -0
  53. arbi/types/api/chunker_config_param.py +9 -0
  54. arbi/types/api/config_create_params.py +227 -0
  55. arbi/types/api/config_create_response.py +17 -0
  56. arbi/types/api/config_delete_response.py +11 -0
  57. arbi/types/api/config_get_versions_response.py +19 -0
  58. arbi/types/api/config_retrieve_response.py +234 -0
  59. arbi/types/api/conversation/__init__.py +8 -0
  60. arbi/types/api/conversation/user_add_params.py +11 -0
  61. arbi/types/api/conversation/user_add_response.py +11 -0
  62. arbi/types/api/conversation/user_remove_params.py +11 -0
  63. arbi/types/api/conversation/user_remove_response.py +11 -0
  64. arbi/types/api/conversation_delete_message_response.py +11 -0
  65. arbi/types/api/conversation_delete_response.py +11 -0
  66. arbi/types/api/conversation_retrieve_message_response.py +105 -0
  67. arbi/types/api/conversation_retrieve_threads_response.py +124 -0
  68. arbi/types/api/conversation_share_response.py +11 -0
  69. arbi/types/api/conversation_update_title_params.py +16 -0
  70. arbi/types/api/conversation_update_title_response.py +13 -0
  71. arbi/types/api/doc_response.py +66 -0
  72. arbi/types/api/document/__init__.py +11 -0
  73. arbi/types/api/document/doc_tag_response.py +40 -0
  74. arbi/types/api/document/doctag_create_params.py +35 -0
  75. arbi/types/api/document/doctag_create_response.py +10 -0
  76. arbi/types/api/document/doctag_delete_params.py +15 -0
  77. arbi/types/api/document/doctag_generate_params.py +22 -0
  78. arbi/types/api/document/doctag_generate_response.py +20 -0
  79. arbi/types/api/document/doctag_update_params.py +35 -0
  80. arbi/types/api/document_date_extractor_llm_config.py +29 -0
  81. arbi/types/api/document_date_extractor_llm_config_param.py +28 -0
  82. arbi/types/api/document_delete_params.py +13 -0
  83. arbi/types/api/document_get_parsed_response.py +26 -0
  84. arbi/types/api/document_retrieve_params.py +16 -0
  85. arbi/types/api/document_retrieve_response.py +10 -0
  86. arbi/types/api/document_update_params.py +42 -0
  87. arbi/types/api/document_update_response.py +10 -0
  88. arbi/types/api/document_upload_from_url_params.py +26 -0
  89. arbi/types/api/document_upload_from_url_response.py +16 -0
  90. arbi/types/api/document_upload_params.py +26 -0
  91. arbi/types/api/document_upload_response.py +16 -0
  92. arbi/types/api/embedder_config.py +30 -0
  93. arbi/types/api/embedder_config_param.py +29 -0
  94. arbi/types/api/health_check_models_response.py +21 -0
  95. arbi/types/api/health_get_models_response.py +19 -0
  96. arbi/types/api/health_retrieve_status_response.py +49 -0
  97. arbi/types/api/model_citation_config.py +20 -0
  98. arbi/types/api/model_citation_config_param.py +20 -0
  99. arbi/types/api/notification_create_params.py +20 -0
  100. arbi/types/api/notification_create_response.py +47 -0
  101. arbi/types/api/notification_delete_params.py +13 -0
  102. arbi/types/api/notification_get_schemas_response.py +197 -0
  103. arbi/types/api/notification_list_response.py +47 -0
  104. arbi/types/api/notification_update_params.py +27 -0
  105. arbi/types/api/notification_update_response.py +47 -0
  106. arbi/types/api/parser_config_param.py +9 -0
  107. arbi/types/api/query_llm_config.py +30 -0
  108. arbi/types/api/query_llm_config_param.py +29 -0
  109. arbi/types/api/reranker_config.py +21 -0
  110. arbi/types/api/reranker_config_param.py +20 -0
  111. arbi/types/api/retriever_config.py +39 -0
  112. arbi/types/api/retriever_config_param.py +38 -0
  113. arbi/types/api/tag_create_params.py +49 -0
  114. arbi/types/api/tag_create_response.py +57 -0
  115. arbi/types/api/tag_delete_response.py +9 -0
  116. arbi/types/api/tag_update_params.py +22 -0
  117. arbi/types/api/tag_update_response.py +57 -0
  118. arbi/types/api/title_llm_config.py +29 -0
  119. arbi/types/api/title_llm_config_param.py +28 -0
  120. arbi/types/api/user/__init__.py +13 -0
  121. arbi/types/api/user/contact_create_params.py +13 -0
  122. arbi/types/api/user/contact_create_response.py +30 -0
  123. arbi/types/api/user/contact_delete_params.py +13 -0
  124. arbi/types/api/user/contact_list_response.py +30 -0
  125. arbi/types/api/user/setting_retrieve_response.py +89 -0
  126. arbi/types/api/user/setting_update_params.py +60 -0
  127. arbi/types/api/user/subscription_create_params.py +13 -0
  128. arbi/types/api/user/subscription_create_response.py +11 -0
  129. arbi/types/api/user/subscription_retrieve_response.py +48 -0
  130. arbi/types/api/user_change_password_params.py +18 -0
  131. arbi/types/api/user_change_password_response.py +11 -0
  132. arbi/types/api/user_check_sso_status_params.py +20 -0
  133. arbi/types/api/user_check_sso_status_response.py +25 -0
  134. arbi/types/api/user_list_products_response.py +37 -0
  135. arbi/types/api/user_list_workspaces_response.py +10 -0
  136. arbi/types/api/user_login_params.py +18 -0
  137. arbi/types/api/user_login_response.py +23 -0
  138. arbi/types/api/user_logout_response.py +9 -0
  139. arbi/types/api/user_register_params.py +22 -0
  140. arbi/types/api/user_response.py +26 -0
  141. arbi/types/api/user_verify_email_params.py +11 -0
  142. arbi/types/api/user_verify_email_response.py +9 -0
  143. arbi/types/api/workspace_copy_params.py +21 -0
  144. arbi/types/api/workspace_copy_response.py +25 -0
  145. arbi/types/api/workspace_create_protected_params.py +16 -0
  146. arbi/types/api/workspace_delete_response.py +9 -0
  147. arbi/types/api/workspace_get_conversations_response.py +30 -0
  148. arbi/types/api/workspace_get_documents_response.py +10 -0
  149. arbi/types/api/workspace_get_stats_response.py +17 -0
  150. arbi/types/api/workspace_get_tags_response.py +60 -0
  151. arbi/types/api/workspace_get_users_response.py +10 -0
  152. arbi/types/api/workspace_remove_user_params.py +11 -0
  153. arbi/types/api/workspace_remove_user_response.py +11 -0
  154. arbi/types/api/workspace_response.py +41 -0
  155. arbi/types/api/workspace_share_params.py +15 -0
  156. arbi/types/api/workspace_share_response.py +13 -0
  157. arbi/types/api/workspace_update_params.py +20 -0
  158. arbi/types/chunk.py +12 -0
  159. arbi/types/chunk_metadata.py +31 -0
  160. arbi/types/chunk_metadata_param.py +32 -0
  161. arbi/types/chunk_param.py +15 -0
  162. arbi-0.18.0.dist-info/METADATA +410 -0
  163. arbi-0.18.0.dist-info/RECORD +165 -0
  164. arbi-0.18.0.dist-info/WHEEL +4 -0
  165. arbi-0.18.0.dist-info/licenses/LICENSE +201 -0
@@ -0,0 +1,9 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from ..._models import BaseModel
4
+
5
+ __all__ = ["TagDeleteResponse"]
6
+
7
+
8
+ class TagDeleteResponse(BaseModel):
9
+ detail: str
@@ -0,0 +1,22 @@
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 Optional
6
+ from typing_extensions import Annotated, TypedDict
7
+
8
+ from ..._utils import PropertyInfo
9
+
10
+ __all__ = ["TagUpdateParams"]
11
+
12
+
13
+ class TagUpdateParams(TypedDict, total=False):
14
+ instruction: Optional[str]
15
+
16
+ name: Optional[str]
17
+
18
+ parent_ext_id: Optional[str]
19
+
20
+ shared: Optional[bool]
21
+
22
+ workspace_key: Annotated[str, PropertyInfo(alias="workspace-key")]
@@ -0,0 +1,57 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from typing import List, Optional
4
+ from datetime import datetime
5
+ from typing_extensions import Literal
6
+
7
+ from ..._models import BaseModel
8
+
9
+ __all__ = ["TagUpdateResponse", "TagType"]
10
+
11
+
12
+ class TagType(BaseModel):
13
+ """Tag format configuration stored as JSONB.
14
+
15
+ Type-specific fields:
16
+ - select: options (list of choices, can be single or multi-select)
17
+ - search: tag name is the query, chunks include relevance scores
18
+ - checkbox, text, number, folder: type only
19
+ """
20
+
21
+ options: Optional[List[str]] = None
22
+
23
+ type: Optional[Literal["checkbox", "text", "number", "select", "folder", "search"]] = None
24
+
25
+
26
+ class TagUpdateResponse(BaseModel):
27
+ created_at: datetime
28
+
29
+ created_by_ext_id: str
30
+
31
+ doctag_count: int
32
+
33
+ external_id: str
34
+
35
+ name: str
36
+
37
+ shared: bool
38
+
39
+ tag_type: TagType
40
+ """Tag format configuration stored as JSONB.
41
+
42
+ Type-specific fields:
43
+
44
+ - select: options (list of choices, can be single or multi-select)
45
+ - search: tag name is the query, chunks include relevance scores
46
+ - checkbox, text, number, folder: type only
47
+ """
48
+
49
+ updated_at: datetime
50
+
51
+ workspace_ext_id: str
52
+
53
+ instruction: Optional[str] = None
54
+
55
+ parent_ext_id: Optional[str] = None
56
+
57
+ updated_by_ext_id: Optional[str] = None
@@ -0,0 +1,29 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from typing import Optional
4
+ from typing_extensions import Literal
5
+
6
+ from pydantic import Field as FieldInfo
7
+
8
+ from ..._models import BaseModel
9
+
10
+ __all__ = ["TitleLlmConfig"]
11
+
12
+
13
+ class TitleLlmConfig(BaseModel):
14
+ api_type: Optional[Literal["local", "remote"]] = FieldInfo(alias="API_TYPE", default=None)
15
+ """The inference type (local or remote)."""
16
+
17
+ max_char_size_to_answer: Optional[int] = FieldInfo(alias="MAX_CHAR_SIZE_TO_ANSWER", default=None)
18
+ """Maximum character size to answer."""
19
+
20
+ max_tokens: Optional[int] = FieldInfo(alias="MAX_TOKENS", default=None)
21
+ """Maximum number of tokens allowed."""
22
+
23
+ api_model_name: Optional[str] = FieldInfo(alias="MODEL_NAME", default=None)
24
+ """The name of the non-reasoning model to be used."""
25
+
26
+ system_instruction: Optional[str] = FieldInfo(alias="SYSTEM_INSTRUCTION", default=None)
27
+
28
+ temperature: Optional[float] = FieldInfo(alias="TEMPERATURE", default=None)
29
+ """Temperature value for randomness."""
@@ -0,0 +1,28 @@
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, Annotated, TypedDict
6
+
7
+ from ..._utils import PropertyInfo
8
+
9
+ __all__ = ["TitleLlmConfigParam"]
10
+
11
+
12
+ class TitleLlmConfigParam(TypedDict, total=False):
13
+ api_type: Annotated[Literal["local", "remote"], PropertyInfo(alias="API_TYPE")]
14
+ """The inference type (local or remote)."""
15
+
16
+ max_char_size_to_answer: Annotated[int, PropertyInfo(alias="MAX_CHAR_SIZE_TO_ANSWER")]
17
+ """Maximum character size to answer."""
18
+
19
+ max_tokens: Annotated[int, PropertyInfo(alias="MAX_TOKENS")]
20
+ """Maximum number of tokens allowed."""
21
+
22
+ model_name: Annotated[str, PropertyInfo(alias="MODEL_NAME")]
23
+ """The name of the non-reasoning model to be used."""
24
+
25
+ system_instruction: Annotated[str, PropertyInfo(alias="SYSTEM_INSTRUCTION")]
26
+
27
+ temperature: Annotated[float, PropertyInfo(alias="TEMPERATURE")]
28
+ """Temperature value for randomness."""
@@ -0,0 +1,13 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from .contact_create_params import ContactCreateParams as ContactCreateParams
6
+ from .contact_delete_params import ContactDeleteParams as ContactDeleteParams
7
+ from .contact_list_response import ContactListResponse as ContactListResponse
8
+ from .setting_update_params import SettingUpdateParams as SettingUpdateParams
9
+ from .contact_create_response import ContactCreateResponse as ContactCreateResponse
10
+ from .setting_retrieve_response import SettingRetrieveResponse as SettingRetrieveResponse
11
+ from .subscription_create_params import SubscriptionCreateParams as SubscriptionCreateParams
12
+ from .subscription_create_response import SubscriptionCreateResponse as SubscriptionCreateResponse
13
+ from .subscription_retrieve_response import SubscriptionRetrieveResponse as SubscriptionRetrieveResponse
@@ -0,0 +1,13 @@
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 Required, TypedDict
6
+
7
+ from ...._types import SequenceNotStr
8
+
9
+ __all__ = ["ContactCreateParams"]
10
+
11
+
12
+ class ContactCreateParams(TypedDict, total=False):
13
+ emails: Required[SequenceNotStr[str]]
@@ -0,0 +1,30 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from typing import List, Optional
4
+ from typing_extensions import Literal, TypeAlias
5
+
6
+ from ...._models import BaseModel
7
+ from ..user_response import UserResponse
8
+
9
+ __all__ = ["ContactCreateResponse", "ContactCreateResponseItem"]
10
+
11
+
12
+ class ContactCreateResponseItem(BaseModel):
13
+ """Contact record - may or may not be a registered user."""
14
+
15
+ created_at: str
16
+
17
+ email: str
18
+
19
+ external_id: str
20
+
21
+ status: Literal["invitation_pending", "invitation_expired", "registered"]
22
+
23
+ user: Optional[UserResponse] = None
24
+ """Standard user representation used across all endpoints.
25
+
26
+ Used for: login response, workspace users, contacts (when registered).
27
+ """
28
+
29
+
30
+ ContactCreateResponse: TypeAlias = List[ContactCreateResponseItem]
@@ -0,0 +1,13 @@
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 Required, TypedDict
6
+
7
+ from ...._types import SequenceNotStr
8
+
9
+ __all__ = ["ContactDeleteParams"]
10
+
11
+
12
+ class ContactDeleteParams(TypedDict, total=False):
13
+ contact_ids: Required[SequenceNotStr[str]]
@@ -0,0 +1,30 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from typing import List, Optional
4
+ from typing_extensions import Literal, TypeAlias
5
+
6
+ from ...._models import BaseModel
7
+ from ..user_response import UserResponse
8
+
9
+ __all__ = ["ContactListResponse", "ContactListResponseItem"]
10
+
11
+
12
+ class ContactListResponseItem(BaseModel):
13
+ """Contact record - may or may not be a registered user."""
14
+
15
+ created_at: str
16
+
17
+ email: str
18
+
19
+ external_id: str
20
+
21
+ status: Literal["invitation_pending", "invitation_expired", "registered"]
22
+
23
+ user: Optional[UserResponse] = None
24
+ """Standard user representation used across all endpoints.
25
+
26
+ Used for: login response, workspace users, contacts (when registered).
27
+ """
28
+
29
+
30
+ ContactListResponse: TypeAlias = List[ContactListResponseItem]
@@ -0,0 +1,89 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from typing import TYPE_CHECKING, Dict, List, Optional
4
+
5
+ from pydantic import Field as FieldInfo
6
+
7
+ from ...._models import BaseModel
8
+
9
+ __all__ = ["SettingRetrieveResponse", "Subscription", "Tableview"]
10
+
11
+
12
+ class Subscription(BaseModel):
13
+ """Subscription info exposed to frontend in user settings.
14
+
15
+ Note: stripe_customer_id is deliberately excluded for security.
16
+ This is a minimal model used in UserSettingsResponse.
17
+ For full subscription details, use GET /subscription endpoint.
18
+ """
19
+
20
+ status: Optional[str] = None
21
+
22
+ trial_expires: Optional[int] = None
23
+
24
+
25
+ class Tableview(BaseModel):
26
+ """Saved column configuration for the document table.
27
+
28
+ Column ID formats:
29
+ - Standard columns: "doc_date", "title", "file_name", "status", "n_pages", "created_at"
30
+ - Tags: tag external ID (e.g., "tag-a1b2c3d4")
31
+ """
32
+
33
+ columns: List[str]
34
+
35
+ name: str
36
+
37
+ workspace: str
38
+
39
+
40
+ class SettingRetrieveResponse(BaseModel):
41
+ """User settings response."""
42
+
43
+ ai_mode: Optional[str] = None
44
+
45
+ developer: Optional[bool] = None
46
+
47
+ hide_online_status: Optional[bool] = None
48
+
49
+ last_workspace: Optional[str] = None
50
+
51
+ muted_users: Optional[List[str]] = None
52
+
53
+ pinned_workspaces: Optional[List[str]] = None
54
+
55
+ show_document_navigator: Optional[bool] = None
56
+
57
+ show_help_page: Optional[bool] = None
58
+
59
+ show_invite_tab: Optional[bool] = None
60
+
61
+ show_security_settings: Optional[bool] = None
62
+
63
+ show_smart_search: Optional[bool] = None
64
+
65
+ show_templates: Optional[bool] = None
66
+
67
+ show_thread_visualization: Optional[bool] = None
68
+
69
+ subscription: Optional[Subscription] = None
70
+ """Subscription info exposed to frontend in user settings.
71
+
72
+ Note: stripe_customer_id is deliberately excluded for security. This is a
73
+ minimal model used in UserSettingsResponse. For full subscription details, use
74
+ GET /subscription endpoint.
75
+ """
76
+
77
+ tableviews: Optional[List[Tableview]] = None
78
+
79
+ if TYPE_CHECKING:
80
+ # Some versions of Pydantic <2.8.0 have a bug and don’t allow assigning a
81
+ # value to this field, so for compatibility we avoid doing it at runtime.
82
+ __pydantic_extra__: Dict[str, object] = FieldInfo(init=False) # pyright: ignore[reportIncompatibleVariableOverride]
83
+
84
+ # Stub to indicate that arbitrary properties are accepted.
85
+ # To access properties that are not valid identifiers you can use `getattr`, e.g.
86
+ # `getattr(obj, '$type')`
87
+ def __getattr__(self, attr: str) -> object: ...
88
+ else:
89
+ __pydantic_extra__: Dict[str, object]
@@ -0,0 +1,60 @@
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 Iterable, Optional
6
+ from typing_extensions import Required, TypedDict
7
+
8
+ from ...._types import SequenceNotStr
9
+
10
+ __all__ = ["SettingUpdateParams", "Subscription", "Tableview"]
11
+
12
+
13
+ class SettingUpdateParams(TypedDict, total=False):
14
+ ai_mode: Optional[str]
15
+
16
+ hide_online_status: Optional[bool]
17
+
18
+ muted_users: Optional[SequenceNotStr[str]]
19
+
20
+ pinned_workspaces: Optional[SequenceNotStr[str]]
21
+
22
+ show_document_navigator: Optional[bool]
23
+
24
+ show_help_page: Optional[bool]
25
+
26
+ show_invite_tab: Optional[bool]
27
+
28
+ show_security_settings: Optional[bool]
29
+
30
+ show_smart_search: Optional[bool]
31
+
32
+ show_templates: Optional[bool]
33
+
34
+ show_thread_visualization: Optional[bool]
35
+
36
+ subscription: Optional[Subscription]
37
+ """Trial update - only trial_expires can be set, and only if currently null."""
38
+
39
+ tableviews: Optional[Iterable[Tableview]]
40
+
41
+
42
+ class Subscription(TypedDict, total=False):
43
+ """Trial update - only trial_expires can be set, and only if currently null."""
44
+
45
+ trial_expires: Optional[int]
46
+
47
+
48
+ class Tableview(TypedDict, total=False):
49
+ """Saved column configuration for the document table.
50
+
51
+ Column ID formats:
52
+ - Standard columns: "doc_date", "title", "file_name", "status", "n_pages", "created_at"
53
+ - Tags: tag external ID (e.g., "tag-a1b2c3d4")
54
+ """
55
+
56
+ columns: Required[SequenceNotStr[str]]
57
+
58
+ name: Required[str]
59
+
60
+ workspace: Required[str]
@@ -0,0 +1,13 @@
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 Required, TypedDict
6
+
7
+ __all__ = ["SubscriptionCreateParams"]
8
+
9
+
10
+ class SubscriptionCreateParams(TypedDict, total=False):
11
+ price_id: Required[str]
12
+
13
+ origin: str
@@ -0,0 +1,11 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from ...._models import BaseModel
4
+
5
+ __all__ = ["SubscriptionCreateResponse"]
6
+
7
+
8
+ class SubscriptionCreateResponse(BaseModel):
9
+ """Response containing Stripe checkout session client secret."""
10
+
11
+ client_secret: str
@@ -0,0 +1,48 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from typing import Optional
4
+
5
+ from ...._models import BaseModel
6
+
7
+ __all__ = ["SubscriptionRetrieveResponse"]
8
+
9
+
10
+ class SubscriptionRetrieveResponse(BaseModel):
11
+ """Subscription status response - unified model for all subscription states.
12
+
13
+ Status can be:
14
+ - "trialing": User is on trial (has trial_expires, days_remaining)
15
+ - "active": Active Stripe subscription (has plan, amount, currency, etc.)
16
+ - "canceled": Had subscription but canceled (has portal_url)
17
+ - "none": No subscription or trial
18
+ """
19
+
20
+ status: str
21
+
22
+ amount: Optional[int] = None
23
+
24
+ budget_reset_at: Optional[int] = None
25
+
26
+ cancel_at_period_end: Optional[bool] = None
27
+
28
+ currency: Optional[str] = None
29
+
30
+ current_period_end: Optional[int] = None
31
+
32
+ days_remaining: Optional[int] = None
33
+
34
+ max_budget: Optional[float] = None
35
+
36
+ plan: Optional[str] = None
37
+
38
+ portal_url: Optional[str] = None
39
+
40
+ price_id: Optional[str] = None
41
+
42
+ spend: Optional[float] = None
43
+
44
+ storage_quota_mb: Optional[int] = None
45
+
46
+ total_files_mb: Optional[float] = None
47
+
48
+ trial_expires: Optional[int] = None
@@ -0,0 +1,18 @@
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 Dict
6
+ from typing_extensions import Required, TypedDict
7
+
8
+ __all__ = ["UserChangePasswordParams"]
9
+
10
+
11
+ class UserChangePasswordParams(TypedDict, total=False):
12
+ new_signing_key: Required[str]
13
+
14
+ rewrapped_workspace_keys: Required[Dict[str, str]]
15
+
16
+ signature: Required[str]
17
+
18
+ timestamp: Required[int]
@@ -0,0 +1,11 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from ..._models import BaseModel
4
+
5
+ __all__ = ["UserChangePasswordResponse"]
6
+
7
+
8
+ class UserChangePasswordResponse(BaseModel):
9
+ detail: str
10
+
11
+ workspaces_updated: int
@@ -0,0 +1,20 @@
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 Optional
6
+ from typing_extensions import Required, TypedDict
7
+
8
+ __all__ = ["UserCheckSSOStatusParams"]
9
+
10
+
11
+ class UserCheckSSOStatusParams(TypedDict, total=False):
12
+ email: Required[str]
13
+
14
+ sso_token: Required[str]
15
+
16
+ family_name: Optional[str]
17
+
18
+ given_name: Optional[str]
19
+
20
+ picture: Optional[str]
@@ -0,0 +1,25 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from typing import Optional
4
+
5
+ from ..._models import BaseModel
6
+
7
+ __all__ = ["UserCheckSSOStatusResponse"]
8
+
9
+
10
+ class UserCheckSSOStatusResponse(BaseModel):
11
+ """SSO status response - indicates user registration state.
12
+
13
+ States:
14
+ - new_user: No user exists, show "Set Master Password"
15
+ - local_exists: Local user exists, show "Link SSO Account? Enter your master password"
16
+ - sso_exists: SSO user exists, show "Enter Master Password"
17
+ """
18
+
19
+ email: str
20
+
21
+ status: str
22
+
23
+ family_name: Optional[str] = None
24
+
25
+ given_name: Optional[str] = None
@@ -0,0 +1,37 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from typing import List, Optional
4
+ from typing_extensions import TypeAlias
5
+
6
+ from ..._models import BaseModel
7
+
8
+ __all__ = ["UserListProductsResponse", "UserListProductsResponseItem", "UserListProductsResponseItemPrice"]
9
+
10
+
11
+ class UserListProductsResponseItemPrice(BaseModel):
12
+ """Stripe product price information."""
13
+
14
+ amount: int
15
+
16
+ currency: str
17
+
18
+ interval: str
19
+
20
+ interval_count: int
21
+
22
+ price_id: str
23
+
24
+
25
+ class UserListProductsResponseItem(BaseModel):
26
+ """Stripe product with pricing information."""
27
+
28
+ name: str
29
+
30
+ prices: List[UserListProductsResponseItemPrice]
31
+
32
+ product_id: str
33
+
34
+ description: Optional[str] = None
35
+
36
+
37
+ UserListProductsResponse: TypeAlias = List[UserListProductsResponseItem]
@@ -0,0 +1,10 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from typing import List
4
+ from typing_extensions import TypeAlias
5
+
6
+ from .workspace_response import WorkspaceResponse
7
+
8
+ __all__ = ["UserListWorkspacesResponse"]
9
+
10
+ UserListWorkspacesResponse: TypeAlias = List[WorkspaceResponse]
@@ -0,0 +1,18 @@
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 Optional
6
+ from typing_extensions import Required, TypedDict
7
+
8
+ __all__ = ["UserLoginParams"]
9
+
10
+
11
+ class UserLoginParams(TypedDict, total=False):
12
+ email: Required[str]
13
+
14
+ signature: Required[str]
15
+
16
+ timestamp: Required[int]
17
+
18
+ sso_token: Optional[str]
@@ -0,0 +1,23 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from ..._models import BaseModel
4
+ from .user_response import UserResponse
5
+
6
+ __all__ = ["UserLoginResponse"]
7
+
8
+
9
+ class UserLoginResponse(BaseModel):
10
+ """Login response with access token, session key, and user info.
11
+
12
+ Used by: /user/login
13
+ """
14
+
15
+ access_token: str
16
+
17
+ session_key: str
18
+
19
+ user: UserResponse
20
+ """Standard user representation used across all endpoints.
21
+
22
+ Used for: login response, workspace users, contacts (when registered).
23
+ """
@@ -0,0 +1,9 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from ..._models import BaseModel
4
+
5
+ __all__ = ["UserLogoutResponse"]
6
+
7
+
8
+ class UserLogoutResponse(BaseModel):
9
+ detail: str