├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── config.yml │ └── feature_request.md ├── pull_request_template.md └── workflows │ ├── ci-container-build.yaml │ ├── ci-test.yaml │ ├── docker-tools-build-push.yaml │ ├── production-build.yaml │ └── uv-lock-automation.yaml ├── .gitignore ├── .jshintrc ├── .pre-commit-config.yaml ├── .python-version ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── SECURITY.md ├── backend ├── .python-version ├── README.md ├── account_usage │ ├── __init__.py │ ├── apps.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0002_alter_pageusage_pages_processed.py │ │ └── __init__.py │ └── models.py ├── account_v2 │ ├── ReadMe.md │ ├── __init__.py │ ├── admin.py │ ├── apps.py │ ├── authentication_controller.py │ ├── authentication_helper.py │ ├── authentication_plugin_registry.py │ ├── authentication_service.py │ ├── constants.py │ ├── custom_auth_middleware.py │ ├── custom_authentication.py │ ├── custom_cache.py │ ├── custom_exceptions.py │ ├── dto.py │ ├── enums.py │ ├── exceptions.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0002_user_auth_provider.py │ │ └── __init__.py │ ├── models.py │ ├── organization.py │ ├── serializer.py │ ├── subscription_loader.py │ ├── templates │ │ ├── index.html │ │ └── login.html │ ├── tests.py │ ├── urls.py │ ├── user.py │ └── views.py ├── adapter_processor_v2 │ ├── __init__.py │ ├── adapter_processor.py │ ├── constants.py │ ├── exceptions.py │ ├── migrations │ │ ├── 0001_initial.py │ │ └── __init__.py │ ├── models.py │ ├── serializers.py │ ├── urls.py │ └── views.py ├── api_v2 │ ├── __init__.py │ ├── admin.py │ ├── api_deployment_dto_registry.py │ ├── api_deployment_views.py │ ├── api_key_validator.py │ ├── api_key_views.py │ ├── apps.py │ ├── constants.py │ ├── deployment_helper.py │ ├── exceptions.py │ ├── execution_urls.py │ ├── key_helper.py │ ├── migrations │ │ ├── 0001_initial.py │ │ └── __init__.py │ ├── models.py │ ├── notification.py │ ├── permission.py │ ├── postman_collection │ │ ├── __init__.py │ │ ├── constants.py │ │ └── dto.py │ ├── serializers.py │ ├── urls.py │ └── utils.py ├── backend │ ├── __init__.py │ ├── asgi.py │ ├── base_urls.py │ ├── celery_config.py │ ├── celery_service.py │ ├── celery_task.py │ ├── constants.py │ ├── custom_db │ │ ├── __init__.py │ │ └── base.py │ ├── exceptions.py │ ├── flowerconfig.py │ ├── public_urls.py │ ├── public_urls_v2.py │ ├── serializers.py │ ├── settings │ │ ├── __init__.py │ │ ├── base.py │ │ ├── dev.py │ │ └── test.py │ ├── static │ │ └── logo.svg │ ├── urls.py │ ├── urls_v2.py │ ├── workers │ │ ├── __init__.py │ │ ├── constants.py │ │ └── file_processing │ │ │ ├── __init__.py │ │ │ ├── celery_config.py │ │ │ ├── constants.py │ │ │ └── file_processing.py │ └── wsgi.py ├── commands │ ├── __init__.py │ └── management │ │ └── commands │ │ ├── __init__.py │ │ ├── create_schema.py │ │ └── drop_schema.py ├── connector_auth_v2 │ ├── __init__.py │ ├── admin.py │ ├── apps.py │ ├── constants.py │ ├── exceptions.py │ ├── migrations │ │ ├── 0001_initial.py │ │ └── __init__.py │ ├── models.py │ ├── pipeline │ │ ├── common.py │ │ └── google.py │ ├── urls.py │ └── views.py ├── connector_processor │ ├── __init__.py │ ├── connector_processor.py │ ├── constants.py │ ├── exceptions.py │ ├── serializers.py │ ├── urls.py │ └── views.py ├── connector_v2 │ ├── __init__.py │ ├── admin.py │ ├── apps.py │ ├── connector_instance_helper.py │ ├── constants.py │ ├── fields.py │ ├── migrations │ │ ├── 0001_initial.py │ │ └── __init__.py │ ├── models.py │ ├── serializers.py │ ├── tests │ │ ├── conftest.py │ │ ├── connector_tests.py │ │ └── fixtures │ │ │ └── fixtures_0001.json │ ├── unstract_account.py │ ├── urls.py │ └── views.py ├── docs │ ├── __init__.py │ └── urls.py ├── entrypoint.sh ├── feature_flag │ ├── __init__.py │ ├── admin.py │ ├── apps.py │ ├── helper.py │ ├── migrations │ │ └── __init__.py │ ├── models.py │ ├── urls.py │ └── views.py ├── file_management │ ├── __init__.py │ ├── admin.py │ ├── api_doc.md │ ├── apps.py │ ├── constants.py │ ├── exceptions.py │ ├── file_management_dto.py │ ├── file_management_helper.py │ ├── migrations │ │ └── __init__.py │ ├── models.py │ ├── serializer.py │ ├── tests.py │ ├── urls.py │ └── views.py ├── health │ ├── __init__.py │ ├── apps.py │ ├── urls.py │ └── views.py ├── logs_helper │ ├── __init__.py │ ├── apps.py │ ├── constants.py │ ├── log_service.py │ ├── serializers.py │ ├── urls.py │ └── views.py ├── manage.py ├── middleware │ ├── __init__.py │ ├── cache_control.py │ ├── exception.py │ ├── organization_middleware.py │ ├── remove_allow_header.py │ └── request_id.py ├── migrating │ └── v2 │ │ ├── README.md │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── apps.py │ │ ├── constants.py │ │ ├── management │ │ ├── __init__.py │ │ └── commands │ │ │ ├── __init__.py │ │ │ └── migrate_to_v2.py │ │ ├── migrate-to-v2.sh │ │ ├── migrations │ │ └── __init__.py │ │ ├── query.py │ │ └── unstract_migrations.py ├── notification_v2 │ ├── __init__.py │ ├── apps.py │ ├── constants.py │ ├── enums.py │ ├── helper.py │ ├── migrations │ │ ├── 0001_initial.py │ │ └── __init__.py │ ├── models.py │ ├── provider │ │ ├── __init__.py │ │ ├── notification_provider.py │ │ ├── registry.py │ │ └── webhook │ │ │ ├── __init__.py │ │ │ ├── api_webhook.py │ │ │ ├── slack_webhook.py │ │ │ └── webhook.py │ ├── serializers.py │ ├── urls.py │ └── views.py ├── permissions │ ├── __init__.py │ └── permission.py ├── pipeline_v2 │ ├── __init__.py │ ├── apps.py │ ├── constants.py │ ├── deployment_helper.py │ ├── dto.py │ ├── exceptions.py │ ├── execution_view.py │ ├── manager.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0002_remove_pipeline_unique_pipeline_and_more.py │ │ └── __init__.py │ ├── models.py │ ├── notification.py │ ├── piepline_api_execution_views.py │ ├── pipeline_processor.py │ ├── public_api_urls.py │ ├── serializers │ │ ├── crud.py │ │ ├── execute.py │ │ └── update.py │ ├── urls.py │ └── views.py ├── platform_settings_v2 │ ├── __init__.py │ ├── admin.py │ ├── apps.py │ ├── constants.py │ ├── exceptions.py │ ├── models.py │ ├── platform_auth_helper.py │ ├── platform_auth_service.py │ ├── serializers.py │ ├── tests.py │ ├── urls.py │ └── views.py ├── plugins │ ├── .gitignore │ ├── README.md │ ├── __init__.py │ ├── api │ │ └── dto │ │ │ └── __init__.py │ ├── authentication │ │ └── auth_sample │ │ │ ├── __init__.py │ │ │ ├── auth_helper.py │ │ │ ├── auth_service.py │ │ │ ├── dto.py │ │ │ ├── enums.py │ │ │ └── exceptions.py │ ├── processor │ │ └── .gitkeep │ └── workflow_manager │ │ └── workflow_v2 │ │ └── utils.py ├── project │ ├── __init__.py │ ├── admin.py │ ├── apps.py │ ├── constants.py │ ├── exceptions.py │ ├── migrations │ │ ├── 0001_initial.py │ │ └── __init__.py │ ├── models.py │ ├── serializers.py │ ├── tests │ │ ├── conftest.py │ │ ├── fixtures │ │ │ └── fixtures_0001.json │ │ └── project_tests.py │ ├── urls.py │ └── views.py ├── prompt │ ├── __init__.py │ ├── admin.py │ ├── apps.py │ ├── constants.py │ ├── migrations │ │ ├── 0001_initial.py │ │ └── __init__.py │ ├── models.py │ ├── serializers.py │ ├── tests │ │ ├── conftest.py │ │ ├── fixtures │ │ │ └── prompts_001.json │ │ └── test_urls.py │ ├── urls.py │ └── views.py ├── prompt_studio │ ├── __init__.py │ ├── modifier_loader.py │ ├── permission.py │ ├── processor_loader.py │ ├── prompt_profile_manager_v2 │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── apps.py │ │ ├── constants.py │ │ ├── exceptions.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── profile_manager_helper.py │ │ ├── serializers.py │ │ ├── urls.py │ │ └── views.py │ ├── prompt_studio_core_v2 │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── apps.py │ │ ├── constants.py │ │ ├── document_indexing_service.py │ │ ├── exceptions.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── prompt_ide_base_tool.py │ │ ├── prompt_studio_helper.py │ │ ├── prompt_variable_service.py │ │ ├── serializers.py │ │ ├── static │ │ │ └── select_choices.json │ │ ├── urls.py │ │ └── views.py │ ├── prompt_studio_document_manager_v2 │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── apps.py │ │ ├── constants.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── prompt_studio_document_helper.py │ │ ├── serializers.py │ │ ├── urls.py │ │ └── views.py │ ├── prompt_studio_index_manager_v2 │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── apps.py │ │ ├── constants.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_indexmanager_extraction_status.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── prompt_studio_index_helper.py │ │ ├── serializers.py │ │ ├── urls.py │ │ └── views.py │ ├── prompt_studio_output_manager_v2 │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── apps.py │ │ ├── constants.py │ │ ├── exceptions.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_promptstudiooutputmanager_highlight_data.py │ │ │ ├── 0003_promptstudiooutputmanager_confidence_data.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── output_manager_helper.py │ │ ├── output_manager_util.py │ │ ├── serializers.py │ │ ├── urls.py │ │ └── views.py │ ├── prompt_studio_registry_v2 │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── apps.py │ │ ├── constants.py │ │ ├── exceptions.py │ │ ├── fields.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── prompt_studio_registry_helper.py │ │ ├── serializers.py │ │ ├── urls.py │ │ └── views.py │ └── prompt_studio_v2 │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── apps.py │ │ ├── constants.py │ │ ├── controller.py │ │ ├── exceptions.py │ │ ├── helper.py │ │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0002_alter_toolstudioprompt_enforce_type.py │ │ ├── 0003_toolstudioprompt_required.py │ │ ├── 0004_alter_toolstudioprompt_required.py │ │ ├── 0005_alter_toolstudioprompt_required.py │ │ ├── 0006_alter_toolstudioprompt_enforce_type.py │ │ ├── 0007_merge_table_record_cell_types.py │ │ ├── 0008_alter_toolstudioprompt_enforce_type.py │ │ ├── 0009_alter_toolstudioprompt_enforce_type.py │ │ ├── 0010_update_enforce_type_text.py │ │ ├── 0011_revert_cell_type_merge.py │ │ ├── 0012_alter_toolstudioprompt_enforce_type.py │ │ └── __init__.py │ │ ├── models.py │ │ ├── serializers.py │ │ ├── urls.py │ │ └── views.py ├── pyproject.toml ├── sample.env ├── sample.test.env ├── scheduler │ ├── __init__.py │ ├── admin.py │ ├── apps.py │ ├── constants.py │ ├── exceptions.py │ ├── helper.py │ ├── serializer.py │ ├── settings.py │ └── tasks.py ├── tags │ ├── __init__.py │ ├── apps.py │ ├── helper.py │ ├── migrations │ │ ├── 0001_initial.py │ │ └── __init__.py │ ├── models.py │ ├── serializers.py │ ├── urls.py │ └── views.py ├── tenant_account_v2 │ ├── __init__.py │ ├── admin.py │ ├── apps.py │ ├── constants.py │ ├── dto.py │ ├── enums.py │ ├── invitation_urls.py │ ├── invitation_views.py │ ├── migrations │ │ ├── 0001_initial.py │ │ └── __init__.py │ ├── models.py │ ├── organization_member_service.py │ ├── serializer.py │ ├── tests.py │ ├── urls.py │ ├── users_urls.py │ ├── users_view.py │ └── views.py ├── tool_instance_v2 │ ├── __init__.py │ ├── admin.py │ ├── apps.py │ ├── constants.py │ ├── exceptions.py │ ├── migrations │ │ ├── 0001_initial.py │ │ └── __init__.py │ ├── models.py │ ├── serializers.py │ ├── tool_instance_helper.py │ ├── tool_processor.py │ ├── urls.py │ └── views.py ├── usage_v2 │ ├── __init__.py │ ├── admin.py │ ├── apps.py │ ├── constants.py │ ├── filter.py │ ├── helper.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0002_alter_usage_run_id.py │ │ ├── 0003_usage_usage_executi_4deb35_idx.py │ │ └── __init__.py │ ├── models.py │ ├── serializers.py │ ├── urls.py │ └── views.py ├── utils │ ├── FileValidator.py │ ├── __init__.py │ ├── cache_service.py │ ├── common_utils.py │ ├── constants.py │ ├── date │ │ ├── __init__.py │ │ ├── constants.py │ │ ├── enums.py │ │ ├── exceptions.py │ │ ├── processor.py │ │ └── serializer.py │ ├── dto.py │ ├── enums.py │ ├── exceptions.py │ ├── file_storage │ │ ├── constants.py │ │ └── helpers │ │ │ └── prompt_studio_file_helper.py │ ├── filtering.py │ ├── local_context.py │ ├── log_events.py │ ├── models │ │ ├── base_model.py │ │ └── organization_mixin.py │ ├── notification │ │ └── __init__.py │ ├── pagination.py │ ├── redis_cache.py │ ├── request │ │ ├── __init__.py │ │ ├── constants.py │ │ └── request.py │ ├── seed_data │ │ ├── README.md │ │ └── seed_data.py │ ├── serializer │ │ └── integrity_error_mixin.py │ ├── serializer_utils.py │ ├── user_context.py │ └── user_session.py ├── uv.lock └── workflow_manager │ ├── __init__.py │ ├── endpoint_v2 │ ├── __init__ .py │ ├── apps.py │ ├── base_connector.py │ ├── constants.py │ ├── database_utils.py │ ├── destination.py │ ├── dto.py │ ├── endpoint_utils.py │ ├── exceptions.py │ ├── migrations │ │ ├── 0001_initial.py │ │ └── __init__.py │ ├── models.py │ ├── queue_utils.py │ ├── result_cache_utils.py │ ├── serializers.py │ ├── source.py │ ├── static │ │ ├── dest │ │ │ ├── db.json │ │ │ └── file.json │ │ └── src │ │ │ ├── api.json │ │ │ └── file.json │ ├── tests │ │ ├── __init__.py │ │ └── test_database_utils │ │ │ ├── __init__.py │ │ │ ├── base_test_db.py │ │ │ ├── static │ │ │ └── large_doc.txt │ │ │ ├── test_create_table_if_not_exists.py │ │ │ └── test_execute_write_query.py │ ├── urls.py │ └── views.py │ ├── execution │ ├── __init__.py │ ├── apps.py │ ├── dto.py │ ├── enum.py │ ├── execution_cache_utils.py │ ├── filter.py │ ├── serializer │ │ ├── __init__.py │ │ └── execution.py │ ├── urls.py │ └── views │ │ ├── __init__.py │ │ └── execution.py │ ├── file_execution │ ├── __init__.py │ ├── apps.py │ ├── filter.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0002_rename_status_and_update_exec_time.py │ │ ├── 0003_alter_workflowfileexecution_status_and_more.py │ │ ├── 0004_alter_workflowfileexecution_status.py │ │ ├── 0005_workflowfileexecution_fs_metadata_and_more.py │ │ └── __init__.py │ ├── models.py │ ├── serializers.py │ ├── urls.py │ └── views.py │ ├── urls.py │ ├── utils │ ├── __init__.py │ ├── pipeline_utils.py │ └── workflow_log.py │ └── workflow_v2 │ ├── __init__.py │ ├── admin.py │ ├── apps.py │ ├── constants.py │ ├── dto.py │ ├── enums.py │ ├── exceptions.py │ ├── execution.py │ ├── execution_log_utils.py │ ├── execution_log_view.py │ ├── execution_view.py │ ├── file_execution_tasks.py │ ├── file_history_helper.py │ ├── filters │ ├── __init__.py │ └── execution_log.py │ ├── migrations │ ├── 0001_initial.py │ ├── 0002_remove_workflow_llm_response_and_more.py │ ├── 0003_workflowexecution_result_acknowledged.py │ ├── 0004_executionlog_file_execution.py │ ├── 0005_workflowexecution_tags.py │ ├── 0006_workflowexecution_workflow_ex_workflo_5942c9_idx_and_more.py │ ├── 0007_update_execution_time.py │ ├── 0008_workflowexecution_total_files_and_more.py │ ├── 0009_update_total_files.py │ ├── 0010_executionlog_wf_execution_and_more.py │ ├── 0011_remove_filehistory_unique_workflow_cachekey_and_more.py │ ├── 0012_remove_wf_exec_with_invalid_wf_references.py │ ├── 0013_remove_workflowexecution_workflow_id_and_more.py │ └── __init__.py │ ├── models │ ├── __init__.py │ ├── execution.py │ ├── execution_log.py │ ├── file_history.py │ └── workflow.py │ ├── serializers.py │ ├── urls │ ├── __init__.py │ └── workflow.py │ ├── views.py │ └── workflow_helper.py ├── dev-env-cli.sh ├── docker ├── README.md ├── connector │ ├── README.md │ ├── docker-compose-connector.yaml │ └── sample.env ├── docker-compose-dev-essentials.yaml ├── docker-compose.build.yaml ├── docker-compose.yaml ├── dockerfiles │ ├── backend.Dockerfile │ ├── backend.Dockerfile.dockerignore │ ├── frontend.Dockerfile │ ├── frontend.Dockerfile.dockerignore │ ├── platform.Dockerfile │ ├── platform.Dockerfile.dockerignore │ ├── prompt.Dockerfile │ ├── prompt.Dockerfile.dockerignore │ ├── runner.Dockerfile │ ├── runner.Dockerfile.dockerignore │ ├── tool-sidecar.Dockerfile │ ├── tool-sidecar.Dockerfile.dockerignore │ ├── x2text.Dockerfile │ └── x2text.Dockerfile.dockerignore ├── sample.compose.override.yaml ├── sample.env ├── sample.essentials.env ├── sample.proxy_overrides.yaml └── scripts │ ├── check_container_exited.sh │ ├── check_django_migrations.sh │ ├── db-setup │ ├── README.md │ └── db_setup.sh │ ├── merge_env.py │ ├── release-notes │ ├── README.md │ ├── print_release_notes.py │ └── release_notes.json │ ├── resolve_container_svc_from_host.sh │ └── uv-lock-gen │ ├── README.md │ └── uv-lock.sh ├── docs └── assets │ ├── 3rd_party │ ├── amazon_redshift.png │ ├── anthropic.png │ ├── anyscale.png │ ├── azure_openai.png │ ├── bedrock.png │ ├── box.png │ ├── cohere.png │ ├── dropbox.png │ ├── gcp.png │ ├── google.png │ ├── google_bigquery.png │ ├── google_drive.png │ ├── http.png │ ├── huggingface.png │ ├── llamaindex.png │ ├── llm_whisperer.png │ ├── mariadb.png │ ├── milvus.png │ ├── minio.png │ ├── mistral_ai.png │ ├── ms_sql.png │ ├── mysql.png │ ├── ollama.png │ ├── openai.png │ ├── oracle.png │ ├── palm.png │ ├── pinecone.png │ ├── postgres.png │ ├── qdrant.png │ ├── replicate.png │ ├── s3.png │ ├── sftp.png │ ├── snowflake.png │ ├── supabase.png │ ├── unstructured_io.png │ ├── vertex_ai.png │ └── weaviate.png │ ├── Using_Unstract.png │ ├── prompt_studio.png │ └── unstract_u_logo.png ├── frontend ├── .eslintrc.json ├── .gitignore ├── README.md ├── default.conf ├── generate-runtime-config.sh ├── nginx.conf ├── package-lock.json ├── package.json ├── public │ ├── favicon.ico │ ├── icons │ │ ├── adapter-icons │ │ │ ├── Anthropic.png │ │ │ ├── AzureopenAI.png │ │ │ ├── Bedrock.png │ │ │ ├── GoogleDocumentAI.png │ │ │ ├── LLMWhisperer.png │ │ │ ├── LLMWhispererV2.png │ │ │ ├── Milvus.png │ │ │ ├── Mistral AI.png │ │ │ ├── OpenAI.png │ │ │ ├── PaLM.png │ │ │ ├── Replicate.png │ │ │ ├── UnstructuredIO.png │ │ │ ├── VertexAI.png │ │ │ ├── Weaviate.png │ │ │ ├── anyscale.png │ │ │ ├── huggingface.png │ │ │ ├── llama-parse.png │ │ │ ├── noOpEmbedding.png │ │ │ ├── noOpLlm.png │ │ │ ├── noOpVectorDb.png │ │ │ ├── noOpx2Text.png │ │ │ ├── ollama.png │ │ │ ├── pinecone.png │ │ │ ├── postgres.png │ │ │ ├── qdrant.png │ │ │ └── supabase.png │ │ └── connector-icons │ │ │ ├── Bigquery.png │ │ │ ├── Box.png │ │ │ ├── Dropbox.png │ │ │ ├── Google Drive.png │ │ │ ├── HTTP.svg │ │ │ ├── MSSQL.png │ │ │ ├── MariaDB.png │ │ │ ├── MySql.png │ │ │ ├── Oracle.png │ │ │ ├── Postgresql.png │ │ │ ├── Redis.png │ │ │ ├── Redshift.png │ │ │ ├── S3.png │ │ │ ├── SFTP.png │ │ │ ├── Snowflake.png │ │ │ ├── Unstract Storage.png │ │ │ ├── azure_blob_storage.png │ │ │ ├── google_bigquery-icon.svg │ │ │ └── google_cloud_storage.png │ ├── index.html │ └── manifest.json ├── sample.env └── src │ ├── App.jsx │ ├── PostHogPageviewTracker.js │ ├── assets │ ├── BingAds.svg │ ├── Unstract.svg │ ├── UnstractLogoBlack.svg │ ├── Workflows.svg │ ├── api-deployments.svg │ ├── appdev.svg │ ├── assertion.svg │ ├── combined-output.svg │ ├── coming-soon.png │ ├── connect_embedding.svg │ ├── connect_llm.svg │ ├── connect_vector_db.svg │ ├── connect_x2text.svg │ ├── custom-tools-icon.svg │ ├── desktop.svg │ ├── document.svg │ ├── embedding.svg │ ├── empty.svg │ ├── etl.svg │ ├── export-tool.svg │ ├── folder.svg │ ├── frictionlessOnboarding │ │ ├── AvailableToAssist.svg │ │ ├── PromptEnvironment.svg │ │ ├── PromptLaunch.svg │ │ ├── StartfreeCredits.svg │ │ └── WelcomePlatform.svg │ ├── index.js │ ├── input-placeholder.svg │ ├── landing_bg.png │ ├── landing_bg.svg │ ├── learn-more.svg │ ├── list-of-tools-placeholder.svg │ ├── list-of-wf-steps-placeholder.svg │ ├── llm.svg │ ├── login-onboard-message.svg │ ├── login-page-bg.svg │ ├── login-right-panel.svg │ ├── loginPageSS.webp │ ├── login_page_right_banner.svg │ ├── logo-24.svg │ ├── logo-64.svg │ ├── moon-icon.svg │ ├── ocr.svg │ ├── org-selection-avatar.svg │ ├── org-selection.svg │ ├── output-placeholder.svg │ ├── placeholder.svg │ ├── platform-settings.svg │ ├── promptStudioOnboarding │ │ ├── Background 2.svg │ │ ├── LeftBanner.png │ │ ├── PromptCoverage.svg │ │ ├── PromptLLM.svg │ │ ├── SaveCosts.svg │ │ └── WelcomePrompt.svg │ ├── reach-out.svg │ ├── red-grad-circle.svg │ ├── require-demo.svg │ ├── square-bg.svg │ ├── steps.svg │ ├── sun-icon.svg │ ├── swatch.svg │ ├── task.svg │ ├── terminal.svg │ ├── text-extractor.svg │ ├── tool-ide-input-document-placeholder.svg │ ├── tool-ide-prompts-placeholder.svg │ ├── tool.svg │ ├── trial-doc.svg │ ├── vector-db.svg │ └── yellow-grad-circle.svg │ ├── components │ ├── agency │ │ ├── actions │ │ │ ├── Actions.css │ │ │ └── Actions.jsx │ │ ├── agency │ │ │ ├── Agency.css │ │ │ └── Agency.jsx │ │ ├── cards-list │ │ │ ├── CardList.css │ │ │ └── CardsList.jsx │ │ ├── configure-connector-modal │ │ │ ├── ConfigureConnectorModal.css │ │ │ └── ConfigureConnectorModal.jsx │ │ ├── configure-forms-layout │ │ │ └── ConfigureFormsLayout.jsx │ │ ├── display-logs │ │ │ ├── DisplayLogs.css │ │ │ └── DisplayLogs.jsx │ │ ├── ds-settings-card │ │ │ ├── DsSettingsCard.css │ │ │ └── DsSettingsCard.jsx │ │ ├── file-upload │ │ │ └── FileUpload.jsx │ │ ├── input-output │ │ │ ├── InputOutput.css │ │ │ └── InputOutput.jsx │ │ ├── list-of-connectors │ │ │ ├── ListOfConnectors.css │ │ │ └── ListOfConnectors.jsx │ │ ├── list-of-tools │ │ │ ├── ListOfTools.css │ │ │ └── ListOfTools.jsx │ │ ├── logs-label │ │ │ ├── LogsLabel.css │ │ │ └── LogsLabel.jsx │ │ ├── markdown-renderer │ │ │ ├── MarkdownRenderer.css │ │ │ └── MarkdownRenderer.jsx │ │ ├── prompt │ │ │ ├── Prompt.css │ │ │ └── Prompt.jsx │ │ ├── settings-form │ │ │ └── SettingsForm.jsx │ │ ├── side-panel │ │ │ ├── SidePanel.css │ │ │ └── SidePanel.jsx │ │ ├── step-card │ │ │ ├── StepCard.css │ │ │ └── StepCard.jsx │ │ ├── steps │ │ │ ├── Steps.css │ │ │ └── Steps.jsx │ │ ├── tool-icon │ │ │ ├── ToolIcon.css │ │ │ └── ToolIcon.jsx │ │ ├── tool-info-card │ │ │ ├── ToolInfoCard.css │ │ │ └── ToolInfoCard.jsx │ │ ├── tool-settings │ │ │ ├── ToolSettings.css │ │ │ └── ToolSettings.jsx │ │ ├── tools │ │ │ ├── Tools.css │ │ │ └── Tools.jsx │ │ ├── workflow-execution-layout │ │ │ ├── WorkflowExecutionMain.css │ │ │ └── WorkflowExecutionMain.jsx │ │ └── workflow-execution │ │ │ ├── WorkflowExecution.css │ │ │ ├── WorkflowExecution.jsx │ │ │ └── workflow_actions.js │ ├── api │ │ └── prompt-studio-service.js │ ├── common │ │ ├── PromptStudioModal.css │ │ └── PromptStudioModal.jsx │ ├── cron-generator │ │ └── CronGenerator.jsx │ ├── custom-tools │ │ ├── add-custom-tool-form-modal │ │ │ ├── AddCustomToolFormModal.css │ │ │ └── AddCustomToolFormModal.jsx │ │ ├── add-llm-profile │ │ │ ├── AddLlmProfile.css │ │ │ └── AddLlmProfile.jsx │ │ ├── combined-output │ │ │ ├── CombinedOutput.css │ │ │ ├── CombinedOutput.jsx │ │ │ ├── JsonView.jsx │ │ │ └── JsonViewBody.jsx │ │ ├── custom-synonyms │ │ │ ├── CustomSynonyms.css │ │ │ └── CustomSynonyms.jsx │ │ ├── display-logs │ │ │ └── DisplayLogs.jsx │ │ ├── document-manager │ │ │ ├── DocumentManager.css │ │ │ └── DocumentManager.jsx │ │ ├── document-parser │ │ │ ├── DocumentParser.css │ │ │ └── DocumentParser.jsx │ │ ├── document-viewer │ │ │ └── DocumentViewer.jsx │ │ ├── edit-tool-info │ │ │ ├── EditToolInfo.css │ │ │ └── EditToolInfo.jsx │ │ ├── editable-text │ │ │ ├── EditableText.css │ │ │ └── EditableText.jsx │ │ ├── export-tool │ │ │ ├── ExportTool.css │ │ │ └── ExportTool.jsx │ │ ├── footer-layout │ │ │ ├── FooterLayout.css │ │ │ └── FooterLayout.jsx │ │ ├── footer │ │ │ ├── Footer.css │ │ │ └── Footer.jsx │ │ ├── generate-index │ │ │ ├── GenerateIndex.css │ │ │ └── GenerateIndex.jsx │ │ ├── header-title │ │ │ ├── HeaderTitle.css │ │ │ └── HeaderTitle.jsx │ │ ├── header │ │ │ ├── Header.css │ │ │ └── Header.jsx │ │ ├── list-of-tools │ │ │ ├── ListOfTools.css │ │ │ └── ListOfTools.jsx │ │ ├── logs-label │ │ │ └── LogsLabel.jsx │ │ ├── manage-docs-modal │ │ │ ├── ManageDocsModal.css │ │ │ └── ManageDocsModal.jsx │ │ ├── manage-llm-profiles-modal │ │ │ └── ManageLlmProfilesModal.jsx │ │ ├── manage-llm-profiles │ │ │ ├── ManageLlmProfiles.css │ │ │ └── ManageLlmProfiles.jsx │ │ ├── notes-card │ │ │ ├── NotesCard.css │ │ │ └── NotesCard.jsx │ │ ├── output-analyzer │ │ │ ├── FilterPromptFields.jsx │ │ │ ├── OutputAnalyzer.css │ │ │ ├── OutputAnalyzer.jsx │ │ │ ├── OutputAnalyzerCard.jsx │ │ │ └── OutputAnalyzerHeader.jsx │ │ ├── output-for-doc-modal │ │ │ ├── OutputForDocModal.css │ │ │ └── OutputForDocModal.jsx │ │ ├── pdf-viewer │ │ │ ├── Highlight.css │ │ │ └── PdfViewer.jsx │ │ ├── pre-and-post-amble-modal │ │ │ ├── DefaultPrompts.json │ │ │ ├── PreAndPostAmbleModal.css │ │ │ └── PreAndPostAmbleModal.jsx │ │ ├── profile-info-bar │ │ │ ├── ProfileInfoBar.css │ │ │ └── ProfileInfoBar.jsx │ │ ├── prompt-card │ │ │ ├── CopyPromptOutputBtn.jsx │ │ │ ├── DisplayPromptResult.jsx │ │ │ ├── ExpandCardBtn.jsx │ │ │ ├── Header.jsx │ │ │ ├── OutputForIndex.jsx │ │ │ ├── PromptCard.css │ │ │ ├── PromptCard.jsx │ │ │ ├── PromptCardItems.jsx │ │ │ ├── PromptCardWrapper.jsx │ │ │ ├── PromptOutput.jsx │ │ │ ├── PromptOutputActions.jsx │ │ │ ├── PromptOutputExpandBtn.jsx │ │ │ ├── PromptOutputsModal.jsx │ │ │ ├── PromptRun.jsx │ │ │ ├── PromptRunCost.jsx │ │ │ ├── PromptRunTimer.jsx │ │ │ ├── RunAllPrompts.jsx │ │ │ └── constants.js │ │ ├── prompts-reorder │ │ │ ├── DraggablePrompt.jsx │ │ │ ├── PromptsReorder.css │ │ │ ├── PromptsReorder.jsx │ │ │ ├── PromptsReorderModal.jsx │ │ │ └── PromptsReorderTitle.jsx │ │ ├── settings-modal │ │ │ ├── SettingsModal.css │ │ │ └── SettingsModal.jsx │ │ ├── text-viewer-pre │ │ │ └── TextViewerPre.jsx │ │ ├── text-viewer │ │ │ └── TextViewer.jsx │ │ ├── token-usage │ │ │ └── TokenUsage.jsx │ │ ├── tool-ide │ │ │ ├── ToolIde.css │ │ │ └── ToolIde.jsx │ │ ├── tools-main │ │ │ ├── ToolsMain.css │ │ │ ├── ToolsMain.jsx │ │ │ └── ToolsMainActionBtns.jsx │ │ └── view-tools │ │ │ ├── ViewTools.css │ │ │ └── ViewTools.jsx │ ├── deployments │ │ ├── api-deployment │ │ │ ├── ApiDeployment.jsx │ │ │ └── api-deployments-service.js │ │ ├── body │ │ │ └── Body.jsx │ │ ├── create-api-deployment-modal │ │ │ └── CreateApiDeploymentModal.jsx │ │ ├── delete-modal │ │ │ └── DeleteModal.jsx │ │ ├── display-code │ │ │ ├── CodeSnippet.css │ │ │ ├── CodeSnippet.jsx │ │ │ ├── DisplayCode.css │ │ │ └── DisplayCode.jsx │ │ ├── header │ │ │ └── Header.jsx │ │ ├── layout │ │ │ ├── Layout.css │ │ │ └── Layout.jsx │ │ └── manage-keys │ │ │ ├── ManageKeys.css │ │ │ └── ManageKeys.jsx │ ├── error │ │ ├── GenericError │ │ │ └── GenericError.jsx │ │ ├── NotFound │ │ │ ├── NotFound.css │ │ │ └── NotFound.jsx │ │ └── UnAuthorized │ │ │ ├── Unauthorized.css │ │ │ └── Unauthorized.jsx │ ├── generic-loader │ │ ├── GenericLoader.css │ │ └── GenericLoader.jsx │ ├── helpers │ │ ├── auth │ │ │ ├── PersistentLogin.js │ │ │ ├── RequireAdmin.js │ │ │ ├── RequireAuth.js │ │ │ └── RequireGuest.js │ │ ├── custom-markdown │ │ │ └── CustomMarkdown.jsx │ │ ├── custom-tools │ │ │ └── CustomToolsHelper.js │ │ ├── project │ │ │ └── ProjectHelper.js │ │ └── socket-messages │ │ │ └── SocketMessages.js │ ├── input-output │ │ ├── add-source-modal │ │ │ ├── AddSourceModa.css │ │ │ └── AddSourceModal.jsx │ │ ├── add-source │ │ │ ├── AddSource.css │ │ │ └── AddSource.jsx │ │ ├── configure-ds │ │ │ ├── ConfigureDs.css │ │ │ └── ConfigureDs.jsx │ │ ├── data-source-card │ │ │ ├── DataSourceCard.css │ │ │ └── DataSourceCard.jsx │ │ ├── edit-ds-modal │ │ │ ├── EditDsModal.css │ │ │ └── EditDsModal.jsx │ │ ├── file-system │ │ │ ├── FileSystem.css │ │ │ └── FileSystem.jsx │ │ ├── input-output │ │ │ ├── InputOutput.css │ │ │ ├── InputOutput.jsx │ │ │ └── input-service.js │ │ ├── list-of-sources │ │ │ ├── ListOfSources.css │ │ │ └── ListOfSources.jsx │ │ ├── manage-files │ │ │ ├── ManageFiles.css │ │ │ └── ManageFiles.jsx │ │ └── sidebar │ │ │ ├── Sidebar.css │ │ │ └── Sidebar.jsx │ ├── log-in │ │ ├── Login.css │ │ ├── Login.jsx │ │ └── ProductContentLayout.jsx │ ├── logging │ │ ├── detailed-logs │ │ │ ├── DetailedLogs.css │ │ │ └── DetailedLogs.jsx │ │ ├── execution-logs │ │ │ ├── ExecutionLogs.css │ │ │ └── ExecutionLogs.jsx │ │ ├── filter-dropdown │ │ │ └── FilterDropdown.jsx │ │ ├── log-modal │ │ │ ├── LogModal.css │ │ │ └── LogModal.jsx │ │ └── logs-table │ │ │ ├── LogsTable.css │ │ │ └── LogsTable.jsx │ ├── logs-and-notifications │ │ ├── DisplayLogsAndNotifications.css │ │ ├── DisplayLogsAndNotifications.jsx │ │ ├── LogsAndNotificationsTable.jsx │ │ └── LogsHeader.jsx │ ├── navigations │ │ ├── side-nav-bar │ │ │ ├── SideNavBar.css │ │ │ └── SideNavBar.jsx │ │ ├── tool-nav-bar │ │ │ ├── ToolNavBar.css │ │ │ └── ToolNavBar.jsx │ │ └── top-nav-bar │ │ │ ├── TopNavBar.css │ │ │ └── TopNavBar.jsx │ ├── oauth-ds │ │ ├── google │ │ │ ├── GoogleOAuthButton.css │ │ │ └── GoogleOAuthButton.jsx │ │ ├── oauth-ds │ │ │ └── OAuthDs.jsx │ │ └── oauth-status │ │ │ ├── OAuthStatus.css │ │ │ └── OAuthStatus.jsx │ ├── onboard │ │ ├── OnBoard.jsx │ │ └── onBoard.css │ ├── pipelines-or-deployments │ │ ├── delete-modal │ │ │ └── DeleteModal.jsx │ │ ├── etl-task-deploy │ │ │ ├── EtlTaskDeploy.css │ │ │ └── EtlTaskDeploy.jsx │ │ ├── log-modal │ │ │ ├── LogsModal.jsx │ │ │ ├── LogsModel.css │ │ │ └── fetchExecutionLogs.js │ │ ├── notification-modal │ │ │ ├── CreateNotification.jsx │ │ │ ├── DisplayNotifications.jsx │ │ │ └── NotificationModal.jsx │ │ ├── pipeline-service.js │ │ └── pipelines │ │ │ ├── Pipelines.css │ │ │ └── Pipelines.jsx │ ├── profile │ │ ├── Profile.css │ │ └── Profile.jsx │ ├── rjsf-custom-widgets │ │ ├── alt-date-time-widget │ │ │ └── AltDateTimeWidget.jsx │ │ ├── alt-date-widget │ │ │ └── AltDateWidget.jsx │ │ ├── array-field │ │ │ ├── ArrayField.css │ │ │ └── ArrayField.jsx │ │ ├── checkbox-widget │ │ │ ├── CheckboxWidget.css │ │ │ └── CheckboxWidget.jsx │ │ ├── checkboxes-widget │ │ │ └── CheckboxesWidget.jsx │ │ ├── color-widget │ │ │ └── ColorWidget.jsx │ │ ├── date-time-widget │ │ │ └── DateTimeWidget.jsx │ │ ├── date-widget │ │ │ └── DateWidget.jsx │ │ ├── email-widget │ │ │ └── EmailWidget.jsx │ │ ├── file-widget │ │ │ └── FileWidget.jsx │ │ ├── hidden-widget │ │ │ └── HiddenWidget.jsx │ │ ├── password-widget │ │ │ └── PasswordWidget.jsx │ │ ├── select-widget │ │ │ └── SelectWidget.jsx │ │ ├── text-widget │ │ │ └── TextWidget.jsx │ │ ├── time-widget │ │ │ └── TimeWidget.jsx │ │ ├── up-down-widget │ │ │ └── UpDownWidget.jsx │ │ └── url-widget │ │ │ └── URLWidget.jsx │ ├── set-org │ │ ├── SetOrg.css │ │ └── SetOrg.jsx │ ├── settings │ │ ├── default-triad │ │ │ ├── DefaultTriad.css │ │ │ └── DefaultTriad.jsx │ │ ├── invite │ │ │ ├── InviteEditUser.css │ │ │ └── InviteEditUser.jsx │ │ ├── platform │ │ │ ├── PlatformSettings.css │ │ │ └── PlatformSettings.jsx │ │ ├── settings │ │ │ ├── Settings.css │ │ │ └── Settings.jsx │ │ └── users │ │ │ ├── Users.css │ │ │ └── Users.jsx │ ├── tool-settings │ │ ├── list-of-items │ │ │ ├── ListOfItems.css │ │ │ └── ListOfItems.jsx │ │ └── tool-settings │ │ │ ├── ToolSettings.css │ │ │ └── ToolSettings.jsx │ ├── widgets │ │ ├── confirm-modal │ │ │ └── ConfirmModal.jsx │ │ ├── custom-button │ │ │ ├── CustomButton.css │ │ │ └── CustomButton.jsx │ │ ├── empty-state │ │ │ └── EmptyState.jsx │ │ ├── error-boundary │ │ │ └── ErrorBoundary.jsx │ │ ├── grid-view │ │ │ ├── GridView.css │ │ │ └── GridView.jsx │ │ ├── lazy-loader │ │ │ └── LazyLoader.jsx │ │ ├── list-view │ │ │ ├── ListView.css │ │ │ └── ListView.jsx │ │ ├── page-title │ │ │ └── PageTitle.jsx │ │ ├── share-permission │ │ │ ├── SharePermission.css │ │ │ └── SharePermission.jsx │ │ ├── space-wrapper │ │ │ └── SpaceWrapper.jsx │ │ ├── spinner-loader │ │ │ ├── SpinnerLoader.css │ │ │ └── SpinnerLoader.jsx │ │ └── top-bar │ │ │ ├── TopBar.css │ │ │ └── TopBar.jsx │ └── workflows │ │ ├── new-workflow │ │ └── NewWorkflow.jsx │ │ └── workflow │ │ ├── Workflows.css │ │ ├── Workflows.jsx │ │ └── workflow-service.js │ ├── config.js │ ├── helpers │ ├── FeatureFlagsData.js │ ├── GetSessionData.js │ ├── GetStaticData.js │ └── SocketContext.js │ ├── hooks │ ├── useAxiosPrivate.js │ ├── useExceptionHandler.jsx │ ├── useLogout.js │ ├── usePipelineHelper.js │ ├── usePostHogEvents.js │ ├── usePromptOutput.js │ ├── usePromptRun.js │ ├── useRequestUrl.js │ ├── useSessionValid.js │ ├── useUserSession.js │ └── useWindowDimensions.js │ ├── index.css │ ├── index.js │ ├── layouts │ ├── content-center-layout │ │ ├── ContentCenterLayout.css │ │ └── ContentCenterLayout.jsx │ ├── fullpage-payout │ │ ├── FullPageLayout.css │ │ └── FullPageLayout.jsx │ ├── island-layout │ │ ├── IslandLayout.css │ │ └── IslandLayout.jsx │ ├── menu-layout │ │ ├── MenuLayout.css │ │ └── MenuLayout.jsx │ ├── page-layout │ │ ├── PageLayout.css │ │ └── PageLayout.jsx │ ├── rjsf-form-layout │ │ ├── CustomFieldTemplate.jsx │ │ ├── RjsfFormLayout.css │ │ └── RjsfFormLayout.jsx │ └── rjsf-widget-layout │ │ ├── RjsfWidgetLayout.css │ │ └── RjsfWidgetLayout.jsx │ ├── pages │ ├── AgencyPage.jsx │ ├── AppDevelopmentPage.jsx │ ├── CustomTools.jsx │ ├── DeploymentsPage.jsx │ ├── InputOutputPage.jsx │ ├── InviteEditUserPage.jsx │ ├── LandingPage.jsx │ ├── LogsPage.jsx │ ├── OnBoardPage.jsx │ ├── OutputAnalyzerPage.jsx │ ├── ProfilePage.jsx │ ├── SetOrgPage.jsx │ ├── SettingsPage.jsx │ ├── ToolIdePage.jsx │ ├── ToolsSettingsPage.jsx │ ├── UsersPage.jsx │ └── WorkflowsPage.jsx │ ├── routes │ ├── Router.jsx │ └── useMainAppRoutes.js │ ├── setupProxy.js │ ├── setupTests.js │ ├── store │ ├── alert-store.js │ ├── custom-tool-store.js │ ├── prompt-output-store.js │ ├── prompt-run-queue-store.js │ ├── prompt-run-status-store.js │ ├── prompt-studio-store.js │ ├── session-store.js │ ├── socket-custom-tool.js │ ├── socket-logs-store.js │ ├── socket-messages-store.js │ ├── token-usage-store.js │ ├── tool-settings.js │ ├── usage-store.js │ └── workflow-store.js │ └── variables.css ├── platform-service ├── .gitignore ├── .python-version ├── README.md ├── entrypoint.sh ├── pyproject.toml ├── sample.env ├── src │ └── unstract │ │ └── platform_service │ │ ├── __init__.py │ │ ├── config.py │ │ ├── constants.py │ │ ├── controller │ │ ├── __init__.py │ │ ├── health.py │ │ └── platform.py │ │ ├── env.py │ │ ├── extensions.py │ │ ├── helper │ │ ├── adapter_instance.py │ │ ├── cost_calculation.py │ │ └── prompt_studio.py │ │ ├── run.py │ │ └── utils.py ├── tests │ └── test_auth_middleware.py └── uv.lock ├── prompt-service ├── .gitignore ├── .python-version ├── README.md ├── entrypoint.sh ├── pyproject.toml ├── sample.env ├── src │ └── unstract │ │ └── prompt_service │ │ ├── __init__.py │ │ ├── config.py │ │ ├── constants.py │ │ ├── controllers │ │ ├── __init__.py │ │ ├── answer_prompt.py │ │ ├── extraction.py │ │ ├── health.py │ │ └── indexing.py │ │ ├── core │ │ ├── index_v2.py │ │ └── retrievers │ │ │ ├── base_retriever.py │ │ │ ├── simple.py │ │ │ └── subquestion.py │ │ ├── dto.py │ │ ├── exceptions.py │ │ ├── extensions.py │ │ ├── helpers │ │ ├── __init__.py │ │ ├── auth.py │ │ ├── plugin.py │ │ ├── prompt_ide_base_tool.py │ │ ├── retrieval.py │ │ ├── usage.py │ │ └── variable_replacement.py │ │ ├── run.py │ │ ├── services │ │ ├── __init__.py │ │ ├── answer_prompt.py │ │ ├── extraction.py │ │ ├── indexing.py │ │ ├── retrieval.py │ │ └── variable_replacement.py │ │ ├── tests │ │ ├── conftest.py │ │ ├── integration │ │ │ ├── input │ │ │ │ └── sample1.pdf │ │ │ └── test_api_endpoints.py │ │ └── sample.env.test │ │ └── utils │ │ ├── __init__.py │ │ ├── db_utils.py │ │ ├── env_loader.py │ │ ├── file_utils.py │ │ ├── log.py │ │ ├── metrics.py │ │ ├── request.py │ │ └── request_id_filter.py └── uv.lock ├── pyproject.toml ├── run-platform.sh ├── runner ├── .gitignore ├── .python-version ├── README.md ├── entrypoint.sh ├── pyproject.toml ├── sample.env ├── src │ └── unstract │ │ └── runner │ │ ├── __init__.py │ │ ├── clients │ │ ├── __init__.py │ │ ├── docker_client.py │ │ ├── helper.py │ │ ├── interface.py │ │ └── test_docker.py │ │ ├── constants.py │ │ ├── controller │ │ ├── __init__.py │ │ ├── health.py │ │ └── run.py │ │ ├── enum.py │ │ ├── exception.py │ │ ├── runner.py │ │ └── utils.py └── uv.lock ├── tool-sidecar ├── .python-version ├── README.md ├── entrypoint.sh ├── pyproject.toml ├── src │ └── unstract │ │ └── tool_sidecar │ │ ├── __init__.py │ │ ├── constants.py │ │ ├── dto.py │ │ └── log_processor.py └── uv.lock ├── tools ├── README.md ├── classifier │ ├── .dockerignore │ ├── Dockerfile │ ├── README.md │ ├── __init__.py │ ├── requirements.txt │ ├── sample.env │ └── src │ │ ├── config │ │ ├── icon.svg │ │ ├── properties.json │ │ ├── runtime_variables.json │ │ └── spec.json │ │ ├── helper.py │ │ └── main.py ├── structure │ ├── .dockerignore │ ├── .gitignore │ ├── Dockerfile │ ├── README.md │ ├── __init__.py │ ├── requirements.txt │ ├── sample.env │ └── src │ │ ├── config │ │ ├── icon.svg │ │ ├── properties.json │ │ ├── runtime_variables.json │ │ └── spec.json │ │ ├── constants.py │ │ ├── helpers.py │ │ ├── main.py │ │ └── utils.py └── text_extractor │ ├── .dockerignore │ ├── .gitignore │ ├── Dockerfile │ ├── README.md │ ├── __init__.py │ ├── requirements.txt │ ├── sample.env │ ├── src │ ├── config │ │ ├── icon.svg │ │ ├── properties.json │ │ ├── runtime_variables.json │ │ └── spec.json │ ├── example_package │ │ └── __init__.py │ └── main.py │ └── tests │ └── __init__.py ├── tox.ini ├── unstract ├── connectors │ ├── README.md │ ├── docs │ │ └── assets │ │ │ └── unstract_u_logo.png │ ├── pyproject.toml │ ├── src │ │ └── unstract │ │ │ └── connectors │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── connectorkit.py │ │ │ ├── constants.py │ │ │ ├── databases │ │ │ ├── __init__.py │ │ │ ├── bigquery │ │ │ │ ├── __init__.py │ │ │ │ ├── bigquery.py │ │ │ │ └── static │ │ │ │ │ └── json_schema.json │ │ │ ├── exceptions.py │ │ │ ├── exceptions_helper.py │ │ │ ├── mariadb │ │ │ │ ├── __init__.py │ │ │ │ ├── mariadb.py │ │ │ │ └── static │ │ │ │ │ └── json_schema.json │ │ │ ├── mssql │ │ │ │ ├── __init__.py │ │ │ │ ├── mssql.py │ │ │ │ └── static │ │ │ │ │ └── json_schema.json │ │ │ ├── mysql │ │ │ │ ├── __init__.py │ │ │ │ ├── mysql.py │ │ │ │ └── static │ │ │ │ │ └── json_schema.json │ │ │ ├── mysql_handler.py │ │ │ ├── oracle-db │ │ │ │ ├── __init__.py │ │ │ │ ├── oracle_db.py │ │ │ │ └── static │ │ │ │ │ └── json_schema.json │ │ │ ├── postgresql │ │ │ │ ├── __init__.py │ │ │ │ ├── postgresql.py │ │ │ │ └── static │ │ │ │ │ └── json_schema.json │ │ │ ├── psycopg_handler.py │ │ │ ├── redshift │ │ │ │ ├── __init__.py │ │ │ │ ├── redshift.py │ │ │ │ └── static │ │ │ │ │ └── json_schema.json │ │ │ ├── register.py │ │ │ ├── snowflake │ │ │ │ ├── __init__.py │ │ │ │ ├── snowflake.py │ │ │ │ └── static │ │ │ │ │ └── json_schema.json │ │ │ └── unstract_db.py │ │ │ ├── enums.py │ │ │ ├── exceptions.py │ │ │ ├── filesystems │ │ │ ├── __init__.py │ │ │ ├── account_services │ │ │ │ ├── __init__.py │ │ │ │ └── static │ │ │ │ │ └── question_answering │ │ │ │ │ └── apple_10K_2022.pdf │ │ │ ├── azure_cloud_storage │ │ │ │ ├── __init__.py │ │ │ │ ├── azure_cloud_storage.py │ │ │ │ ├── exceptions.py │ │ │ │ └── static │ │ │ │ │ └── json_schema.json │ │ │ ├── box │ │ │ │ ├── __init__.py │ │ │ │ ├── box.py │ │ │ │ └── static │ │ │ │ │ └── json_schema.json │ │ │ ├── google_cloud_storage │ │ │ │ ├── __init__.py │ │ │ │ ├── google_cloud_storage.py │ │ │ │ └── static │ │ │ │ │ └── json_schema.json │ │ │ ├── google_drive │ │ │ │ ├── __init__.py │ │ │ │ ├── constants.py │ │ │ │ ├── google_drive.py │ │ │ │ └── static │ │ │ │ │ ├── json_schema.json │ │ │ │ │ └── settings.yaml │ │ │ ├── http │ │ │ │ ├── __init__.py │ │ │ │ ├── http.py │ │ │ │ └── static │ │ │ │ │ └── json_schema.json │ │ │ ├── local_storage │ │ │ │ ├── local_storage.py │ │ │ │ └── static │ │ │ │ │ └── json_schema.json │ │ │ ├── minio │ │ │ │ ├── __init__.py │ │ │ │ ├── exceptions.py │ │ │ │ ├── minio.py │ │ │ │ └── static │ │ │ │ │ └── json_schema.json │ │ │ ├── register.py │ │ │ ├── sftp │ │ │ │ ├── __init__.py │ │ │ │ ├── sftp.py │ │ │ │ └── static │ │ │ │ │ └── json_schema.json │ │ │ ├── ucs │ │ │ │ ├── __init__.py │ │ │ │ ├── constants.py │ │ │ │ ├── static │ │ │ │ │ └── json_schema.json │ │ │ │ └── ucs.py │ │ │ ├── unstract_file_system.py │ │ │ └── zs_dropbox │ │ │ │ ├── __init__.py │ │ │ │ ├── exceptions.py │ │ │ │ ├── static │ │ │ │ └── json_schema.json │ │ │ │ └── zs_dropbox.py │ │ │ ├── gcs_helper.py │ │ │ └── queues │ │ │ ├── .gitignore │ │ │ ├── __init__.py │ │ │ ├── register.py │ │ │ └── unstract_queue.py │ ├── tests │ │ ├── __init__.py │ │ ├── databases │ │ │ ├── test_bigquery_db.py │ │ │ ├── test_mariadb.py │ │ │ ├── test_mssql_db.py │ │ │ ├── test_mysql_db.py │ │ │ ├── test_postgresql_db.py │ │ │ ├── test_redshift_db.py │ │ │ └── test_snowflake_db.py │ │ ├── filesystems │ │ │ ├── test_box_fs.py │ │ │ ├── test_google_drive_fs.py │ │ │ ├── test_http_fs.py │ │ │ ├── test_miniofs.py │ │ │ ├── test_pcs.py │ │ │ └── test_zs_dropbox_fs.py │ │ └── test_connectorkit.py │ └── uv.lock ├── core │ ├── README.md │ ├── pyproject.toml │ ├── src │ │ └── unstract │ │ │ └── core │ │ │ ├── __init__.py │ │ │ ├── constants.py │ │ │ ├── exceptions.py │ │ │ ├── flask │ │ │ ├── __init__.py │ │ │ ├── exceptions.py │ │ │ ├── logging.py │ │ │ └── middleware.py │ │ │ ├── pubsub_helper.py │ │ │ ├── tool_execution_status.py │ │ │ └── utilities.py │ ├── tests │ │ ├── account_services │ │ │ └── test_pandora_account.py │ │ └── test_pubsub_helper.py │ └── uv.lock ├── filesystem │ ├── README.md │ ├── pyproject.toml │ ├── src │ │ └── unstract │ │ │ └── filesystem │ │ │ ├── __init__.py │ │ │ ├── exceptions.py │ │ │ ├── file_storage_config.py │ │ │ ├── file_storage_types.py │ │ │ └── filesystem.py │ └── uv.lock ├── flags │ ├── .gitignore │ ├── README.md │ ├── pyproject.toml │ ├── src │ │ └── unstract │ │ │ └── flags │ │ │ ├── __init__.py │ │ │ ├── client │ │ │ ├── base.py │ │ │ ├── evaluation.py │ │ │ └── flipt.py │ │ │ ├── feature_flag.py │ │ │ ├── generated │ │ │ ├── evaluation_pb2.py │ │ │ ├── evaluation_pb2_grpc.py │ │ │ ├── flipt_pb2.py │ │ │ └── flipt_pb2_grpc.py │ │ │ ├── proto │ │ │ ├── evaluation.proto │ │ │ └── flipt.proto │ │ │ ├── sample.env │ │ │ └── tests │ │ │ └── test_client.py │ ├── tests │ │ └── __init__.py │ └── uv.lock ├── tool-registry │ ├── README.md │ ├── pyproject.toml │ ├── sample.env │ ├── scripts │ │ └── load_tools_to_json.py │ ├── src │ │ └── unstract │ │ │ └── tool_registry │ │ │ ├── __init__.py │ │ │ ├── constants.py │ │ │ ├── dto.py │ │ │ ├── exceptions.py │ │ │ ├── helper.py │ │ │ ├── schema_validator.py │ │ │ ├── tool_registry.py │ │ │ └── tool_utils.py │ ├── tests │ │ └── test_tool_registry.py │ ├── tool_registry_config │ │ ├── public_tools.json │ │ └── sample_registry.yaml │ └── uv.lock ├── tool-sandbox │ ├── .gitignore │ ├── README.md │ ├── pyproject.toml │ ├── src │ │ └── unstract │ │ │ └── tool_sandbox │ │ │ ├── __init__.py │ │ │ ├── constants.py │ │ │ ├── helper.py │ │ │ └── tool_sandbox.py │ └── uv.lock └── workflow-execution │ ├── .gitignore │ ├── README.md │ ├── pyproject.toml │ ├── src │ └── unstract │ │ └── workflow_execution │ │ ├── __init__.py │ │ ├── constants.py │ │ ├── dto.py │ │ ├── enums.py │ │ ├── exceptions.py │ │ ├── execution_file_handler.py │ │ ├── tools_utils.py │ │ └── workflow_execution.py │ ├── tests │ ├── sample_instances.json │ └── workflow_test.py │ └── uv.lock ├── uv.lock └── x2text-service ├── .gitignore ├── README.md ├── app ├── __init__.py ├── authentication_middleware.py ├── config.py ├── constants.py ├── controllers │ ├── __init__.py │ └── controller.py ├── env.py ├── models.py └── util.py ├── pyproject.toml ├── run.py ├── sample.env └── uv.lock /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: 📖 Documentation 4 | url: https://docs.unstract.com/unstract/index.html 5 | about: Check our documentation before creating an issue. 6 | -------------------------------------------------------------------------------- /.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "esversion": 9 3 | } 4 | -------------------------------------------------------------------------------- /.python-version: -------------------------------------------------------------------------------- 1 | 3.12.9 2 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | See [docs.unstract.com](https://docs.unstract.com/unstract/contributing/unstract). 4 | -------------------------------------------------------------------------------- /backend/.python-version: -------------------------------------------------------------------------------- 1 | 3.12.9 2 | -------------------------------------------------------------------------------- /backend/account_usage/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/account_usage/__init__.py -------------------------------------------------------------------------------- /backend/account_usage/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class AccountUsageConfig(AppConfig): 5 | default_auto_field = "django.db.models.BigAutoField" 6 | name = "account_usage" 7 | -------------------------------------------------------------------------------- /backend/account_usage/migrations/0002_alter_pageusage_pages_processed.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.2.1 on 2024-08-24 10:45 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("account_usage", "0001_initial"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterField( 13 | model_name="pageusage", 14 | name="pages_processed", 15 | field=models.IntegerField(db_comment="Number of pages which got processed"), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /backend/account_usage/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/account_usage/migrations/__init__.py -------------------------------------------------------------------------------- /backend/account_v2/ReadMe.md: -------------------------------------------------------------------------------- 1 | # Basic WorkFlow 2 | 3 | `We can Add Workflows Here` 4 | 5 | ## Login 6 | 7 | ### Step 8 | 9 | 1. Login 10 | 2. Get Organizations 11 | 3. Set Organization 12 | 4. Use organizational APIs /unstract// 13 | 14 | ## Switch organization 15 | 16 | 1. Get Organizations 17 | 2. Set Organization 18 | 3. Use organizational APIs /unstract// 19 | 20 | ## Get current user and Organization data 21 | 22 | - Use Get User Profile and Get Organization Info APIs 23 | 24 | ## Signout 25 | 26 | 1.signout APi 27 | -------------------------------------------------------------------------------- /backend/account_v2/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/account_v2/__init__.py -------------------------------------------------------------------------------- /backend/account_v2/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | from .models import Organization, User 4 | 5 | admin.site.register([Organization, User]) 6 | -------------------------------------------------------------------------------- /backend/account_v2/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class AccountConfig(AppConfig): 5 | default_auto_field = "django.db.models.BigAutoField" 6 | name = "account_v2" 7 | -------------------------------------------------------------------------------- /backend/account_v2/custom_authentication.py: -------------------------------------------------------------------------------- 1 | from typing import Any 2 | 3 | from django.http import HttpRequest 4 | from rest_framework.exceptions import AuthenticationFailed 5 | 6 | 7 | def api_login_required(view_func: Any) -> Any: 8 | def wrapper(request: HttpRequest, *args: Any, **kwargs: Any) -> Any: 9 | if request.user and request.session and "user" in request.session: 10 | return view_func(request, *args, **kwargs) 11 | raise AuthenticationFailed("Unauthorized") 12 | 13 | return wrapper 14 | -------------------------------------------------------------------------------- /backend/account_v2/custom_cache.py: -------------------------------------------------------------------------------- 1 | from django_redis import get_redis_connection 2 | 3 | 4 | class CustomCache: 5 | def __init__(self) -> None: 6 | self.cache = get_redis_connection("default") 7 | 8 | def rpush(self, key: str, value: str) -> None: 9 | self.cache.rpush(key, value) 10 | 11 | def lrem(self, key: str, value: str) -> None: 12 | self.cache.lrem(key, value) 13 | -------------------------------------------------------------------------------- /backend/account_v2/enums.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | 3 | 4 | class UserRole(Enum): 5 | USER = "user" 6 | ADMIN = "admin" 7 | -------------------------------------------------------------------------------- /backend/account_v2/migrations/0002_user_auth_provider.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.2.1 on 2025-05-13 17:45 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("account_v2", "0001_initial"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="user", 14 | name="auth_provider", 15 | field=models.CharField(default="", max_length=64), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /backend/account_v2/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/account_v2/migrations/__init__.py -------------------------------------------------------------------------------- /backend/account_v2/templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ZipstackID Django App Example 6 | 7 | 8 |

Welcome Guest

9 |

Login

10 | 11 | 12 | -------------------------------------------------------------------------------- /backend/account_v2/tests.py: -------------------------------------------------------------------------------- 1 | # Create your tests here. 2 | -------------------------------------------------------------------------------- /backend/adapter_processor_v2/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/adapter_processor_v2/__init__.py -------------------------------------------------------------------------------- /backend/adapter_processor_v2/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/adapter_processor_v2/migrations/__init__.py -------------------------------------------------------------------------------- /backend/api_v2/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/api_v2/__init__.py -------------------------------------------------------------------------------- /backend/api_v2/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | from .models import APIDeployment, APIKey 4 | 5 | admin.site.register([APIDeployment, APIKey]) 6 | -------------------------------------------------------------------------------- /backend/api_v2/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class ApiConfig(AppConfig): 5 | name = "api_v2" 6 | -------------------------------------------------------------------------------- /backend/api_v2/constants.py: -------------------------------------------------------------------------------- 1 | class ApiExecution: 2 | PATH: str = "deployment/api" 3 | MAXIMUM_TIMEOUT_IN_SEC: int = 300 # 5 minutes 4 | FILES_FORM_DATA: str = "files" 5 | TIMEOUT_FORM_DATA: str = "timeout" 6 | INCLUDE_METADATA: str = "include_metadata" 7 | INCLUDE_METRICS: str = "include_metrics" 8 | USE_FILE_HISTORY: str = "use_file_history" # Undocumented parameter 9 | EXECUTION_ID: str = "execution_id" 10 | TAGS: str = "tags" 11 | -------------------------------------------------------------------------------- /backend/api_v2/execution_urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import re_path 2 | from rest_framework.urlpatterns import format_suffix_patterns 3 | 4 | from api_v2.api_deployment_views import DeploymentExecution 5 | 6 | execute = DeploymentExecution.as_view() 7 | 8 | 9 | urlpatterns = format_suffix_patterns( 10 | [ 11 | re_path( 12 | r"^api/(?P[\w-]+)/(?P[\w-]+)/?$", 13 | execute, 14 | name="api_deployment_execution", 15 | ) 16 | ] 17 | ) 18 | -------------------------------------------------------------------------------- /backend/api_v2/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/api_v2/migrations/__init__.py -------------------------------------------------------------------------------- /backend/api_v2/postman_collection/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/api_v2/postman_collection/__init__.py -------------------------------------------------------------------------------- /backend/api_v2/postman_collection/constants.py: -------------------------------------------------------------------------------- 1 | class CollectionKey: 2 | POSTMAN_COLLECTION_V210 = ( 3 | "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" # noqa: E501 4 | ) 5 | EXECUTE_API_KEY = "Process document" 6 | EXECUTE_PIPELINE_API_KEY = "Process pipeline" 7 | STATUS_API_KEY = "Execution status" 8 | STATUS_EXEC_ID_DEFAULT = "REPLACE_WITH_EXECUTION_ID" 9 | AUTH_QUERY_PARAM_DEFAULT = "REPLACE_WITH_API_KEY" 10 | -------------------------------------------------------------------------------- /backend/backend/__init__.py: -------------------------------------------------------------------------------- 1 | from dotenv import load_dotenv 2 | 3 | from .celery_service import app as celery_app 4 | 5 | load_dotenv() 6 | 7 | __all__ = ["celery_app"] 8 | -------------------------------------------------------------------------------- /backend/backend/asgi.py: -------------------------------------------------------------------------------- 1 | """ASGI config for backend project. 2 | 3 | It exposes the ASGI callable as a module-level variable named ``application``. 4 | 5 | For more information on this file, see 6 | https://docs.djangoproject.com/en/4.2/howto/deployment/asgi/ 7 | """ 8 | 9 | import os 10 | 11 | from django.core.asgi import get_asgi_application 12 | from dotenv import load_dotenv 13 | 14 | load_dotenv() 15 | os.environ.setdefault( 16 | "DJANGO_SETTINGS_MODULE", 17 | os.environ.get("DJANGO_SETTINGS_MODULE", "backend.settings.dev"), 18 | ) 19 | 20 | application = get_asgi_application() 21 | -------------------------------------------------------------------------------- /backend/backend/custom_db/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/backend/custom_db/__init__.py -------------------------------------------------------------------------------- /backend/backend/flowerconfig.py: -------------------------------------------------------------------------------- 1 | # Flower is a real-time web based monitor and administration tool 2 | # for Celery. It’s under active development, 3 | # but is already an essential tool. 4 | from django.conf import settings 5 | 6 | # Broker URL 7 | BROKER_URL = settings.CELERY_BROKER_URL 8 | 9 | # Flower web port 10 | PORT = 5555 11 | 12 | # Enable basic authentication (when required) 13 | # basic_auth = { 14 | # 'username': 'password' 15 | # } 16 | -------------------------------------------------------------------------------- /backend/backend/settings/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/backend/settings/__init__.py -------------------------------------------------------------------------------- /backend/backend/settings/test.py: -------------------------------------------------------------------------------- 1 | from backend.settings.base import * # noqa: F401, F403 2 | 3 | DEBUG = True 4 | -------------------------------------------------------------------------------- /backend/backend/workers/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/backend/workers/__init__.py -------------------------------------------------------------------------------- /backend/backend/workers/constants.py: -------------------------------------------------------------------------------- 1 | class CeleryWorkerNames: 2 | """Names of the celery workers.""" 3 | 4 | FILE_PROCESSING = "file_processing" 5 | -------------------------------------------------------------------------------- /backend/backend/workers/file_processing/__init__.py: -------------------------------------------------------------------------------- 1 | from .constants import QueueNames 2 | from .file_processing import app 3 | 4 | __all__ = ["app", "QueueNames"] 5 | -------------------------------------------------------------------------------- /backend/backend/workers/file_processing/constants.py: -------------------------------------------------------------------------------- 1 | class QueueNames: 2 | API_FILE_PROCESSING = "api_file_processing" 3 | FILE_PROCESSING = "file_processing" 4 | -------------------------------------------------------------------------------- /backend/commands/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/commands/__init__.py -------------------------------------------------------------------------------- /backend/commands/management/commands/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/commands/management/commands/__init__.py -------------------------------------------------------------------------------- /backend/connector_auth_v2/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/connector_auth_v2/__init__.py -------------------------------------------------------------------------------- /backend/connector_auth_v2/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | from .models import ConnectorAuth 4 | 5 | admin.site.register(ConnectorAuth) 6 | -------------------------------------------------------------------------------- /backend/connector_auth_v2/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class ConnectorAuthConfig(AppConfig): 5 | default_auto_field = "django.db.models.BigAutoField" 6 | name = "connector_auth_v2" 7 | -------------------------------------------------------------------------------- /backend/connector_auth_v2/constants.py: -------------------------------------------------------------------------------- 1 | class ConnectorAuthKey: 2 | OAUTH_KEY = "oauth-key" 3 | 4 | 5 | class SocialAuthConstants: 6 | UID = "uid" 7 | PROVIDER = "provider" 8 | ACCESS_TOKEN = "access_token" 9 | REFRESH_TOKEN = "refresh_token" 10 | TOKEN_TYPE = "token_type" 11 | AUTH_TIME = "auth_time" 12 | EXPIRES = "expires" 13 | 14 | REFRESH_AFTER_FORMAT = "%d/%m/%Y %H:%M:%S" 15 | REFRESH_AFTER = "refresh_after" # Timestamp to refresh tokens after 16 | 17 | GOOGLE_OAUTH = "google-oauth2" 18 | GOOGLE_TOKEN_EXPIRY_FORMAT = "%d/%m/%Y %H:%M:%S" 19 | -------------------------------------------------------------------------------- /backend/connector_auth_v2/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/connector_auth_v2/migrations/__init__.py -------------------------------------------------------------------------------- /backend/connector_auth_v2/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import include, path, re_path 2 | from rest_framework.urlpatterns import format_suffix_patterns 3 | 4 | from .views import ConnectorAuthViewSet 5 | 6 | connector_auth_cache = ConnectorAuthViewSet.as_view( 7 | { 8 | "get": "cache_key", 9 | } 10 | ) 11 | 12 | urlpatterns = format_suffix_patterns( 13 | [ 14 | path("oauth/", include("social_django.urls", namespace="social")), 15 | re_path( 16 | "^oauth/cache-key/(?P.+)$", 17 | connector_auth_cache, 18 | name="connector-cache", 19 | ), 20 | ] 21 | ) 22 | -------------------------------------------------------------------------------- /backend/connector_processor/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/connector_processor/__init__.py -------------------------------------------------------------------------------- /backend/connector_processor/serializers.py: -------------------------------------------------------------------------------- 1 | from rest_framework import serializers 2 | 3 | from backend.constants import FieldLengthConstants as FLC 4 | 5 | 6 | class TestConnectorSerializer(serializers.Serializer): 7 | connector_id = serializers.CharField(max_length=FLC.CONNECTOR_ID_LENGTH) 8 | connector_metadata = serializers.JSONField() 9 | -------------------------------------------------------------------------------- /backend/connector_processor/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import path 2 | 3 | from connector_processor.views import ConnectorViewSet 4 | 5 | from . import views 6 | 7 | connector_test = ConnectorViewSet.as_view({"post": "test"}) 8 | 9 | urlpatterns = [ 10 | path( 11 | "connector_schema/", 12 | views.get_connector_schema, 13 | name="get_connector_schema", 14 | ), 15 | path( 16 | "supported_connectors/", 17 | views.get_supported_connectors, 18 | name="get_supported_connectors", 19 | ), 20 | path("test_connectors/", connector_test, name="connector-test"), 21 | ] 22 | -------------------------------------------------------------------------------- /backend/connector_v2/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/connector_v2/__init__.py -------------------------------------------------------------------------------- /backend/connector_v2/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | from .models import ConnectorInstance 4 | 5 | admin.site.register(ConnectorInstance) 6 | -------------------------------------------------------------------------------- /backend/connector_v2/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class ConnectorConfig(AppConfig): 5 | name = "connector_v2" 6 | -------------------------------------------------------------------------------- /backend/connector_v2/constants.py: -------------------------------------------------------------------------------- 1 | class ConnectorInstanceKey: 2 | CONNECTOR_ID = "connector_id" 3 | CONNECTOR_NAME = "connector_name" 4 | CONNECTOR_TYPE = "connector_type" 5 | CONNECTOR_MODE = "connector_mode" 6 | CONNECTOR_VERSION = "connector_version" 7 | CONNECTOR_AUTH = "connector_auth" 8 | CONNECTOR_METADATA = "connector_metadata" 9 | CONNECTOR_EXISTS = "Connector with this configuration already exists in this project." 10 | DUPLICATE_API = "It appears that a duplicate call may have been made." 11 | 12 | 13 | class ConnectorInstanceConstant: 14 | USER_STORAGE = "User Storage" 15 | -------------------------------------------------------------------------------- /backend/connector_v2/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/connector_v2/migrations/__init__.py -------------------------------------------------------------------------------- /backend/connector_v2/tests/conftest.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | from django.core.management import call_command 3 | 4 | 5 | @pytest.fixture(scope="session") 6 | def django_db_setup(django_db_blocker): # type: ignore 7 | fixtures = ["./connector/tests/fixtures/fixtures_0001.json"] 8 | with django_db_blocker.unblock(): 9 | call_command("loaddata", *fixtures) 10 | -------------------------------------------------------------------------------- /backend/docs/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/docs/__init__.py -------------------------------------------------------------------------------- /backend/docs/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import path 2 | from drf_yasg import openapi 3 | from drf_yasg.views import get_schema_view 4 | 5 | schema_view = get_schema_view( 6 | openapi.Info( 7 | title="Unstract APIs", 8 | default_version="v1", 9 | description="", 10 | ), 11 | public=False, 12 | ) 13 | 14 | urlpatterns = [ 15 | path( 16 | "doc/", 17 | schema_view.with_ui("redoc", cache_timeout=0), 18 | name="schema-redoc", 19 | ), 20 | ] 21 | -------------------------------------------------------------------------------- /backend/feature_flag/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/feature_flag/__init__.py -------------------------------------------------------------------------------- /backend/feature_flag/admin.py: -------------------------------------------------------------------------------- 1 | # Register your models here. 2 | -------------------------------------------------------------------------------- /backend/feature_flag/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class FeatureFlagsConfig(AppConfig): 5 | default_auto_field = "django.db.models.BigAutoField" 6 | name = "feature_flag" 7 | -------------------------------------------------------------------------------- /backend/feature_flag/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/feature_flag/migrations/__init__.py -------------------------------------------------------------------------------- /backend/feature_flag/models.py: -------------------------------------------------------------------------------- 1 | # Create your models here. 2 | -------------------------------------------------------------------------------- /backend/file_management/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/file_management/__init__.py -------------------------------------------------------------------------------- /backend/file_management/admin.py: -------------------------------------------------------------------------------- 1 | # Register your models here. 2 | -------------------------------------------------------------------------------- /backend/file_management/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class FileManagementConfig(AppConfig): 5 | default_auto_field = "django.db.models.BigAutoField" 6 | name = "file_management" 7 | -------------------------------------------------------------------------------- /backend/file_management/constants.py: -------------------------------------------------------------------------------- 1 | class FileInformationKey: 2 | FILE_NAME = "name" 3 | FILE_TYPE = "type" 4 | FILE_LAST_MODIFIED = "LastModified" 5 | FILE_SIZE = "size" 6 | FILE_UPLOAD_MAX_SIZE = 200 * 1024 * 1024 7 | FILE_UPLOAD_ALLOWED_EXT = ["pdf"] 8 | FILE_UPLOAD_ALLOWED_MIME = ["application/pdf"] 9 | -------------------------------------------------------------------------------- /backend/file_management/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/file_management/migrations/__init__.py -------------------------------------------------------------------------------- /backend/file_management/models.py: -------------------------------------------------------------------------------- 1 | # Create your models here. 2 | -------------------------------------------------------------------------------- /backend/file_management/tests.py: -------------------------------------------------------------------------------- 1 | # Create your tests here. 2 | -------------------------------------------------------------------------------- /backend/health/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/health/__init__.py -------------------------------------------------------------------------------- /backend/health/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class HealthConfig(AppConfig): 5 | name = "health" 6 | -------------------------------------------------------------------------------- /backend/health/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import path 2 | from rest_framework.urlpatterns import format_suffix_patterns 3 | 4 | from .views import health_check 5 | 6 | urlpatterns = format_suffix_patterns([path("health", health_check, name="health-check")]) 7 | -------------------------------------------------------------------------------- /backend/health/views.py: -------------------------------------------------------------------------------- 1 | import logging 2 | 3 | from django.views.decorators.http import require_http_methods 4 | from rest_framework.decorators import api_view 5 | from rest_framework.request import Request 6 | from rest_framework.response import Response 7 | 8 | logger = logging.getLogger(__name__) 9 | 10 | 11 | @api_view(["GET"]) 12 | @require_http_methods(["GET"]) 13 | def health_check(request: Request) -> Response: 14 | logger.debug("Verifying backend health..") 15 | return Response(status=200) 16 | -------------------------------------------------------------------------------- /backend/logs_helper/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/logs_helper/__init__.py -------------------------------------------------------------------------------- /backend/logs_helper/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class LogsHelperConfig(AppConfig): 5 | name = "logs_helper" 6 | -------------------------------------------------------------------------------- /backend/logs_helper/constants.py: -------------------------------------------------------------------------------- 1 | class LogsHelperKeys: 2 | LOG = "LOG" 3 | LOG_EVENTS_ID = "log_events_id" 4 | -------------------------------------------------------------------------------- /backend/logs_helper/serializers.py: -------------------------------------------------------------------------------- 1 | from rest_framework import serializers 2 | 3 | 4 | class StoreLogMessagesSerializer(serializers.Serializer): 5 | log = serializers.CharField() 6 | -------------------------------------------------------------------------------- /backend/logs_helper/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import path 2 | from rest_framework.urlpatterns import format_suffix_patterns 3 | 4 | from .views import LogsHelperViewSet 5 | 6 | logs_helper = LogsHelperViewSet.as_view({"get": "get_logs", "post": "store_log"}) 7 | 8 | urlpatterns = format_suffix_patterns( 9 | [ 10 | path( 11 | "", 12 | logs_helper, 13 | name="logs-helper", 14 | ), 15 | ] 16 | ) 17 | -------------------------------------------------------------------------------- /backend/middleware/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/middleware/__init__.py -------------------------------------------------------------------------------- /backend/middleware/remove_allow_header.py: -------------------------------------------------------------------------------- 1 | from django.http import HttpRequest, HttpResponse 2 | from django.utils.deprecation import MiddlewareMixin 3 | 4 | 5 | class RemoveAllowHeaderMiddleware(MiddlewareMixin): 6 | def process_response( 7 | self, request: HttpRequest, response: HttpResponse 8 | ) -> HttpResponse: 9 | response.headers.pop("Allow", None) 10 | return response 11 | -------------------------------------------------------------------------------- /backend/middleware/request_id.py: -------------------------------------------------------------------------------- 1 | import uuid 2 | 3 | from log_request_id.middleware import RequestIDMiddleware 4 | 5 | 6 | class CustomRequestIDMiddleware(RequestIDMiddleware): 7 | def _generate_id(self): 8 | return str(uuid.uuid4()) 9 | -------------------------------------------------------------------------------- /backend/migrating/v2/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/migrating/v2/__init__.py -------------------------------------------------------------------------------- /backend/migrating/v2/admin.py: -------------------------------------------------------------------------------- 1 | # Register your models here. 2 | -------------------------------------------------------------------------------- /backend/migrating/v2/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class MigrationToolsConfig(AppConfig): 5 | default_auto_field = "django.db.models.BigAutoField" 6 | name = "migrating.v2" 7 | -------------------------------------------------------------------------------- /backend/migrating/v2/constants.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | 4 | class V2: 5 | SCHEMA_NAME = os.getenv("DB_SCHEMA", None) 6 | -------------------------------------------------------------------------------- /backend/migrating/v2/management/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/migrating/v2/management/__init__.py -------------------------------------------------------------------------------- /backend/migrating/v2/management/commands/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/migrating/v2/management/commands/__init__.py -------------------------------------------------------------------------------- /backend/migrating/v2/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/migrating/v2/migrations/__init__.py -------------------------------------------------------------------------------- /backend/migrating/v2/unstract_migrations.py: -------------------------------------------------------------------------------- 1 | from migrating.v2.query import MigrationQuery 2 | 3 | 4 | class UnstractMigration(MigrationQuery): 5 | pass 6 | -------------------------------------------------------------------------------- /backend/notification_v2/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/notification_v2/__init__.py -------------------------------------------------------------------------------- /backend/notification_v2/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class NotificationConfig(AppConfig): 5 | default_auto_field = "django.db.models.BigAutoField" 6 | name = "notification_v2" 7 | -------------------------------------------------------------------------------- /backend/notification_v2/constants.py: -------------------------------------------------------------------------------- 1 | class NotificationUrlConstant: 2 | """Constants for Notification Urls.""" 3 | 4 | PIPELINE_UID = "pipeline_uuid" 5 | API_UID = "api_uuid" 6 | -------------------------------------------------------------------------------- /backend/notification_v2/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/notification_v2/migrations/__init__.py -------------------------------------------------------------------------------- /backend/notification_v2/provider/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/notification_v2/provider/__init__.py -------------------------------------------------------------------------------- /backend/notification_v2/provider/webhook/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/notification_v2/provider/webhook/__init__.py -------------------------------------------------------------------------------- /backend/notification_v2/provider/webhook/api_webhook.py: -------------------------------------------------------------------------------- 1 | from notification_v2.provider.webhook.webhook import Webhook 2 | 3 | 4 | class APIWebhook(Webhook): 5 | def send(self): 6 | """Send the API webhook notification.""" 7 | super().send() 8 | 9 | def get_headers(self): 10 | """API-specific headers.""" 11 | headers = super().get_headers() 12 | headers["Content-Type"] = "application/json" 13 | return headers 14 | -------------------------------------------------------------------------------- /backend/permissions/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/permissions/__init__.py -------------------------------------------------------------------------------- /backend/pipeline_v2/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/pipeline_v2/__init__.py -------------------------------------------------------------------------------- /backend/pipeline_v2/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class PipelineConfig(AppConfig): 5 | name = "pipeline_v2" 6 | -------------------------------------------------------------------------------- /backend/pipeline_v2/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/pipeline_v2/migrations/__init__.py -------------------------------------------------------------------------------- /backend/pipeline_v2/public_api_urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import re_path 2 | from rest_framework.urlpatterns import format_suffix_patterns 3 | 4 | from pipeline_v2.piepline_api_execution_views import PipelineApiExecution 5 | 6 | execute = PipelineApiExecution.as_view() 7 | 8 | urlpatterns = format_suffix_patterns( 9 | [ 10 | re_path( 11 | r"^api/(?P[\w-]+)/(?P[\w-]+)/?$", 12 | execute, 13 | name="pipeline_api_deployment_execution", 14 | ), 15 | ] 16 | ) 17 | -------------------------------------------------------------------------------- /backend/pipeline_v2/serializers/update.py: -------------------------------------------------------------------------------- 1 | from pipeline_v2.models import Pipeline 2 | from rest_framework import serializers 3 | 4 | 5 | class PipelineUpdateSerializer(serializers.Serializer): 6 | pipeline_id = serializers.UUIDField(required=True) 7 | active = serializers.BooleanField(required=True) 8 | 9 | def validate_pipeline_id(self, value: str) -> str: 10 | try: 11 | Pipeline.objects.get(pk=value) 12 | except Pipeline.DoesNotExist: 13 | raise serializers.ValidationError("Invalid pipeline ID") 14 | return value 15 | -------------------------------------------------------------------------------- /backend/platform_settings_v2/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/platform_settings_v2/__init__.py -------------------------------------------------------------------------------- /backend/platform_settings_v2/admin.py: -------------------------------------------------------------------------------- 1 | # Register your models here. 2 | -------------------------------------------------------------------------------- /backend/platform_settings_v2/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class PlatformSettingsConfig(AppConfig): 5 | default_auto_field = "django.db.models.BigAutoField" 6 | name = "platform_settings_v2" 7 | -------------------------------------------------------------------------------- /backend/platform_settings_v2/constants.py: -------------------------------------------------------------------------------- 1 | class PlatformServiceConstants: 2 | IS_ACTIVE = "is_active" 3 | KEY = "key" 4 | ORGANIZATION = "organization" 5 | ID = "id" 6 | ACTIVATE = "ACTIVATE" 7 | DEACTIVATE = "DEACTIVATE" 8 | ACTION = "action" 9 | KEY_NAME = "key_name" 10 | 11 | 12 | class ErrorMessage: 13 | KEY_EXIST = "Key name already exists" 14 | DUPLICATE_API = "It appears that a duplicate call may have been made." 15 | -------------------------------------------------------------------------------- /backend/platform_settings_v2/models.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/platform_settings_v2/models.py -------------------------------------------------------------------------------- /backend/platform_settings_v2/tests.py: -------------------------------------------------------------------------------- 1 | # Create your tests here. 2 | -------------------------------------------------------------------------------- /backend/plugins/.gitignore: -------------------------------------------------------------------------------- 1 | modifier 2 | -------------------------------------------------------------------------------- /backend/plugins/README.md: -------------------------------------------------------------------------------- 1 | # Plugins 2 | 3 | ## Authentication 4 | 5 | Enhance the authentication capabilities of the `account/authentication_controller.py` module by incorporating additional modules. 6 | -------------------------------------------------------------------------------- /backend/plugins/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/plugins/__init__.py -------------------------------------------------------------------------------- /backend/plugins/api/dto/__init__.py: -------------------------------------------------------------------------------- 1 | from dataclasses import dataclass 2 | from typing import Any 3 | 4 | 5 | @dataclass 6 | class MetadataDto: 7 | name: str 8 | class_name: Any 9 | is_active: bool 10 | 11 | 12 | metadata = {} 13 | -------------------------------------------------------------------------------- /backend/plugins/authentication/auth_sample/__init__.py: -------------------------------------------------------------------------------- 1 | from .auth_service import AuthService 2 | 3 | metadata = { 4 | "name": "sample_auth", 5 | "service_class": AuthService, 6 | "description": "Sample Authentication Method", 7 | "is_active": False, 8 | } 9 | -------------------------------------------------------------------------------- /backend/plugins/authentication/auth_sample/enums.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | 3 | 4 | class Region(Enum): 5 | US = "US" 6 | EU = "EU" 7 | -------------------------------------------------------------------------------- /backend/plugins/authentication/auth_sample/exceptions.py: -------------------------------------------------------------------------------- 1 | from rest_framework.exceptions import APIException 2 | 3 | 4 | class MethodNotImplemented(APIException): 5 | status_code = 501 6 | default_detail = "Method Not Implemented" 7 | -------------------------------------------------------------------------------- /backend/plugins/processor/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/plugins/processor/.gitkeep -------------------------------------------------------------------------------- /backend/project/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/project/__init__.py -------------------------------------------------------------------------------- /backend/project/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | from .models import Project 4 | 5 | admin.site.register(Project) 6 | -------------------------------------------------------------------------------- /backend/project/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class ProjectConfig(AppConfig): 5 | name = "project" 6 | -------------------------------------------------------------------------------- /backend/project/constants.py: -------------------------------------------------------------------------------- 1 | class ProjectErrors: 2 | SERIALIZATION_FAILED = "Data Serialization Failed." 3 | PROJECT_NAME_EXISTS = "Project already exists" 4 | DUPLICATE_API = "It appears that a duplicate call may have been made." 5 | 6 | 7 | class ProjectKey: 8 | PROJECT_ID = "project_id" 9 | -------------------------------------------------------------------------------- /backend/project/exceptions.py: -------------------------------------------------------------------------------- 1 | from rest_framework.exceptions import APIException 2 | 3 | 4 | class BadRequestException(APIException): 5 | status_code = 400 6 | default_detail = "Bad Request." 7 | -------------------------------------------------------------------------------- /backend/project/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/project/migrations/__init__.py -------------------------------------------------------------------------------- /backend/project/tests/conftest.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | from django.core.management import call_command 3 | 4 | 5 | @pytest.fixture(scope="session") 6 | def django_db_setup(django_db_blocker): # type: ignore 7 | fixtures = ["./project/tests/fixtures/fixtures_0001.json"] 8 | with django_db_blocker.unblock(): 9 | call_command("loaddata", *fixtures) 10 | -------------------------------------------------------------------------------- /backend/prompt/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/prompt/__init__.py -------------------------------------------------------------------------------- /backend/prompt/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | from .models import Prompt 4 | 5 | admin.site.register(Prompt) 6 | -------------------------------------------------------------------------------- /backend/prompt/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class PromptConfig(AppConfig): 5 | name = "prompt" 6 | -------------------------------------------------------------------------------- /backend/prompt/constants.py: -------------------------------------------------------------------------------- 1 | class PromptErrors: 2 | PROMPT_EXISTS = "Prompt with this configuration already exists" 3 | DUPLICATE_API = "It appears that a duplicate call may have been made." 4 | -------------------------------------------------------------------------------- /backend/prompt/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/prompt/migrations/__init__.py -------------------------------------------------------------------------------- /backend/prompt/tests/conftest.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | from django.core.management import call_command 3 | 4 | 5 | @pytest.fixture(scope="session") 6 | def django_db_setup(django_db_blocker): 7 | fixtures = ["./prompt/tests/fixtures/prompts_001.json"] 8 | with django_db_blocker.unblock(): 9 | call_command("loaddata", *fixtures) 10 | -------------------------------------------------------------------------------- /backend/prompt_studio/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/prompt_studio/__init__.py -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_profile_manager_v2/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/prompt_studio/prompt_profile_manager_v2/__init__.py -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_profile_manager_v2/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | from .models import ProfileManager 4 | 5 | admin.site.register(ProfileManager) 6 | -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_profile_manager_v2/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class ProfileManager(AppConfig): 5 | name = "prompt_studio.prompt_profile_manager_v2" 6 | -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_profile_manager_v2/exceptions.py: -------------------------------------------------------------------------------- 1 | from rest_framework.exceptions import APIException 2 | 3 | 4 | class PlatformServiceError(APIException): 5 | status_code = 400 6 | default_detail = "Seems an error occured in Platform Service." 7 | -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_profile_manager_v2/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/prompt_studio/prompt_profile_manager_v2/migrations/__init__.py -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_profile_manager_v2/profile_manager_helper.py: -------------------------------------------------------------------------------- 1 | from prompt_studio.prompt_profile_manager_v2.models import ProfileManager 2 | 3 | 4 | class ProfileManagerHelper: 5 | @classmethod 6 | def get_profile_manager(cls, profile_manager_id: str) -> ProfileManager: 7 | try: 8 | return ProfileManager.objects.get(profile_id=profile_manager_id) 9 | except ProfileManager.DoesNotExist: 10 | raise ValueError("ProfileManager does not exist.") 11 | -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_studio_core_v2/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/prompt_studio/prompt_studio_core_v2/__init__.py -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_studio_core_v2/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | from .models import CustomTool 4 | 5 | admin.site.register(CustomTool) 6 | -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_studio_core_v2/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class CustomTool(AppConfig): 5 | name = "prompt_studio.prompt_studio_core_v2" 6 | -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_studio_core_v2/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/prompt_studio/prompt_studio_core_v2/migrations/__init__.py -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_studio_document_manager_v2/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/prompt_studio/prompt_studio_document_manager_v2/__init__.py -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_studio_document_manager_v2/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | from .models import DocumentManager 4 | 5 | admin.site.register(DocumentManager) 6 | -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_studio_document_manager_v2/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class PromptStudioDocumentManagerConfig(AppConfig): 5 | name = "prompt_studio.prompt_studio_document_manager_v2" 6 | -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_studio_document_manager_v2/constants.py: -------------------------------------------------------------------------------- 1 | class PSDMKeys: 2 | DOCUMENT_NAME = "document_name" 3 | TOOL = "tool" 4 | DOCUMENT_ID = "document_id" 5 | -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_studio_document_manager_v2/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/prompt_studio/prompt_studio_document_manager_v2/migrations/__init__.py -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_studio_index_manager_v2/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/prompt_studio/prompt_studio_index_manager_v2/__init__.py -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_studio_index_manager_v2/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | from .models import IndexManager 4 | 5 | admin.site.register(IndexManager) 6 | -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_studio_index_manager_v2/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class PromptStudioIndexManagerConfig(AppConfig): 5 | name = "prompt_studio.prompt_studio_index_manager_v2" 6 | -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_studio_index_manager_v2/constants.py: -------------------------------------------------------------------------------- 1 | class IndexManagerKeys: 2 | PROFILE_MANAGER = "profile_manager" 3 | DOCUMENT_MANAGER = "document_manager" 4 | -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_studio_index_manager_v2/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/prompt_studio/prompt_studio_index_manager_v2/migrations/__init__.py -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_studio_index_manager_v2/serializers.py: -------------------------------------------------------------------------------- 1 | from backend.serializers import AuditSerializer 2 | 3 | from .models import IndexManager 4 | 5 | 6 | class IndexManagerSerializer(AuditSerializer): 7 | class Meta: 8 | model = IndexManager 9 | fields = "__all__" 10 | -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_studio_output_manager_v2/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/prompt_studio/prompt_studio_output_manager_v2/__init__.py -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_studio_output_manager_v2/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | from .models import PromptStudioOutputManager 4 | 5 | admin.site.register(PromptStudioOutputManager) 6 | -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_studio_output_manager_v2/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class PromptStudioOutputManager(AppConfig): 5 | name = "prompt_studio.prompt_studio_output_manager_v2" 6 | -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_studio_output_manager_v2/constants.py: -------------------------------------------------------------------------------- 1 | class PromptStudioOutputManagerKeys: 2 | TOOL_ID = "tool_id" 3 | PROMPT_ID = "prompt_id" 4 | PROFILE_MANAGER = "profile_manager" 5 | DOCUMENT_MANAGER = "document_manager" 6 | IS_SINGLE_PASS_EXTRACT = "is_single_pass_extract" 7 | NOTES = "NOTES" 8 | 9 | 10 | class PromptOutputManagerErrorMessage: 11 | TOOL_VALIDATION = "tool_id parameter is required" 12 | TOOL_NOT_FOUND = "Tool not found" 13 | -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_studio_output_manager_v2/exceptions.py: -------------------------------------------------------------------------------- 1 | from rest_framework.exceptions import APIException 2 | 3 | 4 | class InternalError(APIException): 5 | status_code = 400 6 | default_detail = "Internal service error." 7 | -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_studio_output_manager_v2/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/prompt_studio/prompt_studio_output_manager_v2/migrations/__init__.py -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_studio_registry_v2/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/prompt_studio/prompt_studio_registry_v2/__init__.py -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_studio_registry_v2/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | from .models import PromptStudioRegistry 4 | 5 | admin.site.register(PromptStudioRegistry) 6 | -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_studio_registry_v2/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class PromptStudioRegistry(AppConfig): 5 | name = "prompt_studio.prompt_studio_registry_v2" 6 | -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_studio_registry_v2/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/prompt_studio/prompt_studio_registry_v2/migrations/__init__.py -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_studio_registry_v2/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import path 2 | from rest_framework.urlpatterns import format_suffix_patterns 3 | 4 | from .views import PromptStudioRegistryView 5 | 6 | urlpatterns = [ 7 | path( 8 | "registry/", 9 | PromptStudioRegistryView.as_view({"get": "list"}), 10 | name="prompt_studio_registry_list", 11 | ), 12 | ] 13 | 14 | # Optional: Apply format suffix patterns 15 | urlpatterns = format_suffix_patterns(urlpatterns) 16 | -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_studio_v2/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/prompt_studio/prompt_studio_v2/__init__.py -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_studio_v2/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | from .models import ToolStudioPrompt 4 | 5 | admin.site.register(ToolStudioPrompt) 6 | -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_studio_v2/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class ToolStudioPrompt(AppConfig): 5 | name = "prompt_studio.prompt_studio_v2" 6 | -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_studio_v2/exceptions.py: -------------------------------------------------------------------------------- 1 | from rest_framework.exceptions import APIException 2 | 3 | 4 | class IndexingError(APIException): 5 | status_code = 400 6 | default_detail = "Error while indexing file" 7 | 8 | 9 | class AnswerFetchError(APIException): 10 | status_code = 400 11 | default_detail = "Error occured while fetching response for the prompt" 12 | 13 | 14 | class ToolNotValid(APIException): 15 | status_code = 400 16 | default_detail = "Custom tool is not valid." 17 | -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_studio_v2/migrations/0003_toolstudioprompt_required.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.2.1 on 2024-12-10 10:07 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("prompt_studio_v2", "0002_alter_toolstudioprompt_enforce_type"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="toolstudioprompt", 14 | name="required", 15 | field=models.BooleanField(default=False), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /backend/prompt_studio/prompt_studio_v2/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/prompt_studio/prompt_studio_v2/migrations/__init__.py -------------------------------------------------------------------------------- /backend/scheduler/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/scheduler/__init__.py -------------------------------------------------------------------------------- /backend/scheduler/admin.py: -------------------------------------------------------------------------------- 1 | # Register your models here. 2 | -------------------------------------------------------------------------------- /backend/scheduler/apps.py: -------------------------------------------------------------------------------- 1 | import logging 2 | 3 | from django.apps import AppConfig 4 | 5 | logger = logging.getLogger(__name__) 6 | 7 | 8 | class SchedulerConfig(AppConfig): 9 | default_auto_field = "django.db.models.BigAutoField" 10 | name = "scheduler" 11 | 12 | def ready(self) -> None: 13 | super().ready() 14 | return 15 | -------------------------------------------------------------------------------- /backend/scheduler/constants.py: -------------------------------------------------------------------------------- 1 | class SchedulerConstants: 2 | """Constants used by the scheduler app.""" 3 | 4 | # Adding a cron job 5 | ID = "id" 6 | NAME = "name" 7 | JOB_KWARGS = "job_kwargs" 8 | SCHEDULER_KWARGS = "scheduler_kwargs" 9 | CRON_STRING = "cron_string" 10 | 11 | # Default strings 12 | DEFAULT_CRON_STRING = "0 9 * * 1" 13 | JOB_ID_REPLACE_TAG = "" 14 | -------------------------------------------------------------------------------- /backend/scheduler/exceptions.py: -------------------------------------------------------------------------------- 1 | from rest_framework.exceptions import APIException 2 | 3 | 4 | class JobSchedulingError(APIException): 5 | status_code = 500 6 | default_detail = "Error occured while scheduling the job" 7 | 8 | 9 | class JobDeletionError(APIException): 10 | status_code = 404 11 | default_detail = "Error occured while deleting the job" 12 | -------------------------------------------------------------------------------- /backend/scheduler/settings.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/scheduler/settings.py -------------------------------------------------------------------------------- /backend/tags/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/tags/__init__.py -------------------------------------------------------------------------------- /backend/tags/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class TagsConfig(AppConfig): 5 | default_auto_field = "django.db.models.BigAutoField" 6 | name = "tags" 7 | -------------------------------------------------------------------------------- /backend/tags/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/tags/migrations/__init__.py -------------------------------------------------------------------------------- /backend/tenant_account_v2/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/tenant_account_v2/__init__.py -------------------------------------------------------------------------------- /backend/tenant_account_v2/admin.py: -------------------------------------------------------------------------------- 1 | # Register your models here. 2 | -------------------------------------------------------------------------------- /backend/tenant_account_v2/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class TenantAccountV2Config(AppConfig): 5 | default_auto_field = "django.db.models.BigAutoField" 6 | name = "tenant_account_v2" 7 | -------------------------------------------------------------------------------- /backend/tenant_account_v2/constants.py: -------------------------------------------------------------------------------- 1 | class PlatformServiceConstants: 2 | IS_ACTIVE = "is_active" 3 | KEY = "key" 4 | ORGANIZATION = "organization" 5 | ID = "id" 6 | ACTIVATE = "ACTIVATE" 7 | DEACTIVATE = "DEACTIVATE" 8 | ACTION = "action" 9 | KEY_NAME = "key_name" 10 | 11 | 12 | class ErrorMessage: 13 | KEY_EXIST = "Key name already exists" 14 | DUPLICATE_API = "It appears that a duplicate call may have been made." 15 | -------------------------------------------------------------------------------- /backend/tenant_account_v2/dto.py: -------------------------------------------------------------------------------- 1 | from dataclasses import dataclass 2 | 3 | 4 | @dataclass 5 | class OrganizationLoginResponse: 6 | name: str 7 | display_name: str 8 | organization_id: str 9 | created_at: str 10 | 11 | 12 | @dataclass 13 | class ResetUserPasswordDto: 14 | status: bool 15 | message: str 16 | -------------------------------------------------------------------------------- /backend/tenant_account_v2/enums.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | 3 | 4 | class UserRole(Enum): 5 | USER = "user" 6 | ADMIN = "admin" 7 | -------------------------------------------------------------------------------- /backend/tenant_account_v2/invitation_urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import path 2 | 3 | from tenant_account_v2.invitation_views import InvitationViewSet 4 | 5 | invitation_list = InvitationViewSet.as_view( 6 | { 7 | "get": InvitationViewSet.list_invitations.__name__, 8 | } 9 | ) 10 | 11 | invitation_details = InvitationViewSet.as_view( 12 | { 13 | "delete": InvitationViewSet.delete_invitation.__name__, 14 | } 15 | ) 16 | 17 | 18 | urlpatterns = [ 19 | path("", invitation_list, name="invitation_list"), 20 | path("/", invitation_details, name="invitation_details"), 21 | ] 22 | -------------------------------------------------------------------------------- /backend/tenant_account_v2/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/tenant_account_v2/migrations/__init__.py -------------------------------------------------------------------------------- /backend/tenant_account_v2/tests.py: -------------------------------------------------------------------------------- 1 | # Create your tests here. 2 | -------------------------------------------------------------------------------- /backend/tenant_account_v2/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import include, path 2 | 3 | from tenant_account_v2 import invitation_urls, users_urls 4 | from tenant_account_v2.views import get_organization, get_roles, reset_password 5 | 6 | urlpatterns = [ 7 | path("roles", get_roles, name="roles"), 8 | path("users/", include(users_urls)), 9 | path("invitation/", include(invitation_urls)), 10 | path("organization", get_organization, name="get_organization"), 11 | path("reset_password", reset_password, name="reset_password"), 12 | ] 13 | -------------------------------------------------------------------------------- /backend/tool_instance_v2/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/tool_instance_v2/__init__.py -------------------------------------------------------------------------------- /backend/tool_instance_v2/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | from .models import ToolInstance 4 | 5 | admin.site.register(ToolInstance) 6 | -------------------------------------------------------------------------------- /backend/tool_instance_v2/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class ToolInstanceConfig(AppConfig): 5 | name = "tool_instance_v2" 6 | -------------------------------------------------------------------------------- /backend/tool_instance_v2/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/tool_instance_v2/migrations/__init__.py -------------------------------------------------------------------------------- /backend/usage_v2/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/usage_v2/__init__.py -------------------------------------------------------------------------------- /backend/usage_v2/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | from .models import Usage 4 | 5 | admin.site.register(Usage) 6 | -------------------------------------------------------------------------------- /backend/usage_v2/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class UsageConfig(AppConfig): 5 | name = "usage_v2" 6 | -------------------------------------------------------------------------------- /backend/usage_v2/migrations/0003_usage_usage_executi_4deb35_idx.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.2.1 on 2025-04-03 08:37 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("usage_v2", "0002_alter_usage_run_id"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddIndex( 13 | model_name="usage", 14 | index=models.Index(fields=["execution_id"], name="usage_executi_4deb35_idx"), 15 | ), 16 | ] 17 | -------------------------------------------------------------------------------- /backend/usage_v2/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/usage_v2/migrations/__init__.py -------------------------------------------------------------------------------- /backend/utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/utils/__init__.py -------------------------------------------------------------------------------- /backend/utils/date/__init__.py: -------------------------------------------------------------------------------- 1 | from .constants import DateRangeKeys # noqa: F401 2 | from .enums import DateRangePresets # noqa: F401 3 | from .exceptions import InvalidDateRange, InvalidDatetime # noqa: F401 4 | from .processor import DateRange, DateTimeProcessor # noqa: F401 5 | from .serializer import DateRangeSerializer # noqa: F401 6 | -------------------------------------------------------------------------------- /backend/utils/date/constants.py: -------------------------------------------------------------------------------- 1 | class DateRangeKeys: 2 | START_DATE = "start_date" 3 | END_DATE = "end_date" 4 | -------------------------------------------------------------------------------- /backend/utils/date/exceptions.py: -------------------------------------------------------------------------------- 1 | from rest_framework.exceptions import APIException 2 | 3 | 4 | class InvalidDateRange(APIException): 5 | status_code = 400 6 | default_detail = "Invalid date range" 7 | 8 | 9 | class InvalidDatetime(APIException): 10 | status_code = 400 11 | default_detail = "Invalid datetime format" 12 | -------------------------------------------------------------------------------- /backend/utils/date/serializer.py: -------------------------------------------------------------------------------- 1 | from rest_framework import serializers 2 | 3 | 4 | class DateRangeSerializer(serializers.Serializer): 5 | start_date = serializers.DateTimeField(required=False) 6 | end_date = serializers.DateTimeField(required=False) 7 | -------------------------------------------------------------------------------- /backend/utils/enums.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | 3 | 4 | class CeleryTaskState(Enum): 5 | FAILURE = "FAILURE" 6 | PENDING = "PENDING" 7 | RECEIVED = "RECEIVED" 8 | RETRY = "RETRY" 9 | REVOKED = "REVOKED" 10 | STARTED = "STARTED" 11 | SUCCESS = "SUCCESS" 12 | COMPLETED = "COMPLETED" 13 | -------------------------------------------------------------------------------- /backend/utils/file_storage/constants.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | 3 | 4 | class FileStorageKeys: 5 | PERMANENT_REMOTE_STORAGE = "PERMANENT_REMOTE_STORAGE" 6 | TEMPORARY_REMOTE_STORAGE = "TEMPORARY_REMOTE_STORAGE" 7 | 8 | 9 | class FileStorageType(Enum): 10 | PERMANENT = "permanent" 11 | TEMPORARY = "temporary" 12 | 13 | 14 | class FileStorageConstants: 15 | PROMPT_STUDIO_FILE_PATH = "PROMPT_STUDIO_FILE_PATH" 16 | REMOTE_PROMPT_STUDIO_FILE_PATH = "REMOTE_PROMPT_STUDIO_FILE_PATH" 17 | -------------------------------------------------------------------------------- /backend/utils/models/base_model.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | 4 | class BaseModel(models.Model): 5 | created_at = models.DateTimeField(auto_now_add=True) 6 | modified_at = models.DateTimeField(auto_now=True) 7 | 8 | class Meta: 9 | abstract = True 10 | -------------------------------------------------------------------------------- /backend/utils/notification/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/utils/notification/__init__.py -------------------------------------------------------------------------------- /backend/utils/pagination.py: -------------------------------------------------------------------------------- 1 | from rest_framework.pagination import PageNumberPagination 2 | 3 | from utils.constants import Pagination 4 | 5 | 6 | class CustomPagination(PageNumberPagination): 7 | page_size = Pagination.PAGE_SIZE 8 | page_size_query_param = Pagination.PAGE_SIZE_QUERY_PARAM 9 | max_page_size = Pagination.MAX_PAGE_SIZE 10 | -------------------------------------------------------------------------------- /backend/utils/redis_cache.py: -------------------------------------------------------------------------------- 1 | # KEY_FUNCTION for cache settings 2 | def custom_key_function(key: str, key_prefix: str, version: int) -> str: 3 | version = int(version) 4 | if version > 1: 5 | return f"{key_prefix}:{version}:{key}" 6 | if key_prefix: 7 | return f"{key_prefix}:{key}" 8 | else: 9 | return key 10 | -------------------------------------------------------------------------------- /backend/utils/request/__init__.py: -------------------------------------------------------------------------------- 1 | from .request import HTTPMethod, make_http_request 2 | 3 | __all__ = ["make_http_request", "HTTPMethod"] 4 | -------------------------------------------------------------------------------- /backend/utils/request/constants.py: -------------------------------------------------------------------------------- 1 | class RequestConstants: 2 | """Constants used for make_http_request().""" 3 | 4 | VERB = "verb" 5 | URL = "url" 6 | HEADERS = "headers" 7 | PARAMS = "params" 8 | DATA = "data" 9 | -------------------------------------------------------------------------------- /backend/workflow_manager/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/workflow_manager/__init__.py -------------------------------------------------------------------------------- /backend/workflow_manager/endpoint_v2/__init__ .py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/workflow_manager/endpoint_v2/__init__ .py -------------------------------------------------------------------------------- /backend/workflow_manager/endpoint_v2/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class WorkflowEndpointConfig(AppConfig): 5 | default_auto_field = "django.db.models.BigAutoField" 6 | name = "workflow_manager.endpoint_v2" 7 | -------------------------------------------------------------------------------- /backend/workflow_manager/endpoint_v2/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/workflow_manager/endpoint_v2/migrations/__init__.py -------------------------------------------------------------------------------- /backend/workflow_manager/endpoint_v2/serializers.py: -------------------------------------------------------------------------------- 1 | import logging 2 | 3 | from rest_framework.serializers import ModelSerializer 4 | from workflow_manager.endpoint_v2.models import WorkflowEndpoint 5 | 6 | logger = logging.getLogger(__name__) 7 | 8 | 9 | class WorkflowEndpointSerializer(ModelSerializer): 10 | class Meta: 11 | model = WorkflowEndpoint 12 | fields = "__all__" 13 | -------------------------------------------------------------------------------- /backend/workflow_manager/endpoint_v2/static/dest/file.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "File Destination Settings", 3 | "type": "object", 4 | "required": [ 5 | "outputFolder" 6 | ], 7 | "properties": { 8 | "outputFolder": { 9 | "type": "string", 10 | "title": "Output folder", 11 | "default": "output", 12 | "description": "Folder to store the output", 13 | "minLength": 1, 14 | "maxLength": 100, 15 | "format": "file-path" 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /backend/workflow_manager/endpoint_v2/tests/__init__.py: -------------------------------------------------------------------------------- 1 | from backend.celery import app as celery_app 2 | 3 | __all__ = ["celery_app"] 4 | -------------------------------------------------------------------------------- /backend/workflow_manager/endpoint_v2/tests/test_database_utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/workflow_manager/endpoint_v2/tests/test_database_utils/__init__.py -------------------------------------------------------------------------------- /backend/workflow_manager/execution/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/workflow_manager/execution/__init__.py -------------------------------------------------------------------------------- /backend/workflow_manager/execution/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class ExecutionConfig(AppConfig): 5 | default_auto_field = "django.db.models.BigAutoField" 6 | name = "workflow_manager.execution" 7 | -------------------------------------------------------------------------------- /backend/workflow_manager/execution/enum.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | 3 | 4 | class ExecutionEntity(Enum): 5 | ETL = "ETL" 6 | API = "API" 7 | TASK = "TASK" 8 | WORKFLOW = "WF" 9 | -------------------------------------------------------------------------------- /backend/workflow_manager/execution/serializer/__init__.py: -------------------------------------------------------------------------------- 1 | from .execution import ExecutionSerializer # noqa: F401 2 | -------------------------------------------------------------------------------- /backend/workflow_manager/execution/views/__init__.py: -------------------------------------------------------------------------------- 1 | from .execution import ExecutionViewSet # noqa: F401 2 | -------------------------------------------------------------------------------- /backend/workflow_manager/file_execution/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/workflow_manager/file_execution/__init__.py -------------------------------------------------------------------------------- /backend/workflow_manager/file_execution/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class FileExecutionConfig(AppConfig): 5 | default_auto_field = "django.db.models.BigAutoField" 6 | name = "workflow_manager.file_execution" 7 | -------------------------------------------------------------------------------- /backend/workflow_manager/file_execution/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/workflow_manager/file_execution/migrations/__init__.py -------------------------------------------------------------------------------- /backend/workflow_manager/file_execution/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import path 2 | from rest_framework.urlpatterns import format_suffix_patterns 3 | 4 | from workflow_manager.file_execution.views import FileCentricExecutionViewSet 5 | 6 | file_centric_list = FileCentricExecutionViewSet.as_view({"get": "list"}) 7 | 8 | urlpatterns = format_suffix_patterns( 9 | [ 10 | path("/files/", file_centric_list, name="file-centric-execution-list"), 11 | ] 12 | ) 13 | -------------------------------------------------------------------------------- /backend/workflow_manager/utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/workflow_manager/utils/__init__.py -------------------------------------------------------------------------------- /backend/workflow_manager/workflow_v2/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/workflow_manager/workflow_v2/__init__.py -------------------------------------------------------------------------------- /backend/workflow_manager/workflow_v2/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | from workflow_manager.workflow_v2.models.workflow import Workflow 4 | 5 | admin.site.register(Workflow) 6 | -------------------------------------------------------------------------------- /backend/workflow_manager/workflow_v2/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class WorkflowConfig(AppConfig): 5 | default_auto_field = "django.db.models.BigAutoField" 6 | name = "workflow_manager.workflow_v2" 7 | 8 | def ready(self): 9 | from workflow_manager.workflow_v2.execution_log_utils import ( 10 | create_log_consumer_scheduler_if_not_exists, 11 | ) 12 | 13 | create_log_consumer_scheduler_if_not_exists() 14 | -------------------------------------------------------------------------------- /backend/workflow_manager/workflow_v2/filters/__init__.py: -------------------------------------------------------------------------------- 1 | from .execution_log import ExecutionLogFilter # noqa: F401 2 | -------------------------------------------------------------------------------- /backend/workflow_manager/workflow_v2/migrations/0003_workflowexecution_result_acknowledged.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.2.1 on 2024-12-12 15:08 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("workflow_v2", "0002_remove_workflow_llm_response_and_more"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="workflowexecution", 14 | name="result_acknowledged", 15 | field=models.BooleanField(db_comment="Result acknowledged", default=False), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /backend/workflow_manager/workflow_v2/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/workflow_manager/workflow_v2/migrations/__init__.py -------------------------------------------------------------------------------- /backend/workflow_manager/workflow_v2/models/__init__.py: -------------------------------------------------------------------------------- 1 | # isort:skip_file 2 | 3 | # Do not change the order of the imports below to avoid circular dependency issues 4 | from .workflow import Workflow # noqa: F401 5 | from .execution import WorkflowExecution # noqa: F401 6 | from .execution_log import ExecutionLog # noqa: F401 7 | from .file_history import FileHistory # noqa: F401 8 | -------------------------------------------------------------------------------- /backend/workflow_manager/workflow_v2/urls/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/backend/workflow_manager/workflow_v2/urls/__init__.py -------------------------------------------------------------------------------- /docker/connector/README.md: -------------------------------------------------------------------------------- 1 | # Docker Run 2 | 3 | Useful while running connectors 4 | - Database connectors: Includes db connectors like mysql, mariadb, mssql 5 | - File system connectors: Includes fs connectors like sftp 6 | 7 | **NOTE**: Copy `sample.env` into `.env` and update the necessary variables. 8 | 9 | ```bash 10 | # Up all connector db 11 | docker compose -f docker-compose-connector.yaml up -d 12 | 13 | # Up a specific service alone 14 | docker compose -f docker-compose-connector.yaml up -d mysql 15 | ``` 16 | -------------------------------------------------------------------------------- /docker/connector/sample.env: -------------------------------------------------------------------------------- 1 | MYSQL_ROOT_PASSWORD=unstract_root_pass 2 | MYSQL_DATABASE=unstract_db 3 | MYSQL_USER=unstract_dev 4 | MYSQL_PASSWORD=unstract_pass 5 | ACCEPT_EULA=Y 6 | MSSQL_SA_PASSWORD=unstractPassword@123 7 | SFTP_USER=foo 8 | SFTP_PASS=pass 9 | SFTP_USER_ID=1001 10 | SFTP_DIR=upload 11 | -------------------------------------------------------------------------------- /docker/scripts/check_container_exited.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | export VERSION=test 4 | if [ "$(docker compose -f ../docker-compose.yaml ps -a --filter status=exited | wc -l)" -gt 1 ]; then 5 | echo "There are exited containers." 6 | exit 1 7 | fi 8 | -------------------------------------------------------------------------------- /docker/scripts/db-setup/README.md: -------------------------------------------------------------------------------- 1 | # Unstract DB Setup Script 2 | 3 | [The db_setup.sh](/docker/scripts/db-setup/db_setup.sh) script helps setup the postgres database by making use of environment variables defined in the `.essentials.env` (user copy of the [sample.essentials.env](/docker/sample.essentials.env)) 4 | 5 | - POSTGRES_USER 6 | - POSTGRES_DB 7 | - POSTGRES_SCHEMA 8 | 9 | This script helps setup the DB user and creates a new schema as well. 10 | -------------------------------------------------------------------------------- /docker/scripts/db-setup/db_setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | echo "Creating DB '$POSTGRES_DB' and schema '$POSTGRES_SCHEMA' with user '$POSTGRES_USER'" 3 | 4 | psql -U ${POSTGRES_USER} -d ${POSTGRES_DB}<<-END 5 | ALTER ROLE ${POSTGRES_USER} SET client_encoding TO 'utf8'; 6 | ALTER ROLE ${POSTGRES_USER} SET default_transaction_isolation TO 'read committed'; 7 | ALTER ROLE ${POSTGRES_USER} SET timezone TO 'UTC'; 8 | ALTER USER ${POSTGRES_USER} CREATEDB; 9 | CREATE DATABASE ${POSTGRES_DB}; 10 | GRANT ALL PRIVILEGES ON DATABASE ${POSTGRES_DB} TO ${POSTGRES_USER}; 11 | CREATE SCHEMA IF NOT EXISTS ${POSTGRES_SCHEMA} 12 | END 13 | -------------------------------------------------------------------------------- /docker/scripts/release-notes/README.md: -------------------------------------------------------------------------------- 1 | # Print Release Notes 2 | 3 | Accepts `current_version` and `target_version` as inputs to print the necessary release notes / warnings to be shown while updating a release 4 | 5 | Run below to get more information on the usage 6 | 7 | ```shell 8 | python print_release_notes.py -h 9 | ``` 10 | 11 | Make sure to create / activate a virtual environment with the below commands 12 | 13 | ```shell 14 | uv venv 15 | source .venv/bin/activate 16 | ``` 17 | -------------------------------------------------------------------------------- /docker/scripts/release-notes/release_notes.json: -------------------------------------------------------------------------------- 1 | { 2 | "v0.93.0": { 3 | "message": "A data migration is required to continue using the platform with your existing data.\nFor detailed instructions on how to perform this migration, please check:\n `backend/migrating/v2/README.md`", 4 | "warning": true 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /docs/assets/3rd_party/amazon_redshift.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/3rd_party/amazon_redshift.png -------------------------------------------------------------------------------- /docs/assets/3rd_party/anthropic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/3rd_party/anthropic.png -------------------------------------------------------------------------------- /docs/assets/3rd_party/anyscale.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/3rd_party/anyscale.png -------------------------------------------------------------------------------- /docs/assets/3rd_party/azure_openai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/3rd_party/azure_openai.png -------------------------------------------------------------------------------- /docs/assets/3rd_party/bedrock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/3rd_party/bedrock.png -------------------------------------------------------------------------------- /docs/assets/3rd_party/box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/3rd_party/box.png -------------------------------------------------------------------------------- /docs/assets/3rd_party/cohere.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/3rd_party/cohere.png -------------------------------------------------------------------------------- /docs/assets/3rd_party/dropbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/3rd_party/dropbox.png -------------------------------------------------------------------------------- /docs/assets/3rd_party/gcp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/3rd_party/gcp.png -------------------------------------------------------------------------------- /docs/assets/3rd_party/google.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/3rd_party/google.png -------------------------------------------------------------------------------- /docs/assets/3rd_party/google_bigquery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/3rd_party/google_bigquery.png -------------------------------------------------------------------------------- /docs/assets/3rd_party/google_drive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/3rd_party/google_drive.png -------------------------------------------------------------------------------- /docs/assets/3rd_party/http.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/3rd_party/http.png -------------------------------------------------------------------------------- /docs/assets/3rd_party/huggingface.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/3rd_party/huggingface.png -------------------------------------------------------------------------------- /docs/assets/3rd_party/llamaindex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/3rd_party/llamaindex.png -------------------------------------------------------------------------------- /docs/assets/3rd_party/llm_whisperer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/3rd_party/llm_whisperer.png -------------------------------------------------------------------------------- /docs/assets/3rd_party/mariadb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/3rd_party/mariadb.png -------------------------------------------------------------------------------- /docs/assets/3rd_party/milvus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/3rd_party/milvus.png -------------------------------------------------------------------------------- /docs/assets/3rd_party/minio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/3rd_party/minio.png -------------------------------------------------------------------------------- /docs/assets/3rd_party/mistral_ai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/3rd_party/mistral_ai.png -------------------------------------------------------------------------------- /docs/assets/3rd_party/ms_sql.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/3rd_party/ms_sql.png -------------------------------------------------------------------------------- /docs/assets/3rd_party/mysql.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/3rd_party/mysql.png -------------------------------------------------------------------------------- /docs/assets/3rd_party/ollama.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/3rd_party/ollama.png -------------------------------------------------------------------------------- /docs/assets/3rd_party/openai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/3rd_party/openai.png -------------------------------------------------------------------------------- /docs/assets/3rd_party/oracle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/3rd_party/oracle.png -------------------------------------------------------------------------------- /docs/assets/3rd_party/palm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/3rd_party/palm.png -------------------------------------------------------------------------------- /docs/assets/3rd_party/pinecone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/3rd_party/pinecone.png -------------------------------------------------------------------------------- /docs/assets/3rd_party/postgres.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/3rd_party/postgres.png -------------------------------------------------------------------------------- /docs/assets/3rd_party/qdrant.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/3rd_party/qdrant.png -------------------------------------------------------------------------------- /docs/assets/3rd_party/replicate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/3rd_party/replicate.png -------------------------------------------------------------------------------- /docs/assets/3rd_party/s3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/3rd_party/s3.png -------------------------------------------------------------------------------- /docs/assets/3rd_party/sftp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/3rd_party/sftp.png -------------------------------------------------------------------------------- /docs/assets/3rd_party/snowflake.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/3rd_party/snowflake.png -------------------------------------------------------------------------------- /docs/assets/3rd_party/supabase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/3rd_party/supabase.png -------------------------------------------------------------------------------- /docs/assets/3rd_party/unstructured_io.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/3rd_party/unstructured_io.png -------------------------------------------------------------------------------- /docs/assets/3rd_party/vertex_ai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/3rd_party/vertex_ai.png -------------------------------------------------------------------------------- /docs/assets/3rd_party/weaviate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/3rd_party/weaviate.png -------------------------------------------------------------------------------- /docs/assets/Using_Unstract.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/Using_Unstract.png -------------------------------------------------------------------------------- /docs/assets/prompt_studio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/prompt_studio.png -------------------------------------------------------------------------------- /docs/assets/unstract_u_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/docs/assets/unstract_u_logo.png -------------------------------------------------------------------------------- /frontend/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development 18 | .env.development.local 19 | .env.test.local 20 | .env.production.local 21 | 22 | npm-debug.log* 23 | yarn-debug.log* 24 | yarn-error.log* 25 | -------------------------------------------------------------------------------- /frontend/default.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | server_name frontend.unstract.localhost; 4 | root /usr/share/nginx/html; 5 | index index.html; 6 | 7 | # SPA routing - redirect all requests to index.html 8 | location / { 9 | try_files $uri $uri/ /index.html; 10 | } 11 | 12 | # Serve static files 13 | location /static/ { 14 | alias /usr/share/nginx/html/static/; 15 | expires 30d; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /frontend/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/favicon.ico -------------------------------------------------------------------------------- /frontend/public/icons/adapter-icons/Anthropic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/adapter-icons/Anthropic.png -------------------------------------------------------------------------------- /frontend/public/icons/adapter-icons/AzureopenAI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/adapter-icons/AzureopenAI.png -------------------------------------------------------------------------------- /frontend/public/icons/adapter-icons/Bedrock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/adapter-icons/Bedrock.png -------------------------------------------------------------------------------- /frontend/public/icons/adapter-icons/GoogleDocumentAI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/adapter-icons/GoogleDocumentAI.png -------------------------------------------------------------------------------- /frontend/public/icons/adapter-icons/LLMWhisperer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/adapter-icons/LLMWhisperer.png -------------------------------------------------------------------------------- /frontend/public/icons/adapter-icons/LLMWhispererV2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/adapter-icons/LLMWhispererV2.png -------------------------------------------------------------------------------- /frontend/public/icons/adapter-icons/Milvus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/adapter-icons/Milvus.png -------------------------------------------------------------------------------- /frontend/public/icons/adapter-icons/Mistral AI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/adapter-icons/Mistral AI.png -------------------------------------------------------------------------------- /frontend/public/icons/adapter-icons/OpenAI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/adapter-icons/OpenAI.png -------------------------------------------------------------------------------- /frontend/public/icons/adapter-icons/PaLM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/adapter-icons/PaLM.png -------------------------------------------------------------------------------- /frontend/public/icons/adapter-icons/Replicate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/adapter-icons/Replicate.png -------------------------------------------------------------------------------- /frontend/public/icons/adapter-icons/UnstructuredIO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/adapter-icons/UnstructuredIO.png -------------------------------------------------------------------------------- /frontend/public/icons/adapter-icons/VertexAI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/adapter-icons/VertexAI.png -------------------------------------------------------------------------------- /frontend/public/icons/adapter-icons/Weaviate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/adapter-icons/Weaviate.png -------------------------------------------------------------------------------- /frontend/public/icons/adapter-icons/anyscale.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/adapter-icons/anyscale.png -------------------------------------------------------------------------------- /frontend/public/icons/adapter-icons/huggingface.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/adapter-icons/huggingface.png -------------------------------------------------------------------------------- /frontend/public/icons/adapter-icons/llama-parse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/adapter-icons/llama-parse.png -------------------------------------------------------------------------------- /frontend/public/icons/adapter-icons/noOpEmbedding.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/adapter-icons/noOpEmbedding.png -------------------------------------------------------------------------------- /frontend/public/icons/adapter-icons/noOpLlm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/adapter-icons/noOpLlm.png -------------------------------------------------------------------------------- /frontend/public/icons/adapter-icons/noOpVectorDb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/adapter-icons/noOpVectorDb.png -------------------------------------------------------------------------------- /frontend/public/icons/adapter-icons/noOpx2Text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/adapter-icons/noOpx2Text.png -------------------------------------------------------------------------------- /frontend/public/icons/adapter-icons/ollama.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/adapter-icons/ollama.png -------------------------------------------------------------------------------- /frontend/public/icons/adapter-icons/pinecone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/adapter-icons/pinecone.png -------------------------------------------------------------------------------- /frontend/public/icons/adapter-icons/postgres.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/adapter-icons/postgres.png -------------------------------------------------------------------------------- /frontend/public/icons/adapter-icons/qdrant.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/adapter-icons/qdrant.png -------------------------------------------------------------------------------- /frontend/public/icons/adapter-icons/supabase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/adapter-icons/supabase.png -------------------------------------------------------------------------------- /frontend/public/icons/connector-icons/Bigquery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/connector-icons/Bigquery.png -------------------------------------------------------------------------------- /frontend/public/icons/connector-icons/Box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/connector-icons/Box.png -------------------------------------------------------------------------------- /frontend/public/icons/connector-icons/Dropbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/connector-icons/Dropbox.png -------------------------------------------------------------------------------- /frontend/public/icons/connector-icons/Google Drive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/connector-icons/Google Drive.png -------------------------------------------------------------------------------- /frontend/public/icons/connector-icons/MSSQL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/connector-icons/MSSQL.png -------------------------------------------------------------------------------- /frontend/public/icons/connector-icons/MariaDB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/connector-icons/MariaDB.png -------------------------------------------------------------------------------- /frontend/public/icons/connector-icons/MySql.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/connector-icons/MySql.png -------------------------------------------------------------------------------- /frontend/public/icons/connector-icons/Oracle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/connector-icons/Oracle.png -------------------------------------------------------------------------------- /frontend/public/icons/connector-icons/Postgresql.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/connector-icons/Postgresql.png -------------------------------------------------------------------------------- /frontend/public/icons/connector-icons/Redis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/connector-icons/Redis.png -------------------------------------------------------------------------------- /frontend/public/icons/connector-icons/Redshift.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/connector-icons/Redshift.png -------------------------------------------------------------------------------- /frontend/public/icons/connector-icons/S3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/connector-icons/S3.png -------------------------------------------------------------------------------- /frontend/public/icons/connector-icons/SFTP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/connector-icons/SFTP.png -------------------------------------------------------------------------------- /frontend/public/icons/connector-icons/Snowflake.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/connector-icons/Snowflake.png -------------------------------------------------------------------------------- /frontend/public/icons/connector-icons/Unstract Storage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/connector-icons/Unstract Storage.png -------------------------------------------------------------------------------- /frontend/public/icons/connector-icons/azure_blob_storage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/connector-icons/azure_blob_storage.png -------------------------------------------------------------------------------- /frontend/public/icons/connector-icons/google_cloud_storage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/public/icons/connector-icons/google_cloud_storage.png -------------------------------------------------------------------------------- /frontend/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "unstract", 3 | "name": "Unstract", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | } 10 | ], 11 | "start_url": ".", 12 | "display": "standalone", 13 | "theme_color": "#000000", 14 | "background_color": "#ffffff" 15 | } 16 | -------------------------------------------------------------------------------- /frontend/sample.env: -------------------------------------------------------------------------------- 1 | REACT_APP_BACKEND_URL=http://localhost:8000 2 | -------------------------------------------------------------------------------- /frontend/src/PostHogPageviewTracker.js: -------------------------------------------------------------------------------- 1 | import { usePostHog } from "posthog-js/react"; 2 | import { useEffect } from "react"; 3 | import { useLocation } from "react-router-dom"; 4 | 5 | const PostHogPageviewTracker = () => { 6 | const location = useLocation(); 7 | const posthog = usePostHog(); 8 | 9 | useEffect(() => { 10 | if (posthog) { 11 | posthog.capture("$pageview"); 12 | } 13 | }, [location, posthog]); 14 | 15 | return null; 16 | }; 17 | 18 | export default PostHogPageviewTracker; 19 | -------------------------------------------------------------------------------- /frontend/src/assets/assertion.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /frontend/src/assets/coming-soon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/src/assets/coming-soon.png -------------------------------------------------------------------------------- /frontend/src/assets/document.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /frontend/src/assets/etl.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /frontend/src/assets/folder.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /frontend/src/assets/landing_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/src/assets/landing_bg.png -------------------------------------------------------------------------------- /frontend/src/assets/loginPageSS.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/src/assets/loginPageSS.webp -------------------------------------------------------------------------------- /frontend/src/assets/promptStudioOnboarding/LeftBanner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/src/assets/promptStudioOnboarding/LeftBanner.png -------------------------------------------------------------------------------- /frontend/src/assets/steps.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /frontend/src/components/agency/actions/Actions.css: -------------------------------------------------------------------------------- 1 | /* Styles for Actions */ 2 | 3 | .actions-container { 4 | display: flex; 5 | justify-content: space-between; 6 | /* Space between the buttons and the status bar */ 7 | align-items: center; 8 | /* Vertically center align the status bar */ 9 | } 10 | 11 | .status-bar { 12 | flex-grow: 1; 13 | /* Allow the status bar to expand and fill the available space */ 14 | text-align: right; 15 | /* Align text to the right within the status bar */ 16 | } 17 | 18 | .step-icon { 19 | opacity: 0.60; 20 | image-rendering: pixelated; 21 | } 22 | -------------------------------------------------------------------------------- /frontend/src/components/agency/display-logs/DisplayLogs.css: -------------------------------------------------------------------------------- 1 | /* Styles for DisplayLogs */ 2 | 3 | .tool-logs { 4 | height: 100%; 5 | overflow-y: auto; 6 | } 7 | 8 | .display-logs-col-first { 9 | font-size: 12px; 10 | } 11 | 12 | .display-logs-col { 13 | font-size: 12px; 14 | padding-left: 5px; 15 | } 16 | -------------------------------------------------------------------------------- /frontend/src/components/agency/ds-settings-card/DsSettingsCard.css: -------------------------------------------------------------------------------- 1 | .ds-set-card-col3 { 2 | z-index: 10; 3 | } 4 | 5 | .ds-set-card-col2 { 6 | z-index: 20; 7 | } 8 | -------------------------------------------------------------------------------- /frontend/src/components/agency/list-of-connectors/ListOfConnectors.css: -------------------------------------------------------------------------------- 1 | .coming-soon-img { 2 | position: absolute; 3 | top: 0; 4 | right: 0; 5 | width: 40px; 6 | height: 40px; 7 | } 8 | 9 | .coming-soon-container { 10 | position: relative; 11 | display: inline-block; 12 | width: 100%; 13 | } 14 | -------------------------------------------------------------------------------- /frontend/src/components/agency/list-of-tools/ListOfTools.css: -------------------------------------------------------------------------------- 1 | /* Styles for ListOfTools */ 2 | 3 | .wf-list-of-tools-layout { 4 | padding-bottom: 10px; 5 | } 6 | -------------------------------------------------------------------------------- /frontend/src/components/agency/logs-label/LogsLabel.css: -------------------------------------------------------------------------------- 1 | .pl-5 { 2 | padding-left: 5px; 3 | } 4 | 5 | .logs-label-row { 6 | padding: 0px; 7 | flex: none; 8 | } 9 | 10 | .logs-label-col { 11 | border-right: 1px solid #C9C9C9; 12 | } 13 | -------------------------------------------------------------------------------- /frontend/src/components/agency/markdown-renderer/MarkdownRenderer.css: -------------------------------------------------------------------------------- 1 | /* Styles for MarkdownRenderer */ 2 | -------------------------------------------------------------------------------- /frontend/src/components/agency/prompt/Prompt.css: -------------------------------------------------------------------------------- 1 | /* Styles for Prompt */ 2 | 3 | .wf-prompt-btn { 4 | margin-top: 5px; 5 | } 6 | 7 | .wf-prompt-textarea-header { 8 | display: flex; 9 | justify-content: space-between; 10 | margin-bottom: 5px; 11 | } 12 | 13 | .wf-prompt-textarea-header > .edit-btn { 14 | text-align: right; 15 | } 16 | -------------------------------------------------------------------------------- /frontend/src/components/agency/side-panel/SidePanel.css: -------------------------------------------------------------------------------- 1 | /* Styles for SidePanel */ 2 | 3 | .sidepanel-layout { 4 | padding: 0px 16px; 5 | height: 100%; 6 | display: flex; 7 | flex-direction: column; 8 | padding-bottom: 10px; 9 | } 10 | 11 | .sidepanel-content { 12 | flex: 1; 13 | overflow-y: auto; 14 | } 15 | -------------------------------------------------------------------------------- /frontend/src/components/agency/tool-icon/ToolIcon.css: -------------------------------------------------------------------------------- 1 | /* Styles for ToolIcon */ 2 | 3 | .tool-icon-border { 4 | border-radius: 5px; 5 | border: 1px solid #FFD2DB; 6 | padding: 5px; 7 | } 8 | -------------------------------------------------------------------------------- /frontend/src/components/agency/tool-settings/ToolSettings.css: -------------------------------------------------------------------------------- 1 | /* Styles for ToolSettings */ 2 | 3 | .tool-settings-layout { 4 | padding: 15px 0px; 5 | } 6 | 7 | .tool-settings-submit-btn { 8 | padding: 10px 0px; 9 | } 10 | -------------------------------------------------------------------------------- /frontend/src/components/agency/tools/Tools.css: -------------------------------------------------------------------------------- 1 | /* Styles for Tools */ 2 | 3 | .wf-tools-layout { 4 | height: 100%; 5 | } 6 | 7 | .wf-tools-search .icon { 8 | color: #00000040; 9 | } 10 | 11 | .wf-tools-list { 12 | margin-top: 8px; 13 | } 14 | -------------------------------------------------------------------------------- /frontend/src/components/agency/workflow-execution-layout/WorkflowExecutionMain.css: -------------------------------------------------------------------------------- 1 | /* Styles for WorkflowExecutionLayout */ 2 | 3 | .wf-exec-main-layout { 4 | height: 100%; 5 | overflow-y: hidden; 6 | } 7 | 8 | .wf-exec-main-col-1 { 9 | height: 100%; 10 | display: flex; 11 | flex-direction: column; 12 | padding-right: 6px; 13 | overflow-y: hidden; 14 | } 15 | 16 | .wf-exec-main-col-2 { 17 | height: 100%; 18 | padding-left: 6px; 19 | } 20 | 21 | .wf-exec-main-prompt { 22 | padding-bottom: 6px; 23 | } 24 | 25 | .wf-exec-main-steps { 26 | flex: 1; 27 | overflow: hidden; 28 | } 29 | -------------------------------------------------------------------------------- /frontend/src/components/agency/workflow-execution/WorkflowExecution.css: -------------------------------------------------------------------------------- 1 | /* Styles for WorkflowExecution */ 2 | 3 | .wf-exec-layout { 4 | height: 100%; 5 | display: flex; 6 | flex-direction: column; 7 | padding: 12px; 8 | } 9 | 10 | .wf-exec-heading { 11 | margin-bottom: 6px; 12 | } 13 | 14 | .wf-exec-heading-typo { 15 | font-size: 18px; 16 | } 17 | 18 | .wf-exec-main { 19 | flex: 1; 20 | overflow-y: hidden; 21 | } 22 | -------------------------------------------------------------------------------- /frontend/src/components/agency/workflow-execution/workflow_actions.js: -------------------------------------------------------------------------------- 1 | const Actions = { 2 | START: "START", 3 | NEXT: "NEXT", 4 | STOP: "STOP", 5 | CONTINUE: "CONTINUE", 6 | }; 7 | 8 | export default Actions; 9 | -------------------------------------------------------------------------------- /frontend/src/components/custom-tools/add-custom-tool-form-modal/AddCustomToolFormModal.css: -------------------------------------------------------------------------------- 1 | /* Styles for AddCustomToolForm */ 2 | 3 | .add-cus-tool-header { 4 | font-size: 16px; 5 | font-weight: bold; 6 | } 7 | 8 | .add-cus-tool-gap { 9 | margin-bottom: 16px; 10 | } 11 | 12 | .emoji-modal .ant-modal-content { 13 | padding: 0; 14 | width: fit-content; 15 | } 16 | -------------------------------------------------------------------------------- /frontend/src/components/custom-tools/add-llm-profile/AddLlmProfile.css: -------------------------------------------------------------------------------- 1 | /* Styles for AddLlmProfile */ 2 | 3 | .add-llm-profile-row { 4 | width: 100%; 5 | } 6 | -------------------------------------------------------------------------------- /frontend/src/components/custom-tools/custom-synonyms/CustomSynonyms.css: -------------------------------------------------------------------------------- 1 | /* Styles for CustomSynonyms */ 2 | 3 | .cus-syn-select { 4 | width: 100%; 5 | border: none; 6 | } 7 | 8 | .cus-syn-del { 9 | font-size: 10px; 10 | } 11 | -------------------------------------------------------------------------------- /frontend/src/components/custom-tools/document-parser/DocumentParser.css: -------------------------------------------------------------------------------- 1 | /* Styles for DocumentParser */ 2 | 3 | .doc-parser-layout { 4 | height: 100%; 5 | } 6 | 7 | .doc-parser-pad-top { 8 | padding-top: 6px; 9 | } 10 | 11 | .doc-parser-pad-bottom { 12 | padding-bottom: 6px; 13 | } 14 | -------------------------------------------------------------------------------- /frontend/src/components/custom-tools/edit-tool-info/EditToolInfo.css: -------------------------------------------------------------------------------- 1 | /* Styles for EditToolInfo */ 2 | 3 | .custom-space { 4 | width: 100%; 5 | } 6 | 7 | .edit-tool-info-helper-text { 8 | font-size: 12px; 9 | } 10 | -------------------------------------------------------------------------------- /frontend/src/components/custom-tools/editable-text/EditableText.css: -------------------------------------------------------------------------------- 1 | /* Styles for EditableText */ 2 | 3 | .editable-text { 4 | width: 100%; 5 | } 6 | 7 | .edit-text-display { 8 | width: 100%; 9 | padding: 0px 6px; 10 | border: 1px solid transparent; 11 | border-radius: 4px; 12 | } 13 | 14 | .edit-text-display-hover:hover { 15 | border: 1px solid #bdbdbd; 16 | border-radius: 4px; 17 | } 18 | 19 | .input-header-text { 20 | font-weight: bold; 21 | font-size: 20px; 22 | } 23 | -------------------------------------------------------------------------------- /frontend/src/components/custom-tools/export-tool/ExportTool.css: -------------------------------------------------------------------------------- 1 | .shared-user-avatar { 2 | background-color: #00a6ed; 3 | margin-right: 15px; 4 | } 5 | 6 | .export-username { 7 | font-weight: 500; 8 | } 9 | 10 | .export-permission-search { 11 | width: 100%; 12 | } 13 | 14 | .export-per-radio { 15 | margin: 10px 5px; 16 | } 17 | -------------------------------------------------------------------------------- /frontend/src/components/custom-tools/footer-layout/FooterLayout.css: -------------------------------------------------------------------------------- 1 | /* Styles for FooterLayout */ 2 | 3 | .tool-ide-main-footer-layout { 4 | padding: 8px 14px; 5 | } 6 | -------------------------------------------------------------------------------- /frontend/src/components/custom-tools/footer-layout/FooterLayout.jsx: -------------------------------------------------------------------------------- 1 | import PropTypes from "prop-types"; 2 | 3 | import "./FooterLayout.css"; 4 | 5 | function FooterLayout({ children }) { 6 | return ( 7 |
8 | {children} 9 |
10 | ); 11 | } 12 | 13 | FooterLayout.propTypes = { 14 | children: PropTypes.any.isRequired, 15 | }; 16 | 17 | export { FooterLayout }; 18 | -------------------------------------------------------------------------------- /frontend/src/components/custom-tools/footer/Footer.css: -------------------------------------------------------------------------------- 1 | /* Styles for ToolsMainFooter */ 2 | 3 | .tool-ide-main-footer { 4 | display: flex; 5 | justify-content: space-between; 6 | margin-left: auto; 7 | } 8 | -------------------------------------------------------------------------------- /frontend/src/components/custom-tools/generate-index/GenerateIndex.css: -------------------------------------------------------------------------------- 1 | /* Styles for GenerateIndex */ 2 | 3 | .gen-index-text { 4 | font-size: 16px; 5 | } 6 | 7 | .gen-index-progress { 8 | color: #FAAD14; 9 | } 10 | 11 | .gen-index-success { 12 | color: #52C41A; 13 | } 14 | 15 | .gen-index-fail { 16 | color: #ff4242; 17 | } 18 | 19 | .gen-index-icon { 20 | font-size: 24px; 21 | } 22 | -------------------------------------------------------------------------------- /frontend/src/components/custom-tools/header-title/HeaderTitle.css: -------------------------------------------------------------------------------- 1 | .custom-tools-name { 2 | padding: 0px 8px; 3 | white-space: nowrap; 4 | overflow: hidden; 5 | text-overflow: ellipsis; 6 | margin-left:auto; 7 | } 8 | .custom-tools-header { 9 | display: flex; 10 | justify-content: space-between; 11 | margin-right: auto; 12 | } 13 | -------------------------------------------------------------------------------- /frontend/src/components/custom-tools/manage-docs-modal/ManageDocsModal.css: -------------------------------------------------------------------------------- 1 | /* Styles for ManageDocsModal */ 2 | 3 | .manage-docs-upload { 4 | background-color: #0000000A; 5 | } 6 | 7 | .manage-docs-items-list { 8 | max-height: 400px; 9 | width: 100%; 10 | overflow-y: auto; 11 | } 12 | 13 | .manage-docs-item { 14 | display: flex; 15 | justify-content: space-between; 16 | } 17 | 18 | .manage-docs-div { 19 | margin: 0; 20 | } 21 | -------------------------------------------------------------------------------- /frontend/src/components/custom-tools/manage-llm-profiles/ManageLlmProfiles.css: -------------------------------------------------------------------------------- 1 | /* Styles for ManageLlmProfiles */ 2 | 3 | .manage-llm-pro-icon { 4 | font-size: 10px; 5 | } 6 | -------------------------------------------------------------------------------- /frontend/src/components/custom-tools/notes-card/NotesCard.css: -------------------------------------------------------------------------------- 1 | /* Styles for NotesCard */ 2 | 3 | .tool-ide-notes-card { 4 | border: 1px solid #D9D9D9; 5 | background-color: #E0E5EB; 6 | } 7 | 8 | .tool-ide-notes-card .ant-card-body { 9 | padding: 12px !important; 10 | } 11 | 12 | .tool-ide-notes-card .delete-icon { 13 | font-size: 12px; 14 | color: #575859; 15 | } 16 | -------------------------------------------------------------------------------- /frontend/src/components/custom-tools/output-for-doc-modal/OutputForDocModal.css: -------------------------------------------------------------------------------- 1 | /* Styles for OutputForDocModal */ 2 | 3 | .output-doc-layout { 4 | height: 600px; 5 | overflow: hidden; 6 | display: flex; 7 | flex-direction: column; 8 | } 9 | 10 | .output-doc-table { 11 | flex: 1; 12 | overflow-y: auto; 13 | } 14 | 15 | .output-doc-gap { 16 | margin-bottom: 8px; 17 | } 18 | -------------------------------------------------------------------------------- /frontend/src/components/custom-tools/pdf-viewer/Highlight.css: -------------------------------------------------------------------------------- 1 | .pdf-container { 2 | position: relative; 3 | } 4 | 5 | .highlight { 6 | position: absolute; 7 | background-color: yellow; 8 | opacity: 0.5; 9 | } 10 | -------------------------------------------------------------------------------- /frontend/src/components/custom-tools/pre-and-post-amble-modal/DefaultPrompts.json: -------------------------------------------------------------------------------- 1 | { 2 | "preamble": "Your ability to extract and summarize this context accurately is essential for effective analysis. Pay close attention to the context's language, structure, and any cross-references to ensure a comprehensive and precise extraction of information. Do not use prior knowledge or information from outside the context to answer the questions. Only use the information provided in the context to answer the questions.", 3 | "postamble": "Do not include any explanation in the reply. Only include the extracted information in the reply." 4 | } 5 | -------------------------------------------------------------------------------- /frontend/src/components/custom-tools/pre-and-post-amble-modal/PreAndPostAmbleModal.css: -------------------------------------------------------------------------------- 1 | /* Styles for PreAndPostAmbleModal */ 2 | 3 | .pre-post-amble-modal .ant-modal-content { 4 | padding: 0px; 5 | } 6 | 7 | .pre-post-amble-body { 8 | padding: 20px; 9 | } 10 | 11 | .pre-post-amble-body-space { 12 | width: 100%; 13 | } 14 | 15 | .pre-post-amble-title { 16 | font-size: 16px; 17 | } 18 | 19 | .pre-post-amble-footer { 20 | background-color: #F6F8FB; 21 | border-radius: 0px 0px 10px 10px; 22 | padding: 16px; 23 | } 24 | -------------------------------------------------------------------------------- /frontend/src/components/custom-tools/profile-info-bar/ProfileInfoBar.css: -------------------------------------------------------------------------------- 1 | .profile-info-bar { 2 | margin-bottom: 10px; 3 | } 4 | -------------------------------------------------------------------------------- /frontend/src/components/custom-tools/prompt-card/PromptRunTimer.jsx: -------------------------------------------------------------------------------- 1 | import { memo } from "react"; 2 | import PropTypes from "prop-types"; 3 | 4 | const PromptRunTimer = memo(({ timer, isLoading }) => { 5 | if (!timer || isLoading) { 6 | return "Time: 0s"; 7 | } 8 | 9 | return `Time: ${timer}s`; 10 | }); 11 | 12 | PromptRunTimer.displayName = "PromptRunTimer"; 13 | 14 | PromptRunTimer.propTypes = { 15 | timer: PropTypes.number, 16 | isLoading: PropTypes.bool, 17 | }; 18 | 19 | export { PromptRunTimer }; 20 | -------------------------------------------------------------------------------- /frontend/src/components/custom-tools/prompt-card/constants.js: -------------------------------------------------------------------------------- 1 | const LINE_ITEM_ENFORCE_TYPE = "line-item"; 2 | const TABLE = "table"; 3 | 4 | const handleUpdateStatus = (isUpdate, promptId, value, setUpdateStatus) => { 5 | if (!isUpdate) { 6 | return; 7 | } 8 | setUpdateStatus({ 9 | promptId: promptId, 10 | status: value, 11 | }); 12 | }; 13 | 14 | export { handleUpdateStatus, TABLE, LINE_ITEM_ENFORCE_TYPE }; 15 | -------------------------------------------------------------------------------- /frontend/src/components/custom-tools/prompts-reorder/PromptsReorder.css: -------------------------------------------------------------------------------- 1 | .prompts-container { 2 | max-height: 80vh; 3 | width: 100%; 4 | overflow-y: auto; 5 | } 6 | 7 | .draggable-prompt { 8 | cursor: grab; 9 | transition: transform 0.2s ease-in-out; 10 | } 11 | 12 | .draggable-prompt.dragging { 13 | opacity: 0.5; 14 | } 15 | -------------------------------------------------------------------------------- /frontend/src/components/custom-tools/prompts-reorder/PromptsReorderTitle.jsx: -------------------------------------------------------------------------------- 1 | import { InfoCircleOutlined } from "@ant-design/icons"; 2 | import { Space, Tooltip, Typography } from "antd"; 3 | 4 | function PromptsReorderTitle() { 5 | return ( 6 | 7 | Reorder Prompts 8 | 9 | 10 | 11 | 12 | ); 13 | } 14 | 15 | export { PromptsReorderTitle }; 16 | -------------------------------------------------------------------------------- /frontend/src/components/custom-tools/settings-modal/SettingsModal.css: -------------------------------------------------------------------------------- 1 | /* Styles for SettingsModal */ 2 | 3 | .settings-body-pad-top { 4 | padding-top: 12px; 5 | overflow-y: auto; 6 | } 7 | -------------------------------------------------------------------------------- /frontend/src/components/custom-tools/text-viewer-pre/TextViewerPre.jsx: -------------------------------------------------------------------------------- 1 | import PropTypes from "prop-types"; 2 | 3 | function TextViewerPre({ text }) { 4 | return ( 5 |
6 |
{text}
7 |
8 | ); 9 | } 10 | 11 | TextViewerPre.propTypes = { 12 | text: PropTypes.string, 13 | }; 14 | 15 | export { TextViewerPre }; 16 | -------------------------------------------------------------------------------- /frontend/src/components/custom-tools/tools-main/ToolsMain.css: -------------------------------------------------------------------------------- 1 | /* Styles for ToolsMain */ 2 | 3 | .tools-main-layout { 4 | display: flex; 5 | flex-direction: column; 6 | height: 100%; 7 | overflow-y: hidden; 8 | } 9 | 10 | .tools-main-tabs { 11 | padding: 4px 14px; 12 | } 13 | 14 | .tools-main-tabs .ant-tabs-nav { 15 | margin: 0px; 16 | } 17 | 18 | .tools-main-body { 19 | flex: 1; 20 | padding: 0px 12px; 21 | overflow-y: auto; 22 | } 23 | 24 | .tools-main-footer { 25 | border-top: 1px #D9D9D9 solid; 26 | } 27 | -------------------------------------------------------------------------------- /frontend/src/components/custom-tools/view-tools/ViewTools.css: -------------------------------------------------------------------------------- 1 | /* Styles for ViewTools */ 2 | -------------------------------------------------------------------------------- /frontend/src/components/deployments/display-code/CodeSnippet.css: -------------------------------------------------------------------------------- 1 | .codeSnippet { 2 | height: 300px; 3 | border: 1px solid #ECEFF3; 4 | overflow-y: auto; 5 | } 6 | -------------------------------------------------------------------------------- /frontend/src/components/deployments/display-code/CodeSnippet.jsx: -------------------------------------------------------------------------------- 1 | import Prism from "prismjs"; 2 | import "prismjs/themes/prism.css"; 3 | import PropTypes from "prop-types"; 4 | import { useEffect } from "react"; 5 | 6 | import "./CodeSnippet.css"; 7 | 8 | const CodeSnippet = ({ code }) => { 9 | useEffect(() => { 10 | Prism.highlightAll(); 11 | }, [code]); 12 | return ( 13 |
14 |       {code}
15 |     
16 | ); 17 | }; 18 | 19 | CodeSnippet.propTypes = { 20 | code: PropTypes.string.isRequired, 21 | }; 22 | 23 | export default CodeSnippet; 24 | -------------------------------------------------------------------------------- /frontend/src/components/deployments/display-code/DisplayCode.css: -------------------------------------------------------------------------------- 1 | .codeActions .copyCodeBtn { 2 | background: transparent; 3 | border: none; 4 | cursor: pointer; 5 | font-size: 1.3em; 6 | } 7 | 8 | .codeActions .copyCodeBtn:hover { 9 | background: fixed; 10 | } 11 | 12 | .codeActions .codeLanguage { 13 | width: 150px; 14 | margin-right: 10px; 15 | } 16 | -------------------------------------------------------------------------------- /frontend/src/components/deployments/manage-keys/ManageKeys.css: -------------------------------------------------------------------------------- 1 | .keys-table { 2 | height: 350px; 3 | overflow-y: auto; 4 | } 5 | 6 | .new-key-btn { 7 | margin-top: 10px; 8 | margin-bottom: 10px; 9 | } 10 | 11 | .cursorPointer { 12 | cursor: pointer; 13 | } 14 | 15 | .actions { 16 | margin-right: 10px; 17 | } 18 | -------------------------------------------------------------------------------- /frontend/src/components/error/NotFound/NotFound.css: -------------------------------------------------------------------------------- 1 | /* Styles for Not Found */ 2 | -------------------------------------------------------------------------------- /frontend/src/components/error/NotFound/NotFound.jsx: -------------------------------------------------------------------------------- 1 | import { Button, Result } from "antd"; 2 | import { useNavigate } from "react-router-dom"; 3 | 4 | function NotFound() { 5 | const navigate = useNavigate(); 6 | return ( 7 | navigate(-1)}> 13 | Go Back 14 | 15 | } 16 | /> 17 | ); 18 | } 19 | 20 | export { NotFound }; 21 | -------------------------------------------------------------------------------- /frontend/src/components/error/UnAuthorized/Unauthorized.css: -------------------------------------------------------------------------------- 1 | .unauth-container{ 2 | text-align: center; 3 | padding: 20px; 4 | } 5 | 6 | .unauth-text{ 7 | color:#666; 8 | font-size: 24px; 9 | } 10 | -------------------------------------------------------------------------------- /frontend/src/components/error/UnAuthorized/Unauthorized.jsx: -------------------------------------------------------------------------------- 1 | import { Typography } from "antd"; 2 | 3 | import { IslandLayout } from "../../../layouts/island-layout/IslandLayout.jsx"; 4 | import "./Unauthorized.css"; 5 | 6 | function Unauthorized() { 7 | return ( 8 | 9 |
10 | 11 | Sorry, you dont have access to this page. Please contact the 12 | administrator for assistance. 13 | 14 |
15 |
16 | ); 17 | } 18 | 19 | export { Unauthorized }; 20 | -------------------------------------------------------------------------------- /frontend/src/components/input-output/add-source-modal/AddSourceModa.css: -------------------------------------------------------------------------------- 1 | /* Styles for AddSourceModal */ 2 | -------------------------------------------------------------------------------- /frontend/src/components/input-output/add-source/AddSource.css: -------------------------------------------------------------------------------- 1 | /* Styles for AddSource */ 2 | -------------------------------------------------------------------------------- /frontend/src/components/input-output/configure-ds/ConfigureDs.css: -------------------------------------------------------------------------------- 1 | /* Styles for ConfigureDs */ 2 | 3 | .config-layout { 4 | width: 100%; 5 | padding-bottom: 15px; 6 | } 7 | 8 | .config-row { 9 | margin-top: 10px; 10 | } 11 | 12 | .config-col1 { 13 | padding-right: 5px; 14 | } 15 | 16 | .config-col2 { 17 | padding-right: 5px; 18 | } 19 | 20 | .config-tc-btn { 21 | background-color: #4BB543 !important; 22 | } 23 | -------------------------------------------------------------------------------- /frontend/src/components/input-output/edit-ds-modal/EditDsModal.css: -------------------------------------------------------------------------------- 1 | /* Styles for EditDsModal */ 2 | 3 | .edit-ds-layout { 4 | max-height: 800px; 5 | overflow-y: scroll; 6 | margin-top: 10px; 7 | } 8 | 9 | .edit-ds-modal { 10 | width: 25% !important; 11 | } 12 | -------------------------------------------------------------------------------- /frontend/src/components/input-output/input-output/InputOutput.css: -------------------------------------------------------------------------------- 1 | .input-layout { 2 | height: 100%; 3 | } 4 | 5 | .input-sidebar { 6 | background-color: var(--page-bg-3); 7 | padding: 12px; 8 | } 9 | 10 | .input-main { 11 | padding: 12px; 12 | height: 100%; 13 | background-color: var(--white); 14 | } 15 | -------------------------------------------------------------------------------- /frontend/src/components/input-output/list-of-sources/ListOfSources.css: -------------------------------------------------------------------------------- 1 | /* Styles for ListOfAdapters */ 2 | 3 | .list-of-srcs { 4 | height: 600px; 5 | overflow-y: auto; 6 | overflow-x: hidden; 7 | } 8 | 9 | .list-of-srcs > .searchbox { 10 | max-width: 300px; 11 | } 12 | 13 | .list-of-srcs > .list { 14 | padding-top: 20px; 15 | } 16 | -------------------------------------------------------------------------------- /frontend/src/components/input-output/manage-files/ManageFiles.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zipstack/unstract/cccdfd5ddc9549f89797f8fafccdbc1b2c965f0a/frontend/src/components/input-output/manage-files/ManageFiles.css -------------------------------------------------------------------------------- /frontend/src/components/input-output/sidebar/Sidebar.css: -------------------------------------------------------------------------------- 1 | .sidebar-layout { 2 | margin: 5px; 3 | } 4 | 5 | .sidebar-menu { 6 | margin-top: 10px; 7 | background-color: transparent; 8 | } 9 | 10 | .sidebar-menu .ant-menu-item { 11 | padding: 5px !important; 12 | } 13 | 14 | .sidebar-menu .ant-menu-title-content { 15 | margin-left: 5px; 16 | } 17 | -------------------------------------------------------------------------------- /frontend/src/components/logging/detailed-logs/DetailedLogs.css: -------------------------------------------------------------------------------- 1 | .logging-card-title { 2 | font-weight: 600; 3 | font-size: 14px; 4 | } 5 | 6 | .logs-details-card { 7 | width: 250px; 8 | margin: 0; 9 | padding: 0; 10 | height: 60px; 11 | margin-right: 20px; 12 | } 13 | 14 | .logging-card-icons { 15 | margin: 0 12px; 16 | } 17 | 18 | .view-log-button { 19 | margin-right: 20px; 20 | } 21 | 22 | .column-filter-dropdown{ 23 | margin-bottom: 20px; 24 | } 25 | 26 | .search-container { 27 | padding: 8px; 28 | } 29 | 30 | .search-input { 31 | width: 188px; 32 | margin-bottom: 8px; 33 | display: block; 34 | } 35 | -------------------------------------------------------------------------------- /frontend/src/components/logging/log-modal/LogModal.css: -------------------------------------------------------------------------------- 1 | .clear-button{ 2 | margin-left: 50px; 3 | margin-top: 10px; 4 | } 5 | -------------------------------------------------------------------------------- /frontend/src/components/logging/logs-table/LogsTable.css: -------------------------------------------------------------------------------- 1 | .title-name-redirect{ 2 | word-break: break-all; 3 | } 4 | 5 | 6 | .gen-index-progress { 7 | color: #FAAD14; 8 | } 9 | 10 | .gen-index-success { 11 | color: #52C41A; 12 | } 13 | 14 | .gen-index-fail { 15 | color: #ff4242; 16 | } 17 | 18 | .status-container { 19 | display: inline-block; 20 | margin-right: 10px; 21 | } 22 | -------------------------------------------------------------------------------- /frontend/src/components/oauth-ds/google/GoogleOAuthButton.css: -------------------------------------------------------------------------------- 1 | /* Styles for GoogleOAuthButton */ 2 | 3 | .google-oauth-layout { 4 | margin-bottom: 20px; 5 | } 6 | -------------------------------------------------------------------------------- /frontend/src/components/oauth-ds/oauth-status/OAuthStatus.css: -------------------------------------------------------------------------------- 1 | /* Styles for OAuthStatus */ 2 | 3 | .oauth-status-layout { 4 | width: 100%; 5 | } 6 | 7 | .oauth-status-text { 8 | margin-top: 25px; 9 | font-size: 24px; 10 | font-weight: bold; 11 | } 12 | -------------------------------------------------------------------------------- /frontend/src/components/pipelines-or-deployments/etl-task-deploy/EtlTaskDeploy.css: -------------------------------------------------------------------------------- 1 | /* Styles for EtlTaskDeploy */ 2 | .ant-form .ant-form-item{ 3 | margin-bottom: 12px; 4 | } 5 | 6 | .cron-string-div { 7 | display: flex; 8 | } 9 | 10 | .cron-string-div .cron-string-input { 11 | width: 75%; 12 | } 13 | 14 | .cron-string-div .cron-string-btn { 15 | width: 20%; 16 | margin-left: 5%; 17 | } 18 | 19 | .cron-summary-div { 20 | border: solid 1px #cccccc; 21 | padding: 4px 8px; 22 | border-radius: 5px; 23 | } 24 | 25 | .summary-text { 26 | font-size: 10px; 27 | opacity: 0.6; 28 | } 29 | -------------------------------------------------------------------------------- /frontend/src/components/pipelines-or-deployments/log-modal/LogsModel.css: -------------------------------------------------------------------------------- 1 | .error { 2 | color: #FF0000; 3 | } 4 | 5 | .completed { 6 | color: #034e03; 7 | } 8 | 9 | .warning { 10 | color: #af6714; 11 | } 12 | 13 | table .ant-btn { 14 | padding: 0; 15 | } 16 | -------------------------------------------------------------------------------- /frontend/src/components/pipelines-or-deployments/pipelines/Pipelines.css: -------------------------------------------------------------------------------- 1 | .p-or-d-layout { 2 | background-color: var(--page-bg-2); 3 | height: 100%; 4 | display: flex; 5 | flex-direction: column; 6 | } 7 | -------------------------------------------------------------------------------- /frontend/src/components/profile/Profile.css: -------------------------------------------------------------------------------- 1 | .grey-body { 2 | background-color: var(--page-bg-2); 3 | height: 100%; 4 | padding: 14px; 5 | } 6 | 7 | .paper-layout { 8 | background-color: var(--white); 9 | height: 100%; 10 | padding: 14px; 11 | } 12 | 13 | .header-text { 14 | margin-bottom: 20px; 15 | } 16 | 17 | .header-text .typo-text { 18 | font-size: 18px; 19 | } 20 | -------------------------------------------------------------------------------- /frontend/src/components/rjsf-custom-widgets/array-field/ArrayField.css: -------------------------------------------------------------------------------- 1 | /* Styles for ArrayField */ 2 | 3 | .array-field-layout { 4 | margin-bottom: 10px; 5 | width: 100%; 6 | } 7 | 8 | .array-field-icon { 9 | margin-left: 8px; 10 | color: #5A5A5A; 11 | } 12 | 13 | .array-field-select { 14 | width: 100%; 15 | } 16 | -------------------------------------------------------------------------------- /frontend/src/components/rjsf-custom-widgets/checkbox-widget/CheckboxWidget.css: -------------------------------------------------------------------------------- 1 | .checkbox-widget-main { 2 | margin-bottom: 10px; 3 | } 4 | 5 | .checkbox-widget-info-icon { 6 | color: #5A5A5A; 7 | cursor: help; 8 | } 9 | -------------------------------------------------------------------------------- /frontend/src/components/rjsf-custom-widgets/hidden-widget/HiddenWidget.jsx: -------------------------------------------------------------------------------- 1 | import PropTypes from "prop-types"; 2 | 3 | import { RjsfWidgetLayout } from "../../../layouts/rjsf-widget-layout/RjsfWidgetLayout.jsx"; 4 | 5 | const HiddenWidget = ({ id, value, label }) => { 6 | return ( 7 | 8 | 9 | 10 | ); 11 | }; 12 | 13 | HiddenWidget.propTypes = { 14 | id: PropTypes.string.isRequired, 15 | value: PropTypes.any, 16 | label: PropTypes.string.isRequired, 17 | }; 18 | 19 | export { HiddenWidget }; 20 | -------------------------------------------------------------------------------- /frontend/src/components/settings/default-triad/DefaultTriad.css: -------------------------------------------------------------------------------- 1 | .triad-select { 2 | margin-top: 10px; 3 | } 4 | .form-width{ 5 | max-width: 400px; 6 | } 7 | -------------------------------------------------------------------------------- /frontend/src/components/settings/settings/Settings.css: -------------------------------------------------------------------------------- 1 | /* Styles for Settings */ 2 | 3 | .settings-bg-col { 4 | background-color: var(--page-bg-2); 5 | height: 100%; 6 | } 7 | 8 | .settings-layout { 9 | padding: 20px; 10 | } 11 | 12 | .settings-head { 13 | margin-bottom: 8px; 14 | } 15 | 16 | .settings-head-typo { 17 | font-size: 18px; 18 | font-weight: 600; 19 | } 20 | 21 | .settings-plt-typo { 22 | font-size: 14px; 23 | } 24 | -------------------------------------------------------------------------------- /frontend/src/components/settings/users/Users.css: -------------------------------------------------------------------------------- 1 | .user-bg-col { 2 | background-color: var(--page-bg-2); 3 | height: 100%; 4 | } 5 | 6 | .user-table{ 7 | padding: 15px; 8 | overflow-y: auto; 9 | } 10 | 11 | .user-reload-button{ 12 | font-size: 16px; 13 | } 14 | 15 | .delete-user-modal{ 16 | width: 400px; 17 | } 18 | -------------------------------------------------------------------------------- /frontend/src/components/tool-settings/list-of-items/ListOfItems.css: -------------------------------------------------------------------------------- 1 | /* Styles for ListOfItems */ 2 | 3 | .list-of-items-empty { 4 | height: 100%; 5 | display: flex; 6 | justify-content: center; 7 | align-items: center; 8 | } 9 | 10 | .cover-img .fit-cover { 11 | object-fit: cover; 12 | width: 100%; 13 | height: auto; 14 | } 15 | -------------------------------------------------------------------------------- /frontend/src/components/widgets/custom-button/CustomButton.css: -------------------------------------------------------------------------------- 1 | /* Styles for CustomButton */ 2 | 3 | .custom-button-primary { 4 | background-color: #092C4C; 5 | border-color: #092C4C; 6 | color: #FFFFFF; 7 | } 8 | 9 | .custom-button-primary:not([disabled]):hover { 10 | background-color: #0e4274 !important; 11 | border-color: #0e4274; 12 | color: #FFFFFF; 13 | } 14 | -------------------------------------------------------------------------------- /frontend/src/components/widgets/custom-button/CustomButton.jsx: -------------------------------------------------------------------------------- 1 | import { Button } from "antd"; 2 | import PropTypes from "prop-types"; 3 | 4 | import "./CustomButton.css"; 5 | 6 | function CustomButton({ ...props }) { 7 | const { type } = props; 8 | 9 | return ( 10 |