assistableai 0.1.0__tar.gz

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 (364) hide show
  1. assistableai-0.1.0/.gitignore +10 -0
  2. assistableai-0.1.0/PKG-INFO +103 -0
  3. assistableai-0.1.0/README.md +83 -0
  4. assistableai-0.1.0/pyproject.toml +49 -0
  5. assistableai-0.1.0/scripts/generate.py +74 -0
  6. assistableai-0.1.0/src/assistableai/__init__.py +116 -0
  7. assistableai-0.1.0/src/assistableai/_client/__init__.py +8 -0
  8. assistableai-0.1.0/src/assistableai/_client/api/__init__.py +1 -0
  9. assistableai-0.1.0/src/assistableai/_client/api/appointments/__init__.py +1 -0
  10. assistableai-0.1.0/src/assistableai/_client/api/appointments/create_appointment.py +204 -0
  11. assistableai-0.1.0/src/assistableai/_client/api/appointments/get_appointment.py +200 -0
  12. assistableai-0.1.0/src/assistableai/_client/api/appointments/list_appointments.py +223 -0
  13. assistableai-0.1.0/src/assistableai/_client/api/appointments/update_appointment.py +219 -0
  14. assistableai-0.1.0/src/assistableai/_client/api/assistant_folders/__init__.py +1 -0
  15. assistableai-0.1.0/src/assistableai/_client/api/assistant_folders/assign_assistants_to_folder.py +221 -0
  16. assistableai-0.1.0/src/assistableai/_client/api/assistant_folders/create_assistant_folder.py +206 -0
  17. assistableai-0.1.0/src/assistableai/_client/api/assistant_folders/delete_assistant_folder.py +202 -0
  18. assistableai-0.1.0/src/assistableai/_client/api/assistant_folders/list_assistant_folders.py +207 -0
  19. assistableai-0.1.0/src/assistableai/_client/api/assistant_folders/remove_assistants_from_folder.py +221 -0
  20. assistableai-0.1.0/src/assistableai/_client/api/assistant_folders/update_assistant_folder.py +221 -0
  21. assistableai-0.1.0/src/assistableai/_client/api/assistants/__init__.py +1 -0
  22. assistableai-0.1.0/src/assistableai/_client/api/assistants/archive_assistant.py +200 -0
  23. assistableai-0.1.0/src/assistableai/_client/api/assistants/create_assistant.py +204 -0
  24. assistableai-0.1.0/src/assistableai/_client/api/assistants/create_assistant_note.py +219 -0
  25. assistableai-0.1.0/src/assistableai/_client/api/assistants/delete_assistant.py +200 -0
  26. assistableai-0.1.0/src/assistableai/_client/api/assistants/delete_assistant_note.py +214 -0
  27. assistableai-0.1.0/src/assistableai/_client/api/assistants/duplicate_assistant.py +200 -0
  28. assistableai-0.1.0/src/assistableai/_client/api/assistants/get_assistant.py +200 -0
  29. assistableai-0.1.0/src/assistableai/_client/api/assistants/list_assistant_notes.py +200 -0
  30. assistableai-0.1.0/src/assistableai/_client/api/assistants/list_assistant_versions.py +202 -0
  31. assistableai-0.1.0/src/assistableai/_client/api/assistants/list_assistants.py +224 -0
  32. assistableai-0.1.0/src/assistableai/_client/api/assistants/revert_assistant_version.py +216 -0
  33. assistableai-0.1.0/src/assistableai/_client/api/assistants/unarchive_assistant.py +200 -0
  34. assistableai-0.1.0/src/assistableai/_client/api/assistants/update_assistant.py +219 -0
  35. assistableai-0.1.0/src/assistableai/_client/api/calls/__init__.py +1 -0
  36. assistableai-0.1.0/src/assistableai/_client/api/calls/create_call.py +208 -0
  37. assistableai-0.1.0/src/assistableai/_client/api/calls/get_call.py +204 -0
  38. assistableai-0.1.0/src/assistableai/_client/api/calls/get_call_stats.py +231 -0
  39. assistableai-0.1.0/src/assistableai/_client/api/calls/list_calls.py +362 -0
  40. assistableai-0.1.0/src/assistableai/_client/api/chat/__init__.py +1 -0
  41. assistableai-0.1.0/src/assistableai/_client/api/chat/create_chat_completion.py +210 -0
  42. assistableai-0.1.0/src/assistableai/_client/api/contacts/__init__.py +1 -0
  43. assistableai-0.1.0/src/assistableai/_client/api/contacts/create_contact.py +204 -0
  44. assistableai-0.1.0/src/assistableai/_client/api/contacts/create_contact_note.py +219 -0
  45. assistableai-0.1.0/src/assistableai/_client/api/contacts/delete_contact.py +200 -0
  46. assistableai-0.1.0/src/assistableai/_client/api/contacts/delete_contact_note.py +214 -0
  47. assistableai-0.1.0/src/assistableai/_client/api/contacts/get_contact.py +200 -0
  48. assistableai-0.1.0/src/assistableai/_client/api/contacts/list_contact_interactions.py +202 -0
  49. assistableai-0.1.0/src/assistableai/_client/api/contacts/list_contact_notes.py +200 -0
  50. assistableai-0.1.0/src/assistableai/_client/api/contacts/list_contacts.py +235 -0
  51. assistableai-0.1.0/src/assistableai/_client/api/contacts/permanently_delete_contact.py +202 -0
  52. assistableai-0.1.0/src/assistableai/_client/api/contacts/update_contact.py +219 -0
  53. assistableai-0.1.0/src/assistableai/_client/api/conversations/__init__.py +1 -0
  54. assistableai-0.1.0/src/assistableai/_client/api/conversations/delete_conversation.py +200 -0
  55. assistableai-0.1.0/src/assistableai/_client/api/conversations/get_conversation.py +200 -0
  56. assistableai-0.1.0/src/assistableai/_client/api/conversations/get_conversation_stats.py +187 -0
  57. assistableai-0.1.0/src/assistableai/_client/api/conversations/list_conversation_calls.py +206 -0
  58. assistableai-0.1.0/src/assistableai/_client/api/conversations/list_conversations.py +309 -0
  59. assistableai-0.1.0/src/assistableai/_client/api/conversations/update_conversation.py +219 -0
  60. assistableai-0.1.0/src/assistableai/_client/api/flows/__init__.py +1 -0
  61. assistableai-0.1.0/src/assistableai/_client/api/flows/create_flow.py +204 -0
  62. assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/__init__.py +1 -0
  63. assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/archive_knowledge_base.py +202 -0
  64. assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/assign_knowledge_base.py +219 -0
  65. assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/create_faq_source.py +219 -0
  66. assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/create_file_source.py +219 -0
  67. assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/create_knowledge_base.py +204 -0
  68. assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/create_query_training.py +219 -0
  69. assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/create_text_source.py +219 -0
  70. assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/create_url_source.py +219 -0
  71. assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/delete_knowledge_source.py +216 -0
  72. assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/delete_query_training.py +214 -0
  73. assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/disable_knowledge_base_voice.py +202 -0
  74. assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/enable_knowledge_base_voice.py +202 -0
  75. assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/get_knowledge_base.py +200 -0
  76. assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/list_assistant_knowledge_bases.py +202 -0
  77. assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/list_knowledge_bases.py +220 -0
  78. assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/list_query_trainings.py +220 -0
  79. assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/remove_knowledge_base.py +219 -0
  80. assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/rename_knowledge_source.py +235 -0
  81. assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/toggle_query_training.py +214 -0
  82. assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/update_knowledge_base.py +219 -0
  83. assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/update_query_training.py +233 -0
  84. assistableai-0.1.0/src/assistableai/_client/api/messages/__init__.py +1 -0
  85. assistableai-0.1.0/src/assistableai/_client/api/messages/create_message.py +204 -0
  86. assistableai-0.1.0/src/assistableai/_client/api/messages/list_conversation_messages.py +202 -0
  87. assistableai-0.1.0/src/assistableai/_client/api/number_pools/__init__.py +1 -0
  88. assistableai-0.1.0/src/assistableai/_client/api/number_pools/add_numbers_to_pool.py +219 -0
  89. assistableai-0.1.0/src/assistableai/_client/api/number_pools/create_number_pool.py +204 -0
  90. assistableai-0.1.0/src/assistableai/_client/api/number_pools/delete_number_pool.py +200 -0
  91. assistableai-0.1.0/src/assistableai/_client/api/number_pools/get_number_pool.py +200 -0
  92. assistableai-0.1.0/src/assistableai/_client/api/number_pools/list_number_pools.py +185 -0
  93. assistableai-0.1.0/src/assistableai/_client/api/number_pools/remove_numbers_from_pool.py +221 -0
  94. assistableai-0.1.0/src/assistableai/_client/api/number_pools/update_number_pool.py +219 -0
  95. assistableai-0.1.0/src/assistableai/_client/api/phone_numbers/__init__.py +1 -0
  96. assistableai-0.1.0/src/assistableai/_client/api/phone_numbers/assign_phone_number.py +219 -0
  97. assistableai-0.1.0/src/assistableai/_client/api/phone_numbers/get_phone_number.py +200 -0
  98. assistableai-0.1.0/src/assistableai/_client/api/phone_numbers/list_phone_numbers.py +185 -0
  99. assistableai-0.1.0/src/assistableai/_client/api/phone_numbers/update_phone_number.py +219 -0
  100. assistableai-0.1.0/src/assistableai/_client/api/tags/__init__.py +1 -0
  101. assistableai-0.1.0/src/assistableai/_client/api/tags/create_tag.py +204 -0
  102. assistableai-0.1.0/src/assistableai/_client/api/tags/delete_tag.py +200 -0
  103. assistableai-0.1.0/src/assistableai/_client/api/tags/get_tag.py +200 -0
  104. assistableai-0.1.0/src/assistableai/_client/api/tags/list_tags.py +205 -0
  105. assistableai-0.1.0/src/assistableai/_client/api/tags/permanently_delete_tag.py +202 -0
  106. assistableai-0.1.0/src/assistableai/_client/api/tags/update_tag.py +219 -0
  107. assistableai-0.1.0/src/assistableai/_client/api/tools/__init__.py +1 -0
  108. assistableai-0.1.0/src/assistableai/_client/api/tools/assign_tool.py +219 -0
  109. assistableai-0.1.0/src/assistableai/_client/api/tools/copy_tool.py +200 -0
  110. assistableai-0.1.0/src/assistableai/_client/api/tools/create_tool.py +204 -0
  111. assistableai-0.1.0/src/assistableai/_client/api/tools/delete_tool.py +200 -0
  112. assistableai-0.1.0/src/assistableai/_client/api/tools/get_tool.py +200 -0
  113. assistableai-0.1.0/src/assistableai/_client/api/tools/list_assistant_tools.py +200 -0
  114. assistableai-0.1.0/src/assistableai/_client/api/tools/list_tool_categories.py +185 -0
  115. assistableai-0.1.0/src/assistableai/_client/api/tools/list_tools.py +319 -0
  116. assistableai-0.1.0/src/assistableai/_client/api/tools/remove_tool.py +219 -0
  117. assistableai-0.1.0/src/assistableai/_client/api/tools/update_tool.py +219 -0
  118. assistableai-0.1.0/src/assistableai/_client/api/voices/__init__.py +1 -0
  119. assistableai-0.1.0/src/assistableai/_client/api/voices/get_voice.py +200 -0
  120. assistableai-0.1.0/src/assistableai/_client/api/voices/get_voice_filter_options.py +187 -0
  121. assistableai-0.1.0/src/assistableai/_client/api/voices/get_voice_stats.py +185 -0
  122. assistableai-0.1.0/src/assistableai/_client/api/voices/list_voices.py +279 -0
  123. assistableai-0.1.0/src/assistableai/_client/api/voices/update_voice_allow_copy.py +221 -0
  124. assistableai-0.1.0/src/assistableai/_client/client.py +286 -0
  125. assistableai-0.1.0/src/assistableai/_client/errors.py +16 -0
  126. assistableai-0.1.0/src/assistableai/_client/models/__init__.py +511 -0
  127. assistableai-0.1.0/src/assistableai/_client/models/add_numbers_to_pool_body.py +60 -0
  128. assistableai-0.1.0/src/assistableai/_client/models/add_numbers_to_pool_response_200.py +84 -0
  129. assistableai-0.1.0/src/assistableai/_client/models/api_error.py +84 -0
  130. assistableai-0.1.0/src/assistableai/_client/models/api_error_error.py +67 -0
  131. assistableai-0.1.0/src/assistableai/_client/models/appointment.py +173 -0
  132. assistableai-0.1.0/src/assistableai/_client/models/archive_assistant_response_200.py +88 -0
  133. assistableai-0.1.0/src/assistableai/_client/models/archive_assistant_response_200_data.py +44 -0
  134. assistableai-0.1.0/src/assistableai/_client/models/archive_knowledge_base_response_200.py +88 -0
  135. assistableai-0.1.0/src/assistableai/_client/models/archive_knowledge_base_response_200_data.py +44 -0
  136. assistableai-0.1.0/src/assistableai/_client/models/assign_assistants_to_folder_body.py +60 -0
  137. assistableai-0.1.0/src/assistableai/_client/models/assign_assistants_to_folder_response_200.py +88 -0
  138. assistableai-0.1.0/src/assistableai/_client/models/assign_assistants_to_folder_response_200_data.py +44 -0
  139. assistableai-0.1.0/src/assistableai/_client/models/assign_knowledge_base_body.py +60 -0
  140. assistableai-0.1.0/src/assistableai/_client/models/assign_knowledge_base_response_200.py +88 -0
  141. assistableai-0.1.0/src/assistableai/_client/models/assign_knowledge_base_response_200_data.py +44 -0
  142. assistableai-0.1.0/src/assistableai/_client/models/assign_phone_number_body.py +67 -0
  143. assistableai-0.1.0/src/assistableai/_client/models/assign_phone_number_response_200.py +84 -0
  144. assistableai-0.1.0/src/assistableai/_client/models/assign_tool_body.py +60 -0
  145. assistableai-0.1.0/src/assistableai/_client/models/assign_tool_response_200.py +84 -0
  146. assistableai-0.1.0/src/assistableai/_client/models/assign_tool_response_200_data.py +44 -0
  147. assistableai-0.1.0/src/assistableai/_client/models/assistant.py +185 -0
  148. assistableai-0.1.0/src/assistableai/_client/models/assistant_folder.py +83 -0
  149. assistableai-0.1.0/src/assistableai/_client/models/assistant_folder_counts.py +47 -0
  150. assistableai-0.1.0/src/assistableai/_client/models/assistant_note.py +63 -0
  151. assistableai-0.1.0/src/assistableai/_client/models/assistant_version.py +83 -0
  152. assistableai-0.1.0/src/assistableai/_client/models/call.py +516 -0
  153. assistableai-0.1.0/src/assistableai/_client/models/call_assistant_type_0.py +47 -0
  154. assistableai-0.1.0/src/assistableai/_client/models/call_contact_type_0.py +81 -0
  155. assistableai-0.1.0/src/assistableai/_client/models/call_list_item.py +334 -0
  156. assistableai-0.1.0/src/assistableai/_client/models/call_list_item_assistant_type_0.py +47 -0
  157. assistableai-0.1.0/src/assistableai/_client/models/call_list_item_contact_type_0.py +81 -0
  158. assistableai-0.1.0/src/assistableai/_client/models/call_stats.py +103 -0
  159. assistableai-0.1.0/src/assistableai/_client/models/call_stats_sentiment_breakdown.py +44 -0
  160. assistableai-0.1.0/src/assistableai/_client/models/contact.py +267 -0
  161. assistableai-0.1.0/src/assistableai/_client/models/contact_note.py +83 -0
  162. assistableai-0.1.0/src/assistableai/_client/models/conversation.py +266 -0
  163. assistableai-0.1.0/src/assistableai/_client/models/conversation_assistant_type_0.py +47 -0
  164. assistableai-0.1.0/src/assistableai/_client/models/conversation_stats.py +71 -0
  165. assistableai-0.1.0/src/assistableai/_client/models/copy_tool_response_201.py +84 -0
  166. assistableai-0.1.0/src/assistableai/_client/models/create_appointment_body.py +107 -0
  167. assistableai-0.1.0/src/assistableai/_client/models/create_appointment_body_status.py +13 -0
  168. assistableai-0.1.0/src/assistableai/_client/models/create_appointment_response_201.py +84 -0
  169. assistableai-0.1.0/src/assistableai/_client/models/create_assistant_body.py +170 -0
  170. assistableai-0.1.0/src/assistableai/_client/models/create_assistant_body_assistant_type.py +9 -0
  171. assistableai-0.1.0/src/assistableai/_client/models/create_assistant_body_model.py +34 -0
  172. assistableai-0.1.0/src/assistableai/_client/models/create_assistant_folder_body.py +69 -0
  173. assistableai-0.1.0/src/assistableai/_client/models/create_assistant_folder_response_201.py +84 -0
  174. assistableai-0.1.0/src/assistableai/_client/models/create_assistant_note_body.py +60 -0
  175. assistableai-0.1.0/src/assistableai/_client/models/create_assistant_note_response_201.py +84 -0
  176. assistableai-0.1.0/src/assistableai/_client/models/create_assistant_response_201.py +84 -0
  177. assistableai-0.1.0/src/assistableai/_client/models/create_call_body.py +108 -0
  178. assistableai-0.1.0/src/assistableai/_client/models/create_call_body_variables.py +44 -0
  179. assistableai-0.1.0/src/assistableai/_client/models/create_call_response_200.py +84 -0
  180. assistableai-0.1.0/src/assistableai/_client/models/create_call_response_200_data.py +44 -0
  181. assistableai-0.1.0/src/assistableai/_client/models/create_chat_completion_body.py +77 -0
  182. assistableai-0.1.0/src/assistableai/_client/models/create_chat_completion_response_200.py +88 -0
  183. assistableai-0.1.0/src/assistableai/_client/models/create_chat_completion_response_200_data.py +44 -0
  184. assistableai-0.1.0/src/assistableai/_client/models/create_contact_body.py +241 -0
  185. assistableai-0.1.0/src/assistableai/_client/models/create_contact_note_body.py +60 -0
  186. assistableai-0.1.0/src/assistableai/_client/models/create_contact_note_response_201.py +84 -0
  187. assistableai-0.1.0/src/assistableai/_client/models/create_contact_response_201.py +84 -0
  188. assistableai-0.1.0/src/assistableai/_client/models/create_faq_source_body.py +84 -0
  189. assistableai-0.1.0/src/assistableai/_client/models/create_faq_source_body_faqs_item.py +47 -0
  190. assistableai-0.1.0/src/assistableai/_client/models/create_faq_source_response_201.py +84 -0
  191. assistableai-0.1.0/src/assistableai/_client/models/create_file_source_body.py +103 -0
  192. assistableai-0.1.0/src/assistableai/_client/models/create_file_source_response_201.py +84 -0
  193. assistableai-0.1.0/src/assistableai/_client/models/create_flow_body.py +77 -0
  194. assistableai-0.1.0/src/assistableai/_client/models/create_flow_response_200.py +84 -0
  195. assistableai-0.1.0/src/assistableai/_client/models/create_flow_response_200_data.py +44 -0
  196. assistableai-0.1.0/src/assistableai/_client/models/create_knowledge_base_body.py +78 -0
  197. assistableai-0.1.0/src/assistableai/_client/models/create_knowledge_base_response_201.py +84 -0
  198. assistableai-0.1.0/src/assistableai/_client/models/create_message_body.py +102 -0
  199. assistableai-0.1.0/src/assistableai/_client/models/create_message_body_channel.py +17 -0
  200. assistableai-0.1.0/src/assistableai/_client/models/create_message_body_type.py +19 -0
  201. assistableai-0.1.0/src/assistableai/_client/models/create_message_response_200.py +86 -0
  202. assistableai-0.1.0/src/assistableai/_client/models/create_message_response_200_data.py +44 -0
  203. assistableai-0.1.0/src/assistableai/_client/models/create_number_pool_body.py +69 -0
  204. assistableai-0.1.0/src/assistableai/_client/models/create_number_pool_response_201.py +84 -0
  205. assistableai-0.1.0/src/assistableai/_client/models/create_query_training_body.py +68 -0
  206. assistableai-0.1.0/src/assistableai/_client/models/create_query_training_response_201.py +84 -0
  207. assistableai-0.1.0/src/assistableai/_client/models/create_tag_body.py +69 -0
  208. assistableai-0.1.0/src/assistableai/_client/models/create_tag_response_201.py +84 -0
  209. assistableai-0.1.0/src/assistableai/_client/models/create_text_source_body.py +68 -0
  210. assistableai-0.1.0/src/assistableai/_client/models/create_text_source_response_201.py +84 -0
  211. assistableai-0.1.0/src/assistableai/_client/models/create_tool_body.py +209 -0
  212. assistableai-0.1.0/src/assistableai/_client/models/create_tool_body_headers.py +44 -0
  213. assistableai-0.1.0/src/assistableai/_client/models/create_tool_body_http_method.py +12 -0
  214. assistableai-0.1.0/src/assistableai/_client/models/create_tool_body_parameters.py +44 -0
  215. assistableai-0.1.0/src/assistableai/_client/models/create_tool_body_tool_type.py +12 -0
  216. assistableai-0.1.0/src/assistableai/_client/models/create_tool_response_201.py +84 -0
  217. assistableai-0.1.0/src/assistableai/_client/models/create_url_source_body.py +68 -0
  218. assistableai-0.1.0/src/assistableai/_client/models/create_url_source_response_201.py +84 -0
  219. assistableai-0.1.0/src/assistableai/_client/models/delete_assistant_folder_response_200.py +88 -0
  220. assistableai-0.1.0/src/assistableai/_client/models/delete_assistant_folder_response_200_data.py +44 -0
  221. assistableai-0.1.0/src/assistableai/_client/models/delete_assistant_note_response_200.py +88 -0
  222. assistableai-0.1.0/src/assistableai/_client/models/delete_assistant_note_response_200_data.py +44 -0
  223. assistableai-0.1.0/src/assistableai/_client/models/delete_assistant_response_200.py +88 -0
  224. assistableai-0.1.0/src/assistableai/_client/models/delete_assistant_response_200_data.py +44 -0
  225. assistableai-0.1.0/src/assistableai/_client/models/delete_contact_note_response_200.py +88 -0
  226. assistableai-0.1.0/src/assistableai/_client/models/delete_contact_note_response_200_data.py +44 -0
  227. assistableai-0.1.0/src/assistableai/_client/models/delete_contact_response_200.py +86 -0
  228. assistableai-0.1.0/src/assistableai/_client/models/delete_contact_response_200_data.py +44 -0
  229. assistableai-0.1.0/src/assistableai/_client/models/delete_conversation_response_200.py +88 -0
  230. assistableai-0.1.0/src/assistableai/_client/models/delete_conversation_response_200_data.py +44 -0
  231. assistableai-0.1.0/src/assistableai/_client/models/delete_knowledge_source_response_200.py +88 -0
  232. assistableai-0.1.0/src/assistableai/_client/models/delete_knowledge_source_response_200_data.py +44 -0
  233. assistableai-0.1.0/src/assistableai/_client/models/delete_number_pool_response_200.py +88 -0
  234. assistableai-0.1.0/src/assistableai/_client/models/delete_number_pool_response_200_data.py +44 -0
  235. assistableai-0.1.0/src/assistableai/_client/models/delete_query_training_response_200.py +88 -0
  236. assistableai-0.1.0/src/assistableai/_client/models/delete_query_training_response_200_data.py +44 -0
  237. assistableai-0.1.0/src/assistableai/_client/models/delete_tag_response_200.py +84 -0
  238. assistableai-0.1.0/src/assistableai/_client/models/delete_tag_response_200_data.py +44 -0
  239. assistableai-0.1.0/src/assistableai/_client/models/delete_tool_response_200.py +84 -0
  240. assistableai-0.1.0/src/assistableai/_client/models/delete_tool_response_200_data.py +44 -0
  241. assistableai-0.1.0/src/assistableai/_client/models/disable_knowledge_base_voice_response_200.py +88 -0
  242. assistableai-0.1.0/src/assistableai/_client/models/disable_knowledge_base_voice_response_200_data.py +44 -0
  243. assistableai-0.1.0/src/assistableai/_client/models/duplicate_assistant_response_201.py +84 -0
  244. assistableai-0.1.0/src/assistableai/_client/models/enable_knowledge_base_voice_response_200.py +88 -0
  245. assistableai-0.1.0/src/assistableai/_client/models/enable_knowledge_base_voice_response_200_data.py +44 -0
  246. assistableai-0.1.0/src/assistableai/_client/models/get_appointment_response_200.py +84 -0
  247. assistableai-0.1.0/src/assistableai/_client/models/get_assistant_response_200.py +84 -0
  248. assistableai-0.1.0/src/assistableai/_client/models/get_call_response_200.py +84 -0
  249. assistableai-0.1.0/src/assistableai/_client/models/get_call_stats_response_200.py +84 -0
  250. assistableai-0.1.0/src/assistableai/_client/models/get_contact_response_200.py +84 -0
  251. assistableai-0.1.0/src/assistableai/_client/models/get_conversation_response_200.py +84 -0
  252. assistableai-0.1.0/src/assistableai/_client/models/get_conversation_stats_response_200.py +84 -0
  253. assistableai-0.1.0/src/assistableai/_client/models/get_knowledge_base_response_200.py +84 -0
  254. assistableai-0.1.0/src/assistableai/_client/models/get_number_pool_response_200.py +84 -0
  255. assistableai-0.1.0/src/assistableai/_client/models/get_phone_number_response_200.py +84 -0
  256. assistableai-0.1.0/src/assistableai/_client/models/get_tag_response_200.py +84 -0
  257. assistableai-0.1.0/src/assistableai/_client/models/get_tool_response_200.py +84 -0
  258. assistableai-0.1.0/src/assistableai/_client/models/get_voice_filter_options_response_200.py +84 -0
  259. assistableai-0.1.0/src/assistableai/_client/models/get_voice_response_200.py +84 -0
  260. assistableai-0.1.0/src/assistableai/_client/models/get_voice_stats_response_200.py +84 -0
  261. assistableai-0.1.0/src/assistableai/_client/models/knowledge_base.py +107 -0
  262. assistableai-0.1.0/src/assistableai/_client/models/knowledge_source.py +71 -0
  263. assistableai-0.1.0/src/assistableai/_client/models/list_appointments_response_200.py +92 -0
  264. assistableai-0.1.0/src/assistableai/_client/models/list_assistant_folders_response_200.py +92 -0
  265. assistableai-0.1.0/src/assistableai/_client/models/list_assistant_knowledge_bases_response_200.py +92 -0
  266. assistableai-0.1.0/src/assistableai/_client/models/list_assistant_notes_response_200.py +92 -0
  267. assistableai-0.1.0/src/assistableai/_client/models/list_assistant_tools_response_200.py +92 -0
  268. assistableai-0.1.0/src/assistableai/_client/models/list_assistant_versions_response_200.py +92 -0
  269. assistableai-0.1.0/src/assistableai/_client/models/list_assistants_response_200.py +92 -0
  270. assistableai-0.1.0/src/assistableai/_client/models/list_calls_response_200.py +84 -0
  271. assistableai-0.1.0/src/assistableai/_client/models/list_calls_response_200_data.py +85 -0
  272. assistableai-0.1.0/src/assistableai/_client/models/list_calls_sentiment.py +11 -0
  273. assistableai-0.1.0/src/assistableai/_client/models/list_calls_status.py +16 -0
  274. assistableai-0.1.0/src/assistableai/_client/models/list_contact_interactions_response_200.py +88 -0
  275. assistableai-0.1.0/src/assistableai/_client/models/list_contact_interactions_response_200_data.py +44 -0
  276. assistableai-0.1.0/src/assistableai/_client/models/list_contact_notes_response_200.py +92 -0
  277. assistableai-0.1.0/src/assistableai/_client/models/list_contacts_response_200.py +92 -0
  278. assistableai-0.1.0/src/assistableai/_client/models/list_conversation_calls_response_200.py +92 -0
  279. assistableai-0.1.0/src/assistableai/_client/models/list_conversation_messages_response_200.py +88 -0
  280. assistableai-0.1.0/src/assistableai/_client/models/list_conversation_messages_response_200_data.py +44 -0
  281. assistableai-0.1.0/src/assistableai/_client/models/list_conversations_channel.py +17 -0
  282. assistableai-0.1.0/src/assistableai/_client/models/list_conversations_response_200.py +88 -0
  283. assistableai-0.1.0/src/assistableai/_client/models/list_conversations_response_200_data.py +75 -0
  284. assistableai-0.1.0/src/assistableai/_client/models/list_conversations_sort.py +10 -0
  285. assistableai-0.1.0/src/assistableai/_client/models/list_knowledge_bases_response_200.py +92 -0
  286. assistableai-0.1.0/src/assistableai/_client/models/list_number_pools_response_200.py +92 -0
  287. assistableai-0.1.0/src/assistableai/_client/models/list_phone_numbers_response_200.py +92 -0
  288. assistableai-0.1.0/src/assistableai/_client/models/list_query_trainings_response_200.py +92 -0
  289. assistableai-0.1.0/src/assistableai/_client/models/list_tags_response_200.py +92 -0
  290. assistableai-0.1.0/src/assistableai/_client/models/list_tool_categories_response_200.py +88 -0
  291. assistableai-0.1.0/src/assistableai/_client/models/list_tool_categories_response_200_data.py +44 -0
  292. assistableai-0.1.0/src/assistableai/_client/models/list_tools_response_200.py +92 -0
  293. assistableai-0.1.0/src/assistableai/_client/models/list_tools_tool_type.py +12 -0
  294. assistableai-0.1.0/src/assistableai/_client/models/list_voices_gender.py +10 -0
  295. assistableai-0.1.0/src/assistableai/_client/models/list_voices_provider.py +15 -0
  296. assistableai-0.1.0/src/assistableai/_client/models/list_voices_response_200.py +92 -0
  297. assistableai-0.1.0/src/assistableai/_client/models/number_pool.py +101 -0
  298. assistableai-0.1.0/src/assistableai/_client/models/number_pool_phone_numbers_item.py +61 -0
  299. assistableai-0.1.0/src/assistableai/_client/models/permanently_delete_contact_response_200.py +88 -0
  300. assistableai-0.1.0/src/assistableai/_client/models/permanently_delete_contact_response_200_data.py +44 -0
  301. assistableai-0.1.0/src/assistableai/_client/models/permanently_delete_tag_response_200.py +88 -0
  302. assistableai-0.1.0/src/assistableai/_client/models/permanently_delete_tag_response_200_data.py +44 -0
  303. assistableai-0.1.0/src/assistableai/_client/models/phone_number.py +205 -0
  304. assistableai-0.1.0/src/assistableai/_client/models/query_training.py +87 -0
  305. assistableai-0.1.0/src/assistableai/_client/models/remove_assistants_from_folder_body.py +60 -0
  306. assistableai-0.1.0/src/assistableai/_client/models/remove_assistants_from_folder_response_200.py +88 -0
  307. assistableai-0.1.0/src/assistableai/_client/models/remove_assistants_from_folder_response_200_data.py +44 -0
  308. assistableai-0.1.0/src/assistableai/_client/models/remove_knowledge_base_body.py +60 -0
  309. assistableai-0.1.0/src/assistableai/_client/models/remove_knowledge_base_response_200.py +88 -0
  310. assistableai-0.1.0/src/assistableai/_client/models/remove_knowledge_base_response_200_data.py +44 -0
  311. assistableai-0.1.0/src/assistableai/_client/models/remove_numbers_from_pool_body.py +60 -0
  312. assistableai-0.1.0/src/assistableai/_client/models/remove_numbers_from_pool_response_200.py +84 -0
  313. assistableai-0.1.0/src/assistableai/_client/models/remove_tool_body.py +60 -0
  314. assistableai-0.1.0/src/assistableai/_client/models/remove_tool_response_200.py +84 -0
  315. assistableai-0.1.0/src/assistableai/_client/models/remove_tool_response_200_data.py +44 -0
  316. assistableai-0.1.0/src/assistableai/_client/models/rename_knowledge_source_body.py +60 -0
  317. assistableai-0.1.0/src/assistableai/_client/models/rename_knowledge_source_response_200.py +84 -0
  318. assistableai-0.1.0/src/assistableai/_client/models/revert_assistant_version_response_200.py +84 -0
  319. assistableai-0.1.0/src/assistableai/_client/models/tag.py +89 -0
  320. assistableai-0.1.0/src/assistableai/_client/models/toggle_query_training_response_200.py +84 -0
  321. assistableai-0.1.0/src/assistableai/_client/models/tool.py +149 -0
  322. assistableai-0.1.0/src/assistableai/_client/models/unarchive_assistant_response_200.py +88 -0
  323. assistableai-0.1.0/src/assistableai/_client/models/unarchive_assistant_response_200_data.py +44 -0
  324. assistableai-0.1.0/src/assistableai/_client/models/update_appointment_body.py +177 -0
  325. assistableai-0.1.0/src/assistableai/_client/models/update_appointment_body_status_type_0.py +13 -0
  326. assistableai-0.1.0/src/assistableai/_client/models/update_appointment_response_200.py +84 -0
  327. assistableai-0.1.0/src/assistableai/_client/models/update_assistant_body.py +168 -0
  328. assistableai-0.1.0/src/assistableai/_client/models/update_assistant_body_assistant_type.py +9 -0
  329. assistableai-0.1.0/src/assistableai/_client/models/update_assistant_body_model.py +34 -0
  330. assistableai-0.1.0/src/assistableai/_client/models/update_assistant_folder_body.py +67 -0
  331. assistableai-0.1.0/src/assistableai/_client/models/update_assistant_folder_response_200.py +84 -0
  332. assistableai-0.1.0/src/assistableai/_client/models/update_assistant_response_200.py +84 -0
  333. assistableai-0.1.0/src/assistableai/_client/models/update_contact_body.py +250 -0
  334. assistableai-0.1.0/src/assistableai/_client/models/update_contact_response_200.py +84 -0
  335. assistableai-0.1.0/src/assistableai/_client/models/update_conversation_body.py +182 -0
  336. assistableai-0.1.0/src/assistableai/_client/models/update_conversation_body_lead_quality_type_0.py +11 -0
  337. assistableai-0.1.0/src/assistableai/_client/models/update_conversation_body_user_sentiment_type_0.py +11 -0
  338. assistableai-0.1.0/src/assistableai/_client/models/update_conversation_response_200.py +84 -0
  339. assistableai-0.1.0/src/assistableai/_client/models/update_knowledge_base_body.py +76 -0
  340. assistableai-0.1.0/src/assistableai/_client/models/update_knowledge_base_response_200.py +84 -0
  341. assistableai-0.1.0/src/assistableai/_client/models/update_number_pool_body.py +58 -0
  342. assistableai-0.1.0/src/assistableai/_client/models/update_number_pool_response_200.py +84 -0
  343. assistableai-0.1.0/src/assistableai/_client/models/update_phone_number_body.py +190 -0
  344. assistableai-0.1.0/src/assistableai/_client/models/update_phone_number_response_200.py +84 -0
  345. assistableai-0.1.0/src/assistableai/_client/models/update_query_training_body.py +76 -0
  346. assistableai-0.1.0/src/assistableai/_client/models/update_query_training_response_200.py +84 -0
  347. assistableai-0.1.0/src/assistableai/_client/models/update_tag_body.py +78 -0
  348. assistableai-0.1.0/src/assistableai/_client/models/update_tag_response_200.py +84 -0
  349. assistableai-0.1.0/src/assistableai/_client/models/update_tool_body.py +207 -0
  350. assistableai-0.1.0/src/assistableai/_client/models/update_tool_body_headers.py +44 -0
  351. assistableai-0.1.0/src/assistableai/_client/models/update_tool_body_http_method.py +12 -0
  352. assistableai-0.1.0/src/assistableai/_client/models/update_tool_body_parameters.py +44 -0
  353. assistableai-0.1.0/src/assistableai/_client/models/update_tool_body_tool_type.py +12 -0
  354. assistableai-0.1.0/src/assistableai/_client/models/update_tool_response_200.py +84 -0
  355. assistableai-0.1.0/src/assistableai/_client/models/update_voice_allow_copy_body.py +60 -0
  356. assistableai-0.1.0/src/assistableai/_client/models/update_voice_allow_copy_response_200.py +84 -0
  357. assistableai-0.1.0/src/assistableai/_client/models/voice.py +147 -0
  358. assistableai-0.1.0/src/assistableai/_client/models/voice_filter_options.py +63 -0
  359. assistableai-0.1.0/src/assistableai/_client/models/voice_stats.py +69 -0
  360. assistableai-0.1.0/src/assistableai/_client/models/voice_stats_by_provider.py +44 -0
  361. assistableai-0.1.0/src/assistableai/_client/types.py +46 -0
  362. assistableai-0.1.0/src/assistableai/mcp.py +61 -0
  363. assistableai-0.1.0/src/assistableai/py.typed +0 -0
  364. assistableai-0.1.0/src/assistableai/spec/openapi.json +15644 -0
@@ -0,0 +1,10 @@
1
+ __pycache__/
2
+ *.pyc
3
+ .venv/
4
+ dist/
5
+ build/
6
+ *.egg-info/
7
+ .ruff_cache/
8
+ .pytest_cache/
9
+ .mypy_cache/
10
+ .uv/
@@ -0,0 +1,103 @@
1
+ Metadata-Version: 2.4
2
+ Name: assistableai
3
+ Version: 0.1.0
4
+ Summary: Official Python SDK and MCP server for the Assistable AI v3 API (generated from OpenAPI).
5
+ Project-URL: Homepage, https://github.com/assistableai/assistableai-sdk
6
+ Project-URL: Repository, https://github.com/assistableai/assistableai-sdk
7
+ Author: Assistable AI
8
+ License-Expression: MIT
9
+ Keywords: ai,api,assistable,assistableai,mcp,sdk,voice
10
+ Classifier: License :: OSI Approved :: MIT License
11
+ Classifier: Operating System :: OS Independent
12
+ Classifier: Programming Language :: Python :: 3
13
+ Requires-Python: >=3.10
14
+ Requires-Dist: attrs>=22.2.0
15
+ Requires-Dist: httpx<0.29,>=0.23.1
16
+ Requires-Dist: python-dateutil>=2.8.0
17
+ Provides-Extra: mcp
18
+ Requires-Dist: fastmcp<3,>=2.8; extra == 'mcp'
19
+ Description-Content-Type: text/markdown
20
+
21
+ # assistableai (Python)
22
+
23
+ Official Python SDK **and** MCP server for the **Assistable AI v3 API**, generated
24
+ from [`spec/openapi.json`](../../spec/openapi.json) — the same source of truth as
25
+ the TypeScript SDK, CLI, and MCP server.
26
+
27
+ - **SDK** — typed operation functions + models (openapi-python-client: attrs + httpx) with a thin auth wrapper.
28
+ - **MCP server** — every v3 operation as an MCP tool, via FastMCP's `from_openapi` (optional `[mcp]` extra).
29
+
30
+ ## Install
31
+
32
+ ```bash
33
+ pip install assistableai # SDK only
34
+ pip install 'assistableai[mcp]' # SDK + MCP server
35
+ ```
36
+
37
+ ## SDK usage
38
+
39
+ ```python
40
+ import assistableai
41
+ from assistableai.api.assistants import list_assistants, get_assistant
42
+ from assistableai.api.contacts import create_contact
43
+ from assistableai.models import ContactCreate # example model
44
+
45
+ client = assistableai.configure(
46
+ api_key="ask_live_…",
47
+ subaccount_id="<subaccount-id>", # sent as X-Subaccount-Id (optional)
48
+ )
49
+
50
+ # Every op exposes sync / sync_detailed / asyncio / asyncio_detailed.
51
+ # Responses are the full {data, error, request_id} envelope (a typed model).
52
+ envelope = list_assistants.sync(client=client.raw, limit=2)
53
+
54
+ # Need status codes / headers? Use *_detailed:
55
+ resp = get_assistant.sync_detailed("<assistant-id>", client=client.raw)
56
+ print(resp.status_code, resp.parsed)
57
+
58
+ # Per-call subaccount override:
59
+ list_assistants.sync(client=client.raw, x_subaccount_id="<other-subaccount>")
60
+ ```
61
+
62
+ Credentials resolve from explicit args, then the environment
63
+ (`ASSISTABLE_API_KEY`, `ASSISTABLE_SUBACCOUNT_ID`, `ASSISTABLE_BASE_URL`). Default
64
+ base URL is `https://api.assistable.ai`.
65
+
66
+ `configure()` stores a process-global client (`assistableai.get_client()`); for
67
+ multiple credentials, construct `assistableai.AssistableAI(...)` instances
68
+ directly and pass `.raw`.
69
+
70
+ ## MCP server
71
+
72
+ ```bash
73
+ ASSISTABLE_API_KEY=ask_live_… ASSISTABLE_SUBACCOUNT_ID=<id> assistableai-mcp
74
+ # or: python -m assistableai.mcp
75
+ ```
76
+
77
+ Add to an MCP client (e.g. Claude Desktop):
78
+
79
+ ```json
80
+ {
81
+ "mcpServers": {
82
+ "assistableai": {
83
+ "command": "assistableai-mcp",
84
+ "env": {
85
+ "ASSISTABLE_API_KEY": "ask_live_…",
86
+ "ASSISTABLE_SUBACCOUNT_ID": "<subaccount-id>"
87
+ }
88
+ }
89
+ }
90
+ }
91
+ ```
92
+
93
+ ## Develop
94
+
95
+ ```bash
96
+ uv sync --all-extras # create the dev venv
97
+ uv run python scripts/generate.py # regenerate assistableai._client from the spec
98
+ uv build # build wheel + sdist
99
+ ```
100
+
101
+ The generated client (`src/assistableai/_client`) and the bundled spec
102
+ (`src/assistableai/spec/openapi.json`) are committed; regenerate them whenever
103
+ `spec/openapi.json` changes.
@@ -0,0 +1,83 @@
1
+ # assistableai (Python)
2
+
3
+ Official Python SDK **and** MCP server for the **Assistable AI v3 API**, generated
4
+ from [`spec/openapi.json`](../../spec/openapi.json) — the same source of truth as
5
+ the TypeScript SDK, CLI, and MCP server.
6
+
7
+ - **SDK** — typed operation functions + models (openapi-python-client: attrs + httpx) with a thin auth wrapper.
8
+ - **MCP server** — every v3 operation as an MCP tool, via FastMCP's `from_openapi` (optional `[mcp]` extra).
9
+
10
+ ## Install
11
+
12
+ ```bash
13
+ pip install assistableai # SDK only
14
+ pip install 'assistableai[mcp]' # SDK + MCP server
15
+ ```
16
+
17
+ ## SDK usage
18
+
19
+ ```python
20
+ import assistableai
21
+ from assistableai.api.assistants import list_assistants, get_assistant
22
+ from assistableai.api.contacts import create_contact
23
+ from assistableai.models import ContactCreate # example model
24
+
25
+ client = assistableai.configure(
26
+ api_key="ask_live_…",
27
+ subaccount_id="<subaccount-id>", # sent as X-Subaccount-Id (optional)
28
+ )
29
+
30
+ # Every op exposes sync / sync_detailed / asyncio / asyncio_detailed.
31
+ # Responses are the full {data, error, request_id} envelope (a typed model).
32
+ envelope = list_assistants.sync(client=client.raw, limit=2)
33
+
34
+ # Need status codes / headers? Use *_detailed:
35
+ resp = get_assistant.sync_detailed("<assistant-id>", client=client.raw)
36
+ print(resp.status_code, resp.parsed)
37
+
38
+ # Per-call subaccount override:
39
+ list_assistants.sync(client=client.raw, x_subaccount_id="<other-subaccount>")
40
+ ```
41
+
42
+ Credentials resolve from explicit args, then the environment
43
+ (`ASSISTABLE_API_KEY`, `ASSISTABLE_SUBACCOUNT_ID`, `ASSISTABLE_BASE_URL`). Default
44
+ base URL is `https://api.assistable.ai`.
45
+
46
+ `configure()` stores a process-global client (`assistableai.get_client()`); for
47
+ multiple credentials, construct `assistableai.AssistableAI(...)` instances
48
+ directly and pass `.raw`.
49
+
50
+ ## MCP server
51
+
52
+ ```bash
53
+ ASSISTABLE_API_KEY=ask_live_… ASSISTABLE_SUBACCOUNT_ID=<id> assistableai-mcp
54
+ # or: python -m assistableai.mcp
55
+ ```
56
+
57
+ Add to an MCP client (e.g. Claude Desktop):
58
+
59
+ ```json
60
+ {
61
+ "mcpServers": {
62
+ "assistableai": {
63
+ "command": "assistableai-mcp",
64
+ "env": {
65
+ "ASSISTABLE_API_KEY": "ask_live_…",
66
+ "ASSISTABLE_SUBACCOUNT_ID": "<subaccount-id>"
67
+ }
68
+ }
69
+ }
70
+ }
71
+ ```
72
+
73
+ ## Develop
74
+
75
+ ```bash
76
+ uv sync --all-extras # create the dev venv
77
+ uv run python scripts/generate.py # regenerate assistableai._client from the spec
78
+ uv build # build wheel + sdist
79
+ ```
80
+
81
+ The generated client (`src/assistableai/_client`) and the bundled spec
82
+ (`src/assistableai/spec/openapi.json`) are committed; regenerate them whenever
83
+ `spec/openapi.json` changes.
@@ -0,0 +1,49 @@
1
+ [build-system]
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "assistableai"
7
+ version = "0.1.0"
8
+ description = "Official Python SDK and MCP server for the Assistable AI v3 API (generated from OpenAPI)."
9
+ readme = "README.md"
10
+ requires-python = ">=3.10"
11
+ license = "MIT"
12
+ authors = [{ name = "Assistable AI" }]
13
+ keywords = ["assistable", "assistableai", "sdk", "mcp", "api", "voice", "ai"]
14
+ classifiers = [
15
+ "Programming Language :: Python :: 3",
16
+ "License :: OSI Approved :: MIT License",
17
+ "Operating System :: OS Independent",
18
+ ]
19
+ # The low-level client under assistableai._client is generated by
20
+ # openapi-python-client (attrs + httpx; python-dateutil parses datetimes).
21
+ dependencies = [
22
+ "httpx>=0.23.1,<0.29",
23
+ "attrs>=22.2.0",
24
+ "python-dateutil>=2.8.0",
25
+ ]
26
+
27
+ [project.optional-dependencies]
28
+ # Python MCP server (assistableai-mcp). Optional so SDK users don't pull it in.
29
+ mcp = ["fastmcp>=2.8,<3"]
30
+
31
+ [project.scripts]
32
+ assistableai-mcp = "assistableai.mcp:main"
33
+
34
+ [project.urls]
35
+ Homepage = "https://github.com/assistableai/assistableai-sdk"
36
+ Repository = "https://github.com/assistableai/assistableai-sdk"
37
+
38
+ [tool.hatch.build.targets.wheel]
39
+ # Single top-level package; the generated client (assistableai._client) and the
40
+ # bundled spec (assistableai/spec/openapi.json) ride along inside it.
41
+ packages = ["src/assistableai"]
42
+
43
+ [tool.hatch.build.targets.sdist]
44
+ include = ["src/assistableai", "scripts", "README.md"]
45
+
46
+ [dependency-groups]
47
+ # openapi-python-client is only needed to regenerate the client
48
+ # (scripts/generate.py invokes it via uvx; listed here for local convenience).
49
+ dev = ["openapi-python-client>=0.24,<0.25"]
@@ -0,0 +1,74 @@
1
+ #!/usr/bin/env python3
2
+ """Regenerate the low-level API client from the v3 OpenAPI spec.
3
+
4
+ Mirrors the TS SDK/CLI's "spec is the source of truth" approach: reads
5
+ ``spec/openapi.json`` (repo root) and regenerates ``assistableai._client`` with
6
+ openapi-python-client (attrs + httpx). Also copies the spec into the package as
7
+ data so the MCP server (``assistableai.mcp``) can load it at runtime.
8
+
9
+ Run from anywhere: ``python scripts/generate.py`` (or ``uv run python scripts/generate.py``)
10
+ The generated code is committed, like the TS ``src/gen``.
11
+ """
12
+
13
+ from __future__ import annotations
14
+
15
+ import shutil
16
+ import subprocess
17
+ import sys
18
+ import tempfile
19
+ from pathlib import Path
20
+
21
+ PKG_ROOT = Path(__file__).resolve().parents[1] # python/assistableai
22
+ SPEC = PKG_ROOT.parents[1] / "spec" / "openapi.json" # <repo>/spec/openapi.json
23
+ PACKAGE = PKG_ROOT / "src" / "assistableai"
24
+ GEN_DIR = PACKAGE / "_client"
25
+ SPEC_DATA = PACKAGE / "spec" / "openapi.json"
26
+
27
+ # Pinned so regeneration is reproducible across machines and CI (Phase 6).
28
+ OPC_VERSION = "0.24.2"
29
+
30
+
31
+ def main() -> None:
32
+ if not SPEC.exists():
33
+ sys.exit(f"Spec not found at {SPEC} — is this running inside the monorepo?")
34
+
35
+ with tempfile.TemporaryDirectory() as tmp:
36
+ out = Path(tmp) / "_client"
37
+ # --meta none writes the package contents directly into --output-path,
38
+ # and the package uses relative imports, so it nests cleanly under
39
+ # assistableai._client.
40
+ subprocess.run(
41
+ [
42
+ "uvx",
43
+ f"openapi-python-client@{OPC_VERSION}",
44
+ "generate",
45
+ "--path",
46
+ str(SPEC),
47
+ "--meta",
48
+ "none",
49
+ "--output-path",
50
+ str(out),
51
+ "--overwrite",
52
+ ],
53
+ check=True,
54
+ )
55
+ shutil.rmtree(out / ".ruff_cache", ignore_errors=True)
56
+
57
+ if GEN_DIR.exists():
58
+ shutil.rmtree(GEN_DIR)
59
+ shutil.copytree(out, GEN_DIR)
60
+
61
+ SPEC_DATA.parent.mkdir(parents=True, exist_ok=True)
62
+ shutil.copyfile(SPEC, SPEC_DATA)
63
+
64
+ n_models = len(list((GEN_DIR / "models").glob("*.py")))
65
+ n_ops = len([p for p in (GEN_DIR / "api").rglob("*.py") if p.name != "__init__.py"])
66
+ print(
67
+ f"Generated {GEN_DIR.relative_to(PKG_ROOT)} "
68
+ f"({n_ops} operations, {n_models} models) and bundled spec at "
69
+ f"{SPEC_DATA.relative_to(PKG_ROOT)}."
70
+ )
71
+
72
+
73
+ if __name__ == "__main__":
74
+ main()
@@ -0,0 +1,116 @@
1
+ """Official Python SDK for the Assistable AI v3 API.
2
+
3
+ The low-level, typed surface lives under :mod:`assistableai._client` (operation
4
+ functions + attrs models) and is generated from ``spec/openapi.json`` by
5
+ openapi-python-client — do not hand-edit it. This module adds the auth +
6
+ subaccount configuration on top.
7
+
8
+ Usage::
9
+
10
+ import assistableai
11
+ from assistableai import api
12
+
13
+ client = assistableai.configure(api_key="ask_live_…", subaccount_id="…")
14
+ result = api.assistants.list_assistants.sync(client=client.raw, limit=2)
15
+ # result is the full {data, error, request_id} envelope (typed model)
16
+
17
+ (``from assistableai._client.api.assistants import list_assistants`` also works.)
18
+
19
+ Every operation exposes ``sync`` / ``sync_detailed`` (and ``asyncio`` /
20
+ ``asyncio_detailed``); pass ``client=<AssistableAI>.raw``. Per-call subaccount
21
+ overrides are available via each op's ``x_subaccount_id`` argument.
22
+ """
23
+
24
+ from __future__ import annotations
25
+
26
+ import importlib
27
+ import os
28
+ import pkgutil
29
+
30
+ # Re-export the generated surface so callers can use `assistableai.api.*`,
31
+ # `assistableai.models.*`, etc. without reaching into the private module name.
32
+ from assistableai._client import api, errors, models, types
33
+ from assistableai._client.client import AuthenticatedClient, Client
34
+
35
+ # Eagerly import the per-topic api submodules (assistants, contacts, …) so that
36
+ # attribute access like `assistableai.api.assistants.list_assistants` works
37
+ # without a separate import. We can't alias these as `assistableai.api.*`
38
+ # submodules in sys.modules because the generated relative imports would then
39
+ # double-load the attrs models under a second dotted name (breaking isinstance).
40
+ for _info in pkgutil.walk_packages(api.__path__, prefix=f"{api.__name__}."):
41
+ importlib.import_module(_info.name)
42
+ del importlib, pkgutil, _info
43
+
44
+ __all__ = [
45
+ "AssistableAI",
46
+ "AuthenticatedClient",
47
+ "Client",
48
+ "configure",
49
+ "get_client",
50
+ "DEFAULT_BASE_URL",
51
+ "api",
52
+ "models",
53
+ "errors",
54
+ "types",
55
+ ]
56
+
57
+ DEFAULT_BASE_URL = "https://api.assistable.ai"
58
+
59
+
60
+ class AssistableAI:
61
+ """A configured v3 client: auth + optional default subaccount.
62
+
63
+ Wraps the generated :class:`AuthenticatedClient`, injecting
64
+ ``Authorization: Bearer <api_key>`` and (when set) ``X-Subaccount-Id`` on
65
+ every request. Pass :attr:`raw` to the generated operation functions.
66
+
67
+ Args resolve from explicit values, then environment
68
+ (``ASSISTABLE_API_KEY`` / ``ASSISTABLE_SUBACCOUNT_ID`` / ``ASSISTABLE_BASE_URL``).
69
+ """
70
+
71
+ def __init__(
72
+ self,
73
+ api_key: str | None = None,
74
+ *,
75
+ subaccount_id: str | None = None,
76
+ base_url: str | None = None,
77
+ ) -> None:
78
+ api_key = api_key or os.environ.get("ASSISTABLE_API_KEY")
79
+ if not api_key:
80
+ raise ValueError(
81
+ "An API key is required: pass api_key= or set ASSISTABLE_API_KEY."
82
+ )
83
+ subaccount_id = subaccount_id or os.environ.get("ASSISTABLE_SUBACCOUNT_ID")
84
+ base_url = base_url or os.environ.get("ASSISTABLE_BASE_URL") or DEFAULT_BASE_URL
85
+
86
+ headers = {"X-Subaccount-Id": subaccount_id} if subaccount_id else {}
87
+ self.base_url = base_url
88
+ self.subaccount_id = subaccount_id
89
+ self._client = AuthenticatedClient(base_url=base_url, token=api_key, headers=headers)
90
+
91
+ @property
92
+ def raw(self) -> AuthenticatedClient:
93
+ """The underlying generated client to pass to operation functions."""
94
+ return self._client
95
+
96
+
97
+ _default: AssistableAI | None = None
98
+
99
+
100
+ def configure(
101
+ api_key: str | None = None,
102
+ *,
103
+ subaccount_id: str | None = None,
104
+ base_url: str | None = None,
105
+ ) -> AssistableAI:
106
+ """Create and remember a process-global client (see :func:`get_client`)."""
107
+ global _default
108
+ _default = AssistableAI(api_key, subaccount_id=subaccount_id, base_url=base_url)
109
+ return _default
110
+
111
+
112
+ def get_client() -> AuthenticatedClient:
113
+ """Return the raw client configured via :func:`configure` (else raise)."""
114
+ if _default is None:
115
+ raise RuntimeError("assistableai is not configured — call assistableai.configure(...) first.")
116
+ return _default.raw
@@ -0,0 +1,8 @@
1
+ """A client library for accessing Assistable v3 API"""
2
+
3
+ from .client import AuthenticatedClient, Client
4
+
5
+ __all__ = (
6
+ "AuthenticatedClient",
7
+ "Client",
8
+ )
@@ -0,0 +1 @@
1
+ """Contains methods for accessing the API"""
@@ -0,0 +1 @@
1
+ """Contains endpoint functions for accessing the API"""
@@ -0,0 +1,204 @@
1
+ from http import HTTPStatus
2
+ from typing import Any, Optional, Union
3
+
4
+ import httpx
5
+
6
+ from ... import errors
7
+ from ...client import AuthenticatedClient, Client
8
+ from ...models.api_error import ApiError
9
+ from ...models.create_appointment_body import CreateAppointmentBody
10
+ from ...models.create_appointment_response_201 import CreateAppointmentResponse201
11
+ from ...types import UNSET, Response, Unset
12
+
13
+
14
+ def _get_kwargs(
15
+ *,
16
+ body: CreateAppointmentBody,
17
+ x_subaccount_id: Union[Unset, str] = UNSET,
18
+ ) -> dict[str, Any]:
19
+ headers: dict[str, Any] = {}
20
+ if not isinstance(x_subaccount_id, Unset):
21
+ headers["X-Subaccount-Id"] = x_subaccount_id
22
+
23
+ _kwargs: dict[str, Any] = {
24
+ "method": "post",
25
+ "url": "/v3/appointments",
26
+ }
27
+
28
+ _body = body.to_dict()
29
+
30
+ _kwargs["json"] = _body
31
+ headers["Content-Type"] = "application/json"
32
+
33
+ _kwargs["headers"] = headers
34
+ return _kwargs
35
+
36
+
37
+ def _parse_response(
38
+ *, client: Union[AuthenticatedClient, Client], response: httpx.Response
39
+ ) -> Optional[Union[ApiError, CreateAppointmentResponse201]]:
40
+ if response.status_code == 201:
41
+ response_201 = CreateAppointmentResponse201.from_dict(response.json())
42
+
43
+ return response_201
44
+ if response.status_code == 400:
45
+ response_400 = ApiError.from_dict(response.json())
46
+
47
+ return response_400
48
+ if response.status_code == 401:
49
+ response_401 = ApiError.from_dict(response.json())
50
+
51
+ return response_401
52
+ if response.status_code == 403:
53
+ response_403 = ApiError.from_dict(response.json())
54
+
55
+ return response_403
56
+ if response.status_code == 404:
57
+ response_404 = ApiError.from_dict(response.json())
58
+
59
+ return response_404
60
+ if response.status_code == 429:
61
+ response_429 = ApiError.from_dict(response.json())
62
+
63
+ return response_429
64
+ if client.raise_on_unexpected_status:
65
+ raise errors.UnexpectedStatus(response.status_code, response.content)
66
+ else:
67
+ return None
68
+
69
+
70
+ def _build_response(
71
+ *, client: Union[AuthenticatedClient, Client], response: httpx.Response
72
+ ) -> Response[Union[ApiError, CreateAppointmentResponse201]]:
73
+ return Response(
74
+ status_code=HTTPStatus(response.status_code),
75
+ content=response.content,
76
+ headers=response.headers,
77
+ parsed=_parse_response(client=client, response=response),
78
+ )
79
+
80
+
81
+ def sync_detailed(
82
+ *,
83
+ client: AuthenticatedClient,
84
+ body: CreateAppointmentBody,
85
+ x_subaccount_id: Union[Unset, str] = UNSET,
86
+ ) -> Response[Union[ApiError, CreateAppointmentResponse201]]:
87
+ """Create an appointment
88
+
89
+ Requires scope `appointments:create`.
90
+
91
+ Args:
92
+ x_subaccount_id (Union[Unset, str]):
93
+ body (CreateAppointmentBody):
94
+
95
+ Raises:
96
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
97
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
98
+
99
+ Returns:
100
+ Response[Union[ApiError, CreateAppointmentResponse201]]
101
+ """
102
+
103
+ kwargs = _get_kwargs(
104
+ body=body,
105
+ x_subaccount_id=x_subaccount_id,
106
+ )
107
+
108
+ response = client.get_httpx_client().request(
109
+ **kwargs,
110
+ )
111
+
112
+ return _build_response(client=client, response=response)
113
+
114
+
115
+ def sync(
116
+ *,
117
+ client: AuthenticatedClient,
118
+ body: CreateAppointmentBody,
119
+ x_subaccount_id: Union[Unset, str] = UNSET,
120
+ ) -> Optional[Union[ApiError, CreateAppointmentResponse201]]:
121
+ """Create an appointment
122
+
123
+ Requires scope `appointments:create`.
124
+
125
+ Args:
126
+ x_subaccount_id (Union[Unset, str]):
127
+ body (CreateAppointmentBody):
128
+
129
+ Raises:
130
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
131
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
132
+
133
+ Returns:
134
+ Union[ApiError, CreateAppointmentResponse201]
135
+ """
136
+
137
+ return sync_detailed(
138
+ client=client,
139
+ body=body,
140
+ x_subaccount_id=x_subaccount_id,
141
+ ).parsed
142
+
143
+
144
+ async def asyncio_detailed(
145
+ *,
146
+ client: AuthenticatedClient,
147
+ body: CreateAppointmentBody,
148
+ x_subaccount_id: Union[Unset, str] = UNSET,
149
+ ) -> Response[Union[ApiError, CreateAppointmentResponse201]]:
150
+ """Create an appointment
151
+
152
+ Requires scope `appointments:create`.
153
+
154
+ Args:
155
+ x_subaccount_id (Union[Unset, str]):
156
+ body (CreateAppointmentBody):
157
+
158
+ Raises:
159
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
160
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
161
+
162
+ Returns:
163
+ Response[Union[ApiError, CreateAppointmentResponse201]]
164
+ """
165
+
166
+ kwargs = _get_kwargs(
167
+ body=body,
168
+ x_subaccount_id=x_subaccount_id,
169
+ )
170
+
171
+ response = await client.get_async_httpx_client().request(**kwargs)
172
+
173
+ return _build_response(client=client, response=response)
174
+
175
+
176
+ async def asyncio(
177
+ *,
178
+ client: AuthenticatedClient,
179
+ body: CreateAppointmentBody,
180
+ x_subaccount_id: Union[Unset, str] = UNSET,
181
+ ) -> Optional[Union[ApiError, CreateAppointmentResponse201]]:
182
+ """Create an appointment
183
+
184
+ Requires scope `appointments:create`.
185
+
186
+ Args:
187
+ x_subaccount_id (Union[Unset, str]):
188
+ body (CreateAppointmentBody):
189
+
190
+ Raises:
191
+ errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
192
+ httpx.TimeoutException: If the request takes longer than Client.timeout.
193
+
194
+ Returns:
195
+ Union[ApiError, CreateAppointmentResponse201]
196
+ """
197
+
198
+ return (
199
+ await asyncio_detailed(
200
+ client=client,
201
+ body=body,
202
+ x_subaccount_id=x_subaccount_id,
203
+ )
204
+ ).parsed