Commit graph

1,719 commits

Author SHA1 Message Date
Gabriel Luiz Freitas Almeida
77d91cd23a 🐛 fix(documentloaders.py): make 'metadata' field optional instead of required to allow empty values 2023-09-27 12:35:59 -03:00
Gabriel Luiz Freitas Almeida
d6dcfd5266 🐛 fix(chat.py): replace direct assignment with update_build_status function to update build status in cache_service dictionary
🔧 chore(utils.py): add update_build_status function to update build status in cache_service dictionary
2023-09-27 11:52:34 -03:00
anovazzi1
eaab405742 code format 2023-09-27 10:20:34 -03:00
Gabriel Luiz Freitas Almeida
3ca8891b32
📝 docs(async-api.mdx): update endpoint path for checking task status … (#972) 2023-09-27 09:17:33 -03:00
Gabriel Luiz Freitas Almeida
ede745c1dd 🐛 fix(custom_component.py): improve error message formatting for type hint error in build method
🐛 fix(logger.py): fix conditional statement for log_level configuration to properly handle None value
2023-09-27 08:54:11 -03:00
Gabriel Luiz Freitas Almeida
0b2b074e07 🔧 chore(logger.py): refactor configure function to improve readability and add support for configurable log level
🔒 chore(logger.py): add VALID_LOG_LEVELS constant to define valid log levels for better maintainability
2023-09-27 08:51:17 -03:00
Gabriel Luiz Freitas Almeida
0b535c54f5 🔧 chore(__main__.py): update Typer configuration to treat no arguments as help to improve usability
🔧 chore(__main__.py): update docstring for run() function to improve clarity
🔧 chore(__main__.py): update docstring for superuser() function to improve clarity
🔧 chore(__main__.py): update migration() function to default to test mode
🔧 chore(manager.py): remove unnecessary logging of database URL in run_migrations() function
🔧 chore(manager.py): add missing import statement for logger in check_celery_availability() function
🔧 chore(manager.py): update configure() function to be called in check_celery_availability() function
🔧 chore(logger.py): update configure() function to use environment variable for log level if available
🔧 chore(logger.py): update configure() function to use default log file location if not provided
2023-09-27 08:48:21 -03:00
Gabriel Luiz Freitas Almeida
5ec118cc6f 🐛 fix(custom_component.py): improve error message formatting for type hint error in build method
The error message for a type hint error in the build method was improved to provide clearer instructions. The traceback message was updated to suggest using PromptTemplate instead of Prompt type. This change improves the readability and usability of the error message.
2023-09-26 20:06:38 -03:00
Gabriel Luiz Freitas Almeida
af35ae315e 📝 docs(async-api.mdx): update endpoint path for checking task status to improve consistency and clarity
🐛 fix(endpoints.py): update endpoint path for checking task status to match the updated path in the documentation

🐛 fix(schemas.py): add TaskResponse schema to properly handle task response data

🐛 fix(locustfile.py): update endpoint path for polling task status to match the updated path in the endpoints

🐛 fix(test_endpoints.py): update helper function and test cases to use the new task response structure and endpoint path for polling task status
2023-09-26 19:34:50 -03:00
Gabriel Luiz Freitas Almeida
c8c01402ff 🐛 fix(custom_component.py): raise HTTPException when build method contains prompt type argument to improve error handling and provide more informative error message
🐛 fix(types.py): re-raise HTTPException when encountered during building langchain template custom component to propagate the error and provide more informative error message
2023-09-26 15:46:39 -03:00
Gabriel Luiz Freitas Almeida
f49a54879d 🔧 chore(auth.py): refactor get_secret_key method for improved readability and maintainability
🔒 chore(auth.py): update logging level to debug for CONFIG_DIR not provided case in get_secret_key method
2023-09-26 15:35:45 -03:00
Gabriel Luiz Freitas Almeida
7ff3ce619e 🔧 refactor(__main__.py): reorganize imports and remove unused imports to improve code readability and maintainability
🔧 refactor(__main__.py): reorganize imports and remove unused imports to improve code readability and maintainability
2023-09-26 15:23:37 -03:00
Gabriel Luiz Freitas Almeida
8e42cc2035 🔀 refactor(__main__.py): rename functions and imports to improve code readability and maintainability 2023-09-26 15:21:05 -03:00
Gabriel Luiz Freitas Almeida
d05e085c4c 🐛 fix(auth.py): change refresh token expiration time from 70 minutes to 12 hours for better security and usability
 feat(auth.py): add logging statements to provide more visibility into secret key generation and saving process
🐛 fix(auth.py): handle IOError when reading or writing secret key to prevent unexpected failures
2023-09-26 15:14:20 -03:00
Gabriel Luiz Freitas Almeida
4a3dae5ed6 Merge remote-tracking branch 'origin/dev' into remove-jcloud 2023-09-26 11:24:15 -03:00
Gabriel Luiz Freitas Almeida
12a5dd8fde 🐛 fix(utils.py): handle cases where file.filename is not a string or Path object to prevent errors
🔧 chore(utils.py): refactor save_uploaded_file function to improve code readability and maintainability
2023-09-26 11:13:48 -03:00
anovazzi1
b833d45fd1
Adds async processing, session management and a starter cloud setup (#921)
This PR adds the ability to use Redis as cache, Celery for task
execution, Session management, async tasks for the API and some other
improvements.

Run the following command after setting up the .env file in `./deploy`
folder:
```bash
docker compose up --exit-code-from tests tests result_backend broker celeryworker db --build
```
2023-09-26 10:34:38 -03:00
Gabriel Luiz Freitas Almeida
12a46b6936 🐛 fix(login.py): re-raise HTTPException if it is already raised to prevent overriding the original exception 2023-09-25 22:09:46 -03:00
Gabriel Luiz Freitas Almeida
c6882a0598 🐛 fix(login.py): move user authentication logic outside of try-except block to ensure proper error handling
 feat(login.py): add endpoint for auto login to improve user experience
2023-09-25 20:56:39 -03:00
Gabriel Luiz Freitas Almeida
62a4e94c71 🔧 fix(api_key.py): remove unnecessary sa_relationship_kwargs to improve code readability and maintainability
🔧 fix(user.py): add sa_relationship_kwargs to api_keys relationship to enable cascading delete when deleting a user
2023-09-25 19:58:21 -03:00
Gabriel Luiz Freitas Almeida
1e0f81c135 🐛 fix(login.py): handle exceptions in login_to_get_access_token function to provide more detailed error messages
🐛 fix(users.py): only hash password if user is a superuser to prevent regular users from changing their password
2023-09-25 19:34:17 -03:00
Gabriel Luiz Freitas Almeida
4be21db30c 🔧 chore(user.py): add optional 'username' field to UserUpdate model for better flexibility in updating user information 2023-09-25 19:14:09 -03:00
Gabriel Luiz Freitas Almeida
3a4ae5e37b 🐛 fix(users.py): prevent non-superusers from changing their password 2023-09-25 19:12:57 -03:00
Gabriel Luiz Freitas Almeida
de4262faa6 🐛 fix(endpoints.py): fix argument passed to save_uploaded_file function to correctly save the uploaded file
🐛 fix(utils.py): fix argument type in save_uploaded_file function to correctly handle UploadFile object
2023-09-25 18:59:21 -03:00
Gabriel Luiz Freitas Almeida
f497369a1c 🔧 chore(users.py): remove unused current_user variable in read_all_users function
🔧 chore(api_key.py): add cascade delete to user-api_key relationship to ensure API keys are deleted when user is deleted
2023-09-25 18:06:52 -03:00
Gabriel Luiz Freitas Almeida
2a3ba95af9 🐛 fix(users.py): update reference to settings.NEW_USER_IS_ACTIVE to settings.auth_settings.NEW_USER_IS_ACTIVE to fix incorrect attribute access 2023-09-25 16:10:29 -03:00
Gabriel Luiz Freitas Almeida
a5da416bc4 🔧 fix(users.py): add support for NEW_USER_IS_ACTIVE setting to determine if new users should be active by default
🔧 fix(cache/manager.py): add warning log message to inform users that RedisCache is experimental and may not work as expected
🔧 fix(settings/auth.py): add NEW_USER_IS_ACTIVE setting to determine if new users should be active by default
2023-09-25 15:54:55 -03:00
Deepankar Mahapatro
9d39946629 chore: remove lc-serve 2023-09-25 15:48:14 +05:30
Gabriel Luiz Freitas Almeida
d8ba8f0746 🚀 feat(endpoints.py): add warning message for experimental feature to inform users about potential issues and encourage reporting 2023-09-24 00:09:53 -03:00
Gabriel Luiz Freitas Almeida
a75e80b0f7 🔧 refactor(endpoints.py): remove unused import of get_cache_service to improve code cleanliness and maintainability
🔧 refactor(schemas.py): make the backend field in ProcessResponse schema optional to handle cases where backend is not provided
🔧 refactor(utils.py): add type hint ignore comment to import statement for Celery to avoid type checking error
2023-09-23 23:30:45 -03:00
Gabriel Luiz Freitas Almeida
c5a6003ef5 🔧 fix(manager.py): replace logging module with loguru logger for consistent logging across the project
 feat(manager.py): add debug logs to check Celery availability and backend being used
🔧 fix(manager.py): move check_celery_availability function definition above its usage to improve code readability
 feat(manager.py): add debug logs to show task launch details and backend being used
2023-09-23 23:29:20 -03:00
Gabriel Luiz Freitas Almeida
5f3c602b29 🔥 chore(users.py): remove unused test endpoint for adding a superuser
The `add_super_user_for_testing_purposes_delete_me_before_merge_into_dev` endpoint was added for testing purposes and is no longer needed. It has been removed to clean up the codebase.
2023-09-23 23:29:10 -03:00
Gabriel Luiz Freitas Almeida
8760cf7f9a 🔧 fix(endpoints.py): import missing dependencies to improve code readability and maintainability
🔧 fix(endpoints.py): generate session ID if it is None to ensure a valid session ID is used
🔧 fix(endpoints.py): add backend information to the ProcessResponse to provide additional context
🔧 fix(schemas.py): add backend field to the ProcessResponse schema to match the changes in the endpoints.py file
2023-09-23 23:28:56 -03:00
Gabriel Luiz Freitas Almeida
befe79775b 🐛 fix(celery_app.py): add return type annotation to make_celery function to improve code readability and maintainability
🔧 chore(celeryconfig.py): update broker_url default value to use RabbitMQ instead of Redis for better performance and scalability
2023-09-23 23:28:37 -03:00
Gabriel Luiz Freitas Almeida
8c7df5e2f7 🐛 fix(utils.py): change get_celery_worker_status function to use app.control.ping() instead of i.ping() for better readability and consistency
🐛 fix(conftest.py): update LANGFLOW_REDIS_HOST and BROKER_URL environment variables to use "result_backend" instead of "queue" for better clarity and accuracy
2023-09-23 23:28:18 -03:00
Gabriel Luiz Freitas Almeida
200f5d647c fix more linting issues 2023-09-22 18:15:23 -03:00
Gabriel Luiz Freitas Almeida
99a4f01865 fix linting issues 2023-09-22 18:15:12 -03:00
Gabriel Luiz Freitas Almeida
479a808634 🔧 fix(endpoints.py): remove unused import and function call to improve code cleanliness and maintainability
🔧 fix(endpoints.py): move import statement to the top of the file for better organization and readability
🔧 fix(getters.py): change service type from DATABASE_MANAGER to DATABASE_SERVICE for consistency and clarity
🔧 fix(getters.py): change service type from CACHE_MANAGER to CACHE_SERVICE for consistency and clarity
🔧 fix(getters.py): change service type from SESSION_MANAGER to SESSION_SERVICE for consistency and clarity
🔧 fix(getters.py): change service type from TASK_MANAGER to TASK_SERVICE for consistency and clarity
🔧 fix(getters.py): remove unused function get_chat_service() to improve code cleanliness and maintainability
🔧 fix(getters.py): remove duplicate function get_settings_service() to improve code cleanliness and maintainability
🔧 fix(getters.py): remove duplicate function get_db_service() to improve code cleanliness and maintainability
🔧 fix(getters.py): remove duplicate function get_session() to improve code cleanliness and maintainability
🔧 fix(utils.py): remove unused import statement to improve code cleanliness and maintainability
🔧 fix(utils.py): remove unused function setup_superuser() to improve code cleanliness and maintainability
🔧 fix(utils.py): remove unused function teardown_superuser() to improve code cleanliness and maintainability
🔧 fix(utils.py): remove unused function teardown_services() to improve code cleanliness and maintainability
🔧 fix(utils.py): remove unused function initialize_settings_manager() to improve code cleanliness and maintainability
🔧 fix(utils.py): remove unused function initialize_session_manager() to improve code cleanliness and maintainability
🔧 fix(utils.py): remove unused function initialize_services() to improve code cleanliness and maintainability
🔧 fix(conftest.py): remove unused import statement to improve code cleanliness and maintainability
🔧 fix(conftest.py): remove unused function get_session_override() to improve code cleanliness and maintainability
🔧 fix(conftest.py): remove unused function distributed_client_fixture() to improve code cleanliness and maintainability
🔧 fix(conftest.py): remove unused function client_fixture() to improve code cleanliness and maintainability
🔧 fix(conftest.py): remove unused function test_user() to improve code cleanliness and maintainability
🔧 fix(conftest.py): remove unused function active_user

🐛 fix(test_endpoints.py): update import statements to use get_db_service instead of get_db_manager to improve code semantics
🐛 fix(test_login.py): update import statements to use get_db_service instead of get_db_manager to improve code semantics
🐛 fix(test_setup_superuser.py): update import statements to use get_db_service instead of get_db_manager to improve code semantics
🐛 fix(test_user.py): update import statements to use get_db_service instead of get_db_manager to improve code semantics
2023-09-22 18:07:55 -03:00
Gabriel Luiz Freitas Almeida
1c0f18f897 🔧 fix(__main__.py): update import statements to reflect changes in module structure
🔧 fix(endpoints.py): update import statement to reflect changes in module structure
🔧 fix(flows.py): update import statements to reflect changes in module structure
🔧 fix(login.py): update import statement to reflect changes in module structure
🔧 fix(base.py): update import statement to reflect changes in module structure
🔧 fix(base.py): update import statement to reflect changes in module structure
🔧 fix(custom_component.py): update import statement to reflect changes in module structure
🔧 fix(base.py): update import statement to reflect changes in module structure
🔧 fix(base.py): update import statement to reflect changes in module structure
🔧 fix(base.py): update import statement to reflect changes in module structure
🔧 fix(base.py): update import statement to reflect changes in module structure
🔧 fix(base.py): update import statement to reflect changes in module structure
🔧 fix(base.py): update import statement to reflect changes in module structure
🔧 fix(base.py): update import statement to reflect changes in module structure
🔧 fix(base.py): update import statement to reflect changes in module structure
🔧 fix(base.py): update import statement to reflect changes in module structure
🔧 fix(base.py): update import statement to reflect changes in module structure
🔧 fix(base.py): update import statement to reflect changes in module structure
🔧 fix(base.py): update import statement to reflect changes in module structure
🔧 fix(base.py): update import statement to reflect changes in module structure
🔧 fix(base.py): update import statement to reflect changes in module structure
🔧 fix(base.py): update import statement to reflect changes in module structure
🔧 fix(base.py): update import statement to reflect changes in module structure
🔧 fix(base.py): update import statement to reflect changes in module structure
🔧 fix(base.py): update import statement to reflect changes in module structure
🔧 fix(base.py): update import statement to reflect changes in module structure
🔧 fix(base.py): update import statement to reflect changes in module structure
🔧 fix(base.py): update import statement to reflect changes in module structure
🔧 fix(base.py): update import statement to reflect changes in module structure

🔧 fix(process.py): update import statement for get_session_service in langflow.processing.process module to reflect correct module location
🔧 fix(utils.py): update import statement for get_session and get_settings_service in langflow.services.auth.utils module to reflect correct module location
🔧 fix(manager.py): update import statement for ServiceType.CACHE_MANAGER in langflow.services.chat.manager module to reflect correct module location
🔧 fix(manager.py): update import statement for ServiceType.DATABASE_MANAGER in langflow.services.chat.manager module to reflect correct module location
🔧 fix(utils.py): update import statement for get_settings_service in langflow.services.database.manager module to reflect correct module location
🔧 fix(utils.py): update import statement for get_settings_service in langflow.services.database.utils module to reflect correct module location
🔧 fix(getters.py): update import statement for DatabaseManager, SettingsManager, ChatManager in langflow.services.getters module to reflect correct module location
🔧 fix(getters.py): update import statement for get_settings_manager in langflow.services.getters module to reflect correct function name change
🔧 fix(getters.py): update import statement for get_db_manager in langflow.services.getters module to reflect correct function name change
🔧 fix(getters.py): update import statement for get_chat_manager in langflow.services.getters module to reflect correct function name change
🔧 fix(getters.py): update import statement for get_settings_manager in langflow.services.getters module to reflect correct function name change
🔧 fix(getters.py): update import statement for get_db_manager in langflow.services.getters module to reflect correct function name change
🔧 fix(getters.py): update import statement for get_session in langflow.services.getters module to reflect correct function name change
🔧 fix(getters.py): update import statement for get_chat_manager in langflow.services.getters module to reflect correct function name change
🔧 fix(langfuse.py): update import statement for get_settings_service in langflow.services.plugins.langfuse module to reflect correct module location
🔧 fix(schema.py): update import statement for ServiceType.AUTH_MANAGER, ServiceType.CACHE_MANAGER, ServiceType.SETTINGS_MANAGER, ServiceType.DATABASE_MANAGER, ServiceType.CHAT_MANAGER, ServiceType.SESSION_MANAGER, ServiceType.TASK_MANAGER in langflow.services.schema module to reflect correct module location
🔧 fix
2023-09-22 14:56:16 -03:00
Gabriel Luiz Freitas Almeida
b3febf25dd Merge remote-tracking branch 'origin/dev' into celery 2023-09-22 14:50:19 -03:00
Gabriel Luiz Freitas Almeida
73e78b6b68 🔀 merge(listing.py): merge changes from types.py to improve code organization and readability
🔀 merge(types.py): merge changes from listing.py to consolidate all type dictionaries into a single function for better maintainability and readability
2023-09-22 14:03:15 -03:00
Gabriel Luiz Freitas Almeida
df9c8c05b5 🔧 refactor(utils.py): remove unused functions merge_nested_dicts and merge_nested_dicts_with_renaming to improve code readability and maintainability
🔧 refactor(endpoints.py): remove unused imports and functions build_langchain_types_dict, build_langchain_template_custom_component, and build_langchain_custom_component_list_from_path to improve code readability and maintainability

 feat(endpoints.py): add error handling to get_all endpoint to return a 500 status code with the exception message if an error occurs during the retrieval of langchain types dict
2023-09-22 14:03:00 -03:00
Gabriel Luiz Freitas Almeida
dcd9d3a23e 🐛 fix(__init__.py): rename service_service to service_manager for better semantics
🐛 fix(manager.py): rename service_service to service_manager for better semantics
🐛 fix(manager.py): rename ServiceService class to ServiceManager for better semantics
🐛 fix(manager.py): rename service_service variable to service_manager for better semantics
🐛 fix(utils.py): rename service_service to service_manager for better semantics
 feat(manager.py): add support for service_manager to manage creation of different services
 feat(manager.py): add support for service_manager to update services
 feat(manager.py): add support for service_manager to teardown services
 feat(manager.py): add support for service_manager to register and update factories
 feat(manager.py): add support for service_manager to initialize and reinitialize services
 feat(manager.py): add support for service_manager to get services by type
 feat(manager.py): add support for service_manager to get services by type
 feat(manager.py): add support for service_manager to get services by type
 feat(manager.py): add support for service_manager to get services by type
 feat(manager.py): add support for service_manager to get services by type
 feat(manager.py): add support for service_manager to get services by type
 feat(manager.py): add support for service_manager to get services by type
 feat(manager.py): add support for service_manager to get services by type
 feat(manager.py): add support for service_manager to get services by type
 feat(manager.py): add support for service_manager to get services by type
 feat(manager.py): add support for service_manager to get services by type
 feat(manager.py): add support for service_manager to get services by type
 feat(manager.py): add support for service_manager to get services by type
 feat(manager.py): add support for service_manager to get services by type
 feat(manager.py): add support for service_manager to get services by type
 feat(manager.py): add support for service_manager to get services by type
 feat(manager.py): add support for service_manager to get services by type
 feat(manager.py): add support for service_manager to get services by type
 feat(manager.py): add support for service_manager to get services by type
 feat(manager.py
2023-09-22 13:08:57 -03:00
Gabriel Luiz Freitas Almeida
78ecb4c341 Merge remote-tracking branch 'origin/dev' into celery 2023-09-22 12:53:05 -03:00
Gabriel Luiz Freitas Almeida
6151052b18
Merge branch 'dev' into add_cli_options_superuser 2023-09-22 12:48:26 -03:00
Gabriel Luiz Freitas Almeida
43df53363d Merge remote-tracking branch 'origin/main' into dev 2023-09-22 12:44:46 -03:00
Gabriel Luiz Freitas Almeida
f8b38ee162 🐛 fix(process.py): rename langchain_object variable to graph for better semantics
🐛 fix(process.py): rename langchain_object variable to built_object in generate_result function for better semantics
🐛 fix(process.py): update session with graph instead of langchain_object to reflect changes
 feat(manager.py): add reinitialize_services function to reinitialize all services
 feat(utils.py): initialize settings service if not already initialized before returning it
2023-09-22 11:00:57 -03:00
Gabriel Luiz Freitas Almeida
04fe2f6054 📝 chore(utils.py): add utility function to check if an object is a basic type
📝 chore(loading.py): refactor code to improve readability and maintainability
📝 chore(vector_store.py): refactor code to improve readability and maintainability
📝 chore(run.py): update return type hint for build_sorted_vertices function
2023-09-22 10:59:53 -03:00
Gabriel Luiz Freitas Almeida
bea1328a3e 🐛 fix(base.py): add __setstate__ method to Edge class to properly set state when unpickling
🐛 fix(base.py): add reset method to Edge class to reset source and target params when needed
🐛 fix(base.py): add __setstate__ method to Graph class to properly set state when unpickling
🐛 fix(base.py): add __eq__ method to Graph class to compare graphs based on their string representation
🐛 fix(types.py): add __getstate__ and __setstate__ methods to AgentVertex class to properly set and get state when pickling and unpickling
🐛 fix(types.py): add __getstate__ and __setstate__ methods to ToolVertex class to properly set and get state when pickling and unpickling
🐛 fix(types.py): add __getstate__ and __setstate__ methods to LLMVertex class to properly set and get state when pickling and unpickling
🐛 fix(types.py): add __getstate__ and __setstate__ methods to ToolkitVertex class to properly set and get state when pickling and unpickling
🐛 fix(types.py): add __getstate__ and __setstate__ methods to FileToolVertex class to properly set and get state when pickling and unpickling
🐛 fix(types.py): add __getstate__ and __setstate__ methods to DocumentLoaderVertex class to properly set and get state when pickling and unpickling
🐛 fix(types.py): add __getstate__ and __setstate__ methods to EmbeddingVertex class to properly set and get state when pickling and unpickling
🐛 fix(types.py): add __getstate__ and __setstate__ methods to VectorStoreVertex class to properly set and get state when pickling and unpickling
🐛 fix(types.py): add __getstate__ and __setstate__ methods to TextSplitterVertex class to properly set and get state when pickling and unpickling
 feat(types.py): add reset method to AgentVertex class to reset source and target params when needed
 feat(types.py): add reset method to ToolVertex class to reset source and target params when needed
 feat(types.py): add reset method to LLMVertex class to reset source and target params when needed
 feat(types.py):
2023-09-22 10:58:27 -03:00
Gabriel Luiz Freitas Almeida
2b10cfe96d 🐛 fix(base.py): add missing import statement for is_basic_type function
🐛 fix(base.py): add missing import statement for logger
🐛 fix(base.py): handle AttributeError when comparing Vertex objects for equality
🐛 fix(base.py): handle exception and log it when building node fails
🐛 fix(base.py): handle exception and log it when pickling built object fails
🐛 fix(base.py): reset params and rebuild built object when pickling built object fails
🐛 fix(base.py): handle exception and log it when pickling built object fails
🐛 fix(base.py): handle exception and log it when pickling built object fails
🐛 fix(base.py): handle exception and log it when pickling built object fails
🐛 fix(base.py): handle exception and log it when pickling built object fails
🐛 fix(base.py): handle exception and log it when pickling built object fails
🐛 fix(base.py): handle exception and log it when pickling built object fails
🐛 fix(base.py): handle exception and log it when pickling built object fails
🐛 fix(base.py): handle exception and log it when pickling built object fails
🐛 fix(base.py): handle exception and log it when pickling built object fails
🐛 fix(base.py): handle exception and log it when pickling built object fails
🐛 fix(base.py): handle exception and log it when pickling built object fails
🐛 fix(base.py): handle exception and log it when pickling built object fails
🐛 fix(base.py): handle exception and log it when pickling built object fails
🐛 fix(base.py): handle exception and log it when pickling built object fails
🐛 fix(base.py): handle exception and log it when pickling built object fails
🐛 fix(base.py): handle exception and log it when pickling built object fails
🐛 fix(base.py): handle exception and log it when pickling built object fails
🐛 fix(base.py): handle exception and log it when pickling built object fails
🐛 fix(base.py): handle exception and log it when pickling built object fails
🐛 fix(base.py): handle exception and log it when pickling built object fails
🐛 fix(base.py): handle exception and log it when pickling built object
2023-09-22 10:54:30 -03:00