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.
- assistableai-0.1.0/.gitignore +10 -0
- assistableai-0.1.0/PKG-INFO +103 -0
- assistableai-0.1.0/README.md +83 -0
- assistableai-0.1.0/pyproject.toml +49 -0
- assistableai-0.1.0/scripts/generate.py +74 -0
- assistableai-0.1.0/src/assistableai/__init__.py +116 -0
- assistableai-0.1.0/src/assistableai/_client/__init__.py +8 -0
- assistableai-0.1.0/src/assistableai/_client/api/__init__.py +1 -0
- assistableai-0.1.0/src/assistableai/_client/api/appointments/__init__.py +1 -0
- assistableai-0.1.0/src/assistableai/_client/api/appointments/create_appointment.py +204 -0
- assistableai-0.1.0/src/assistableai/_client/api/appointments/get_appointment.py +200 -0
- assistableai-0.1.0/src/assistableai/_client/api/appointments/list_appointments.py +223 -0
- assistableai-0.1.0/src/assistableai/_client/api/appointments/update_appointment.py +219 -0
- assistableai-0.1.0/src/assistableai/_client/api/assistant_folders/__init__.py +1 -0
- assistableai-0.1.0/src/assistableai/_client/api/assistant_folders/assign_assistants_to_folder.py +221 -0
- assistableai-0.1.0/src/assistableai/_client/api/assistant_folders/create_assistant_folder.py +206 -0
- assistableai-0.1.0/src/assistableai/_client/api/assistant_folders/delete_assistant_folder.py +202 -0
- assistableai-0.1.0/src/assistableai/_client/api/assistant_folders/list_assistant_folders.py +207 -0
- assistableai-0.1.0/src/assistableai/_client/api/assistant_folders/remove_assistants_from_folder.py +221 -0
- assistableai-0.1.0/src/assistableai/_client/api/assistant_folders/update_assistant_folder.py +221 -0
- assistableai-0.1.0/src/assistableai/_client/api/assistants/__init__.py +1 -0
- assistableai-0.1.0/src/assistableai/_client/api/assistants/archive_assistant.py +200 -0
- assistableai-0.1.0/src/assistableai/_client/api/assistants/create_assistant.py +204 -0
- assistableai-0.1.0/src/assistableai/_client/api/assistants/create_assistant_note.py +219 -0
- assistableai-0.1.0/src/assistableai/_client/api/assistants/delete_assistant.py +200 -0
- assistableai-0.1.0/src/assistableai/_client/api/assistants/delete_assistant_note.py +214 -0
- assistableai-0.1.0/src/assistableai/_client/api/assistants/duplicate_assistant.py +200 -0
- assistableai-0.1.0/src/assistableai/_client/api/assistants/get_assistant.py +200 -0
- assistableai-0.1.0/src/assistableai/_client/api/assistants/list_assistant_notes.py +200 -0
- assistableai-0.1.0/src/assistableai/_client/api/assistants/list_assistant_versions.py +202 -0
- assistableai-0.1.0/src/assistableai/_client/api/assistants/list_assistants.py +224 -0
- assistableai-0.1.0/src/assistableai/_client/api/assistants/revert_assistant_version.py +216 -0
- assistableai-0.1.0/src/assistableai/_client/api/assistants/unarchive_assistant.py +200 -0
- assistableai-0.1.0/src/assistableai/_client/api/assistants/update_assistant.py +219 -0
- assistableai-0.1.0/src/assistableai/_client/api/calls/__init__.py +1 -0
- assistableai-0.1.0/src/assistableai/_client/api/calls/create_call.py +208 -0
- assistableai-0.1.0/src/assistableai/_client/api/calls/get_call.py +204 -0
- assistableai-0.1.0/src/assistableai/_client/api/calls/get_call_stats.py +231 -0
- assistableai-0.1.0/src/assistableai/_client/api/calls/list_calls.py +362 -0
- assistableai-0.1.0/src/assistableai/_client/api/chat/__init__.py +1 -0
- assistableai-0.1.0/src/assistableai/_client/api/chat/create_chat_completion.py +210 -0
- assistableai-0.1.0/src/assistableai/_client/api/contacts/__init__.py +1 -0
- assistableai-0.1.0/src/assistableai/_client/api/contacts/create_contact.py +204 -0
- assistableai-0.1.0/src/assistableai/_client/api/contacts/create_contact_note.py +219 -0
- assistableai-0.1.0/src/assistableai/_client/api/contacts/delete_contact.py +200 -0
- assistableai-0.1.0/src/assistableai/_client/api/contacts/delete_contact_note.py +214 -0
- assistableai-0.1.0/src/assistableai/_client/api/contacts/get_contact.py +200 -0
- assistableai-0.1.0/src/assistableai/_client/api/contacts/list_contact_interactions.py +202 -0
- assistableai-0.1.0/src/assistableai/_client/api/contacts/list_contact_notes.py +200 -0
- assistableai-0.1.0/src/assistableai/_client/api/contacts/list_contacts.py +235 -0
- assistableai-0.1.0/src/assistableai/_client/api/contacts/permanently_delete_contact.py +202 -0
- assistableai-0.1.0/src/assistableai/_client/api/contacts/update_contact.py +219 -0
- assistableai-0.1.0/src/assistableai/_client/api/conversations/__init__.py +1 -0
- assistableai-0.1.0/src/assistableai/_client/api/conversations/delete_conversation.py +200 -0
- assistableai-0.1.0/src/assistableai/_client/api/conversations/get_conversation.py +200 -0
- assistableai-0.1.0/src/assistableai/_client/api/conversations/get_conversation_stats.py +187 -0
- assistableai-0.1.0/src/assistableai/_client/api/conversations/list_conversation_calls.py +206 -0
- assistableai-0.1.0/src/assistableai/_client/api/conversations/list_conversations.py +309 -0
- assistableai-0.1.0/src/assistableai/_client/api/conversations/update_conversation.py +219 -0
- assistableai-0.1.0/src/assistableai/_client/api/flows/__init__.py +1 -0
- assistableai-0.1.0/src/assistableai/_client/api/flows/create_flow.py +204 -0
- assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/__init__.py +1 -0
- assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/archive_knowledge_base.py +202 -0
- assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/assign_knowledge_base.py +219 -0
- assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/create_faq_source.py +219 -0
- assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/create_file_source.py +219 -0
- assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/create_knowledge_base.py +204 -0
- assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/create_query_training.py +219 -0
- assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/create_text_source.py +219 -0
- assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/create_url_source.py +219 -0
- assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/delete_knowledge_source.py +216 -0
- assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/delete_query_training.py +214 -0
- assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/disable_knowledge_base_voice.py +202 -0
- assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/enable_knowledge_base_voice.py +202 -0
- assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/get_knowledge_base.py +200 -0
- assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/list_assistant_knowledge_bases.py +202 -0
- assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/list_knowledge_bases.py +220 -0
- assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/list_query_trainings.py +220 -0
- assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/remove_knowledge_base.py +219 -0
- assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/rename_knowledge_source.py +235 -0
- assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/toggle_query_training.py +214 -0
- assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/update_knowledge_base.py +219 -0
- assistableai-0.1.0/src/assistableai/_client/api/knowledge_base/update_query_training.py +233 -0
- assistableai-0.1.0/src/assistableai/_client/api/messages/__init__.py +1 -0
- assistableai-0.1.0/src/assistableai/_client/api/messages/create_message.py +204 -0
- assistableai-0.1.0/src/assistableai/_client/api/messages/list_conversation_messages.py +202 -0
- assistableai-0.1.0/src/assistableai/_client/api/number_pools/__init__.py +1 -0
- assistableai-0.1.0/src/assistableai/_client/api/number_pools/add_numbers_to_pool.py +219 -0
- assistableai-0.1.0/src/assistableai/_client/api/number_pools/create_number_pool.py +204 -0
- assistableai-0.1.0/src/assistableai/_client/api/number_pools/delete_number_pool.py +200 -0
- assistableai-0.1.0/src/assistableai/_client/api/number_pools/get_number_pool.py +200 -0
- assistableai-0.1.0/src/assistableai/_client/api/number_pools/list_number_pools.py +185 -0
- assistableai-0.1.0/src/assistableai/_client/api/number_pools/remove_numbers_from_pool.py +221 -0
- assistableai-0.1.0/src/assistableai/_client/api/number_pools/update_number_pool.py +219 -0
- assistableai-0.1.0/src/assistableai/_client/api/phone_numbers/__init__.py +1 -0
- assistableai-0.1.0/src/assistableai/_client/api/phone_numbers/assign_phone_number.py +219 -0
- assistableai-0.1.0/src/assistableai/_client/api/phone_numbers/get_phone_number.py +200 -0
- assistableai-0.1.0/src/assistableai/_client/api/phone_numbers/list_phone_numbers.py +185 -0
- assistableai-0.1.0/src/assistableai/_client/api/phone_numbers/update_phone_number.py +219 -0
- assistableai-0.1.0/src/assistableai/_client/api/tags/__init__.py +1 -0
- assistableai-0.1.0/src/assistableai/_client/api/tags/create_tag.py +204 -0
- assistableai-0.1.0/src/assistableai/_client/api/tags/delete_tag.py +200 -0
- assistableai-0.1.0/src/assistableai/_client/api/tags/get_tag.py +200 -0
- assistableai-0.1.0/src/assistableai/_client/api/tags/list_tags.py +205 -0
- assistableai-0.1.0/src/assistableai/_client/api/tags/permanently_delete_tag.py +202 -0
- assistableai-0.1.0/src/assistableai/_client/api/tags/update_tag.py +219 -0
- assistableai-0.1.0/src/assistableai/_client/api/tools/__init__.py +1 -0
- assistableai-0.1.0/src/assistableai/_client/api/tools/assign_tool.py +219 -0
- assistableai-0.1.0/src/assistableai/_client/api/tools/copy_tool.py +200 -0
- assistableai-0.1.0/src/assistableai/_client/api/tools/create_tool.py +204 -0
- assistableai-0.1.0/src/assistableai/_client/api/tools/delete_tool.py +200 -0
- assistableai-0.1.0/src/assistableai/_client/api/tools/get_tool.py +200 -0
- assistableai-0.1.0/src/assistableai/_client/api/tools/list_assistant_tools.py +200 -0
- assistableai-0.1.0/src/assistableai/_client/api/tools/list_tool_categories.py +185 -0
- assistableai-0.1.0/src/assistableai/_client/api/tools/list_tools.py +319 -0
- assistableai-0.1.0/src/assistableai/_client/api/tools/remove_tool.py +219 -0
- assistableai-0.1.0/src/assistableai/_client/api/tools/update_tool.py +219 -0
- assistableai-0.1.0/src/assistableai/_client/api/voices/__init__.py +1 -0
- assistableai-0.1.0/src/assistableai/_client/api/voices/get_voice.py +200 -0
- assistableai-0.1.0/src/assistableai/_client/api/voices/get_voice_filter_options.py +187 -0
- assistableai-0.1.0/src/assistableai/_client/api/voices/get_voice_stats.py +185 -0
- assistableai-0.1.0/src/assistableai/_client/api/voices/list_voices.py +279 -0
- assistableai-0.1.0/src/assistableai/_client/api/voices/update_voice_allow_copy.py +221 -0
- assistableai-0.1.0/src/assistableai/_client/client.py +286 -0
- assistableai-0.1.0/src/assistableai/_client/errors.py +16 -0
- assistableai-0.1.0/src/assistableai/_client/models/__init__.py +511 -0
- assistableai-0.1.0/src/assistableai/_client/models/add_numbers_to_pool_body.py +60 -0
- assistableai-0.1.0/src/assistableai/_client/models/add_numbers_to_pool_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/api_error.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/api_error_error.py +67 -0
- assistableai-0.1.0/src/assistableai/_client/models/appointment.py +173 -0
- assistableai-0.1.0/src/assistableai/_client/models/archive_assistant_response_200.py +88 -0
- assistableai-0.1.0/src/assistableai/_client/models/archive_assistant_response_200_data.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/models/archive_knowledge_base_response_200.py +88 -0
- assistableai-0.1.0/src/assistableai/_client/models/archive_knowledge_base_response_200_data.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/models/assign_assistants_to_folder_body.py +60 -0
- assistableai-0.1.0/src/assistableai/_client/models/assign_assistants_to_folder_response_200.py +88 -0
- assistableai-0.1.0/src/assistableai/_client/models/assign_assistants_to_folder_response_200_data.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/models/assign_knowledge_base_body.py +60 -0
- assistableai-0.1.0/src/assistableai/_client/models/assign_knowledge_base_response_200.py +88 -0
- assistableai-0.1.0/src/assistableai/_client/models/assign_knowledge_base_response_200_data.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/models/assign_phone_number_body.py +67 -0
- assistableai-0.1.0/src/assistableai/_client/models/assign_phone_number_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/assign_tool_body.py +60 -0
- assistableai-0.1.0/src/assistableai/_client/models/assign_tool_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/assign_tool_response_200_data.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/models/assistant.py +185 -0
- assistableai-0.1.0/src/assistableai/_client/models/assistant_folder.py +83 -0
- assistableai-0.1.0/src/assistableai/_client/models/assistant_folder_counts.py +47 -0
- assistableai-0.1.0/src/assistableai/_client/models/assistant_note.py +63 -0
- assistableai-0.1.0/src/assistableai/_client/models/assistant_version.py +83 -0
- assistableai-0.1.0/src/assistableai/_client/models/call.py +516 -0
- assistableai-0.1.0/src/assistableai/_client/models/call_assistant_type_0.py +47 -0
- assistableai-0.1.0/src/assistableai/_client/models/call_contact_type_0.py +81 -0
- assistableai-0.1.0/src/assistableai/_client/models/call_list_item.py +334 -0
- assistableai-0.1.0/src/assistableai/_client/models/call_list_item_assistant_type_0.py +47 -0
- assistableai-0.1.0/src/assistableai/_client/models/call_list_item_contact_type_0.py +81 -0
- assistableai-0.1.0/src/assistableai/_client/models/call_stats.py +103 -0
- assistableai-0.1.0/src/assistableai/_client/models/call_stats_sentiment_breakdown.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/models/contact.py +267 -0
- assistableai-0.1.0/src/assistableai/_client/models/contact_note.py +83 -0
- assistableai-0.1.0/src/assistableai/_client/models/conversation.py +266 -0
- assistableai-0.1.0/src/assistableai/_client/models/conversation_assistant_type_0.py +47 -0
- assistableai-0.1.0/src/assistableai/_client/models/conversation_stats.py +71 -0
- assistableai-0.1.0/src/assistableai/_client/models/copy_tool_response_201.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_appointment_body.py +107 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_appointment_body_status.py +13 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_appointment_response_201.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_assistant_body.py +170 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_assistant_body_assistant_type.py +9 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_assistant_body_model.py +34 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_assistant_folder_body.py +69 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_assistant_folder_response_201.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_assistant_note_body.py +60 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_assistant_note_response_201.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_assistant_response_201.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_call_body.py +108 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_call_body_variables.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_call_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_call_response_200_data.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_chat_completion_body.py +77 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_chat_completion_response_200.py +88 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_chat_completion_response_200_data.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_contact_body.py +241 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_contact_note_body.py +60 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_contact_note_response_201.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_contact_response_201.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_faq_source_body.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_faq_source_body_faqs_item.py +47 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_faq_source_response_201.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_file_source_body.py +103 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_file_source_response_201.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_flow_body.py +77 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_flow_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_flow_response_200_data.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_knowledge_base_body.py +78 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_knowledge_base_response_201.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_message_body.py +102 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_message_body_channel.py +17 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_message_body_type.py +19 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_message_response_200.py +86 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_message_response_200_data.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_number_pool_body.py +69 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_number_pool_response_201.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_query_training_body.py +68 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_query_training_response_201.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_tag_body.py +69 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_tag_response_201.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_text_source_body.py +68 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_text_source_response_201.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_tool_body.py +209 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_tool_body_headers.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_tool_body_http_method.py +12 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_tool_body_parameters.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_tool_body_tool_type.py +12 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_tool_response_201.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_url_source_body.py +68 -0
- assistableai-0.1.0/src/assistableai/_client/models/create_url_source_response_201.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/delete_assistant_folder_response_200.py +88 -0
- assistableai-0.1.0/src/assistableai/_client/models/delete_assistant_folder_response_200_data.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/models/delete_assistant_note_response_200.py +88 -0
- assistableai-0.1.0/src/assistableai/_client/models/delete_assistant_note_response_200_data.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/models/delete_assistant_response_200.py +88 -0
- assistableai-0.1.0/src/assistableai/_client/models/delete_assistant_response_200_data.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/models/delete_contact_note_response_200.py +88 -0
- assistableai-0.1.0/src/assistableai/_client/models/delete_contact_note_response_200_data.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/models/delete_contact_response_200.py +86 -0
- assistableai-0.1.0/src/assistableai/_client/models/delete_contact_response_200_data.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/models/delete_conversation_response_200.py +88 -0
- assistableai-0.1.0/src/assistableai/_client/models/delete_conversation_response_200_data.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/models/delete_knowledge_source_response_200.py +88 -0
- assistableai-0.1.0/src/assistableai/_client/models/delete_knowledge_source_response_200_data.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/models/delete_number_pool_response_200.py +88 -0
- assistableai-0.1.0/src/assistableai/_client/models/delete_number_pool_response_200_data.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/models/delete_query_training_response_200.py +88 -0
- assistableai-0.1.0/src/assistableai/_client/models/delete_query_training_response_200_data.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/models/delete_tag_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/delete_tag_response_200_data.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/models/delete_tool_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/delete_tool_response_200_data.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/models/disable_knowledge_base_voice_response_200.py +88 -0
- assistableai-0.1.0/src/assistableai/_client/models/disable_knowledge_base_voice_response_200_data.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/models/duplicate_assistant_response_201.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/enable_knowledge_base_voice_response_200.py +88 -0
- assistableai-0.1.0/src/assistableai/_client/models/enable_knowledge_base_voice_response_200_data.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/models/get_appointment_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/get_assistant_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/get_call_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/get_call_stats_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/get_contact_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/get_conversation_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/get_conversation_stats_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/get_knowledge_base_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/get_number_pool_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/get_phone_number_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/get_tag_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/get_tool_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/get_voice_filter_options_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/get_voice_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/get_voice_stats_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/knowledge_base.py +107 -0
- assistableai-0.1.0/src/assistableai/_client/models/knowledge_source.py +71 -0
- assistableai-0.1.0/src/assistableai/_client/models/list_appointments_response_200.py +92 -0
- assistableai-0.1.0/src/assistableai/_client/models/list_assistant_folders_response_200.py +92 -0
- assistableai-0.1.0/src/assistableai/_client/models/list_assistant_knowledge_bases_response_200.py +92 -0
- assistableai-0.1.0/src/assistableai/_client/models/list_assistant_notes_response_200.py +92 -0
- assistableai-0.1.0/src/assistableai/_client/models/list_assistant_tools_response_200.py +92 -0
- assistableai-0.1.0/src/assistableai/_client/models/list_assistant_versions_response_200.py +92 -0
- assistableai-0.1.0/src/assistableai/_client/models/list_assistants_response_200.py +92 -0
- assistableai-0.1.0/src/assistableai/_client/models/list_calls_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/list_calls_response_200_data.py +85 -0
- assistableai-0.1.0/src/assistableai/_client/models/list_calls_sentiment.py +11 -0
- assistableai-0.1.0/src/assistableai/_client/models/list_calls_status.py +16 -0
- assistableai-0.1.0/src/assistableai/_client/models/list_contact_interactions_response_200.py +88 -0
- assistableai-0.1.0/src/assistableai/_client/models/list_contact_interactions_response_200_data.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/models/list_contact_notes_response_200.py +92 -0
- assistableai-0.1.0/src/assistableai/_client/models/list_contacts_response_200.py +92 -0
- assistableai-0.1.0/src/assistableai/_client/models/list_conversation_calls_response_200.py +92 -0
- assistableai-0.1.0/src/assistableai/_client/models/list_conversation_messages_response_200.py +88 -0
- assistableai-0.1.0/src/assistableai/_client/models/list_conversation_messages_response_200_data.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/models/list_conversations_channel.py +17 -0
- assistableai-0.1.0/src/assistableai/_client/models/list_conversations_response_200.py +88 -0
- assistableai-0.1.0/src/assistableai/_client/models/list_conversations_response_200_data.py +75 -0
- assistableai-0.1.0/src/assistableai/_client/models/list_conversations_sort.py +10 -0
- assistableai-0.1.0/src/assistableai/_client/models/list_knowledge_bases_response_200.py +92 -0
- assistableai-0.1.0/src/assistableai/_client/models/list_number_pools_response_200.py +92 -0
- assistableai-0.1.0/src/assistableai/_client/models/list_phone_numbers_response_200.py +92 -0
- assistableai-0.1.0/src/assistableai/_client/models/list_query_trainings_response_200.py +92 -0
- assistableai-0.1.0/src/assistableai/_client/models/list_tags_response_200.py +92 -0
- assistableai-0.1.0/src/assistableai/_client/models/list_tool_categories_response_200.py +88 -0
- assistableai-0.1.0/src/assistableai/_client/models/list_tool_categories_response_200_data.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/models/list_tools_response_200.py +92 -0
- assistableai-0.1.0/src/assistableai/_client/models/list_tools_tool_type.py +12 -0
- assistableai-0.1.0/src/assistableai/_client/models/list_voices_gender.py +10 -0
- assistableai-0.1.0/src/assistableai/_client/models/list_voices_provider.py +15 -0
- assistableai-0.1.0/src/assistableai/_client/models/list_voices_response_200.py +92 -0
- assistableai-0.1.0/src/assistableai/_client/models/number_pool.py +101 -0
- assistableai-0.1.0/src/assistableai/_client/models/number_pool_phone_numbers_item.py +61 -0
- assistableai-0.1.0/src/assistableai/_client/models/permanently_delete_contact_response_200.py +88 -0
- assistableai-0.1.0/src/assistableai/_client/models/permanently_delete_contact_response_200_data.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/models/permanently_delete_tag_response_200.py +88 -0
- assistableai-0.1.0/src/assistableai/_client/models/permanently_delete_tag_response_200_data.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/models/phone_number.py +205 -0
- assistableai-0.1.0/src/assistableai/_client/models/query_training.py +87 -0
- assistableai-0.1.0/src/assistableai/_client/models/remove_assistants_from_folder_body.py +60 -0
- assistableai-0.1.0/src/assistableai/_client/models/remove_assistants_from_folder_response_200.py +88 -0
- assistableai-0.1.0/src/assistableai/_client/models/remove_assistants_from_folder_response_200_data.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/models/remove_knowledge_base_body.py +60 -0
- assistableai-0.1.0/src/assistableai/_client/models/remove_knowledge_base_response_200.py +88 -0
- assistableai-0.1.0/src/assistableai/_client/models/remove_knowledge_base_response_200_data.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/models/remove_numbers_from_pool_body.py +60 -0
- assistableai-0.1.0/src/assistableai/_client/models/remove_numbers_from_pool_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/remove_tool_body.py +60 -0
- assistableai-0.1.0/src/assistableai/_client/models/remove_tool_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/remove_tool_response_200_data.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/models/rename_knowledge_source_body.py +60 -0
- assistableai-0.1.0/src/assistableai/_client/models/rename_knowledge_source_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/revert_assistant_version_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/tag.py +89 -0
- assistableai-0.1.0/src/assistableai/_client/models/toggle_query_training_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/tool.py +149 -0
- assistableai-0.1.0/src/assistableai/_client/models/unarchive_assistant_response_200.py +88 -0
- assistableai-0.1.0/src/assistableai/_client/models/unarchive_assistant_response_200_data.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/models/update_appointment_body.py +177 -0
- assistableai-0.1.0/src/assistableai/_client/models/update_appointment_body_status_type_0.py +13 -0
- assistableai-0.1.0/src/assistableai/_client/models/update_appointment_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/update_assistant_body.py +168 -0
- assistableai-0.1.0/src/assistableai/_client/models/update_assistant_body_assistant_type.py +9 -0
- assistableai-0.1.0/src/assistableai/_client/models/update_assistant_body_model.py +34 -0
- assistableai-0.1.0/src/assistableai/_client/models/update_assistant_folder_body.py +67 -0
- assistableai-0.1.0/src/assistableai/_client/models/update_assistant_folder_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/update_assistant_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/update_contact_body.py +250 -0
- assistableai-0.1.0/src/assistableai/_client/models/update_contact_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/update_conversation_body.py +182 -0
- assistableai-0.1.0/src/assistableai/_client/models/update_conversation_body_lead_quality_type_0.py +11 -0
- assistableai-0.1.0/src/assistableai/_client/models/update_conversation_body_user_sentiment_type_0.py +11 -0
- assistableai-0.1.0/src/assistableai/_client/models/update_conversation_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/update_knowledge_base_body.py +76 -0
- assistableai-0.1.0/src/assistableai/_client/models/update_knowledge_base_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/update_number_pool_body.py +58 -0
- assistableai-0.1.0/src/assistableai/_client/models/update_number_pool_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/update_phone_number_body.py +190 -0
- assistableai-0.1.0/src/assistableai/_client/models/update_phone_number_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/update_query_training_body.py +76 -0
- assistableai-0.1.0/src/assistableai/_client/models/update_query_training_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/update_tag_body.py +78 -0
- assistableai-0.1.0/src/assistableai/_client/models/update_tag_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/update_tool_body.py +207 -0
- assistableai-0.1.0/src/assistableai/_client/models/update_tool_body_headers.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/models/update_tool_body_http_method.py +12 -0
- assistableai-0.1.0/src/assistableai/_client/models/update_tool_body_parameters.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/models/update_tool_body_tool_type.py +12 -0
- assistableai-0.1.0/src/assistableai/_client/models/update_tool_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/update_voice_allow_copy_body.py +60 -0
- assistableai-0.1.0/src/assistableai/_client/models/update_voice_allow_copy_response_200.py +84 -0
- assistableai-0.1.0/src/assistableai/_client/models/voice.py +147 -0
- assistableai-0.1.0/src/assistableai/_client/models/voice_filter_options.py +63 -0
- assistableai-0.1.0/src/assistableai/_client/models/voice_stats.py +69 -0
- assistableai-0.1.0/src/assistableai/_client/models/voice_stats_by_provider.py +44 -0
- assistableai-0.1.0/src/assistableai/_client/types.py +46 -0
- assistableai-0.1.0/src/assistableai/mcp.py +61 -0
- assistableai-0.1.0/src/assistableai/py.typed +0 -0
- assistableai-0.1.0/src/assistableai/spec/openapi.json +15644 -0
|
@@ -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 @@
|
|
|
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
|