besser-agentic-framework 4.4.0__tar.gz → 4.4.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {besser_agentic_framework-4.4.0/besser_agentic_framework.egg-info → besser_agentic_framework-4.4.2}/PKG-INFO +4 -2
- besser_agentic_framework-4.4.2/baf/core/gui/gui_deserializer.py +398 -0
- besser_agentic_framework-4.4.2/baf/core/gui/gui_schema.py +515 -0
- besser_agentic_framework-4.4.2/baf/core/gui/gui_serializer.py +470 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/core/session.py +40 -1
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/nlp/rag/rag.py +137 -5
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/websocket/streamlit_ui/chat.py +1 -1
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/websocket/websocket_platform.py +37 -23
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/examples/rag_agent.py +27 -14
- besser_agentic_framework-4.4.2/baf/utils/__init__.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2/besser_agentic_framework.egg-info}/PKG-INFO +4 -2
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/besser_agentic_framework.egg-info/SOURCES.txt +4 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/besser_agentic_framework.egg-info/requires.txt +3 -1
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/requirements/requirements-core.txt +1 -1
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/requirements/requirements-extras.txt +1 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/setup.cfg +1 -1
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/LICENSE +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/MANIFEST.in +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/README.md +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/__init__.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/core/__init__.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/core/agent.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/core/entity/__init__.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/core/entity/entity.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/core/entity/entity_entry.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/core/file.py +0 -0
- {besser_agentic_framework-4.4.0/baf/core/intent → besser_agentic_framework-4.4.2/baf/core/gui}/__init__.py +0 -0
- {besser_agentic_framework-4.4.0/baf/core/processors → besser_agentic_framework-4.4.2/baf/core/intent}/__init__.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/core/intent/intent.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/core/intent/intent_parameter.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/core/message.py +0 -0
- {besser_agentic_framework-4.4.0/baf/core/transition → besser_agentic_framework-4.4.2/baf/core/processors}/__init__.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/core/processors/audio_language_detection_processor.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/core/processors/language_detection_processor.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/core/processors/processor.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/core/processors/user_adaptation_processor.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/core/property.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/core/state.py +0 -0
- {besser_agentic_framework-4.4.0/baf/db/monitoring_ui → besser_agentic_framework-4.4.2/baf/core/transition}/__init__.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/core/transition/condition.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/core/transition/event.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/core/transition/transition.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/core/transition/transition_builder.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/db/__init__.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/db/db_handler.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/db/monitoring_db.py +0 -0
- {besser_agentic_framework-4.4.0/baf/exceptions → besser_agentic_framework-4.4.2/baf/db/monitoring_ui}/__init__.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/db/monitoring_ui/db_connection.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/db/monitoring_ui/flow_graph.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/db/monitoring_ui/home.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/db/monitoring_ui/intent_details.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/db/monitoring_ui/monitoring_ui.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/db/monitoring_ui/sidebar.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/db/monitoring_ui/table_overview.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/db/monitoring_ui/utils.py +0 -0
- {besser_agentic_framework-4.4.0/baf/library → besser_agentic_framework-4.4.2/baf/exceptions}/__init__.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/exceptions/exceptions.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/exceptions/logger.py +0 -0
- {besser_agentic_framework-4.4.0/baf/library/coroutine → besser_agentic_framework-4.4.2/baf/library}/__init__.py +0 -0
- {besser_agentic_framework-4.4.0/baf/library/entity → besser_agentic_framework-4.4.2/baf/library/coroutine}/__init__.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/library/coroutine/async_helpers.py +0 -0
- {besser_agentic_framework-4.4.0/baf/library/intent → besser_agentic_framework-4.4.2/baf/library/entity}/__init__.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/library/entity/base_entities.py +0 -0
- {besser_agentic_framework-4.4.0/baf/library/transition → besser_agentic_framework-4.4.2/baf/library/intent}/__init__.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/library/intent/intent_library.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/library/state/__init__.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/library/state/reasoning_state_library.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/library/state/state_library.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/library/tool/__init__.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/library/tool/task_tools.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/library/tool/workspace_tools.py +0 -0
- {besser_agentic_framework-4.4.0/baf/library/transition/events → besser_agentic_framework-4.4.2/baf/library/transition}/__init__.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/library/transition/condition_functions.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/library/transition/conditions.py +0 -0
- {besser_agentic_framework-4.4.0/baf/nlp/intent_classifier → besser_agentic_framework-4.4.2/baf/library/transition/events}/__init__.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/library/transition/events/base_events.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/library/transition/events/github_webhooks_events.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/library/transition/events/gitlab_webhooks_events.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/nlp/__init__.py +0 -0
- {besser_agentic_framework-4.4.0/baf/nlp/llm → besser_agentic_framework-4.4.2/baf/nlp/intent_classifier}/__init__.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/nlp/intent_classifier/intent_classifier.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/nlp/intent_classifier/intent_classifier_configuration.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/nlp/intent_classifier/intent_classifier_prediction.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/nlp/intent_classifier/llm_intent_classifier.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/nlp/intent_classifier/simple_intent_classifier_pytorch.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/nlp/intent_classifier/simple_intent_classifier_tensorflow.py +0 -0
- {besser_agentic_framework-4.4.0/baf/nlp/ner → besser_agentic_framework-4.4.2/baf/nlp/llm}/__init__.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/nlp/llm/llm.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/nlp/llm/llm_huggingface.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/nlp/llm/llm_huggingface_api.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/nlp/llm/llm_openai_api.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/nlp/llm/llm_replicate_api.py +0 -0
- {besser_agentic_framework-4.4.0/baf/nlp/ner/base → besser_agentic_framework-4.4.2/baf/nlp/ner}/__init__.py +0 -0
- {besser_agentic_framework-4.4.0/baf/nlp/preprocessing → besser_agentic_framework-4.4.2/baf/nlp/ner/base}/__init__.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/nlp/ner/base/any.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/nlp/ner/base/datetime.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/nlp/ner/base/number.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/nlp/ner/matched_parameter.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/nlp/ner/ner.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/nlp/ner/ner_prediction.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/nlp/ner/simple_ner.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/nlp/nlp_engine.py +0 -0
- {besser_agentic_framework-4.4.0/baf/nlp/rag → besser_agentic_framework-4.4.2/baf/nlp/preprocessing}/__init__.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/nlp/preprocessing/pipelines.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/nlp/preprocessing/text_preprocessing.py +0 -0
- {besser_agentic_framework-4.4.0/baf/nlp/speech2text → besser_agentic_framework-4.4.2/baf/nlp/rag}/__init__.py +0 -0
- {besser_agentic_framework-4.4.0/baf/nlp/text2speech → besser_agentic_framework-4.4.2/baf/nlp/speech2text}/__init__.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/nlp/speech2text/api_speech2text.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/nlp/speech2text/hf_speech2text.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/nlp/speech2text/luxasr_speech2text.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/nlp/speech2text/openai_speech2text.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/nlp/speech2text/speech2text.py +0 -0
- {besser_agentic_framework-4.4.0/baf/platforms → besser_agentic_framework-4.4.2/baf/nlp/text2speech}/__init__.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/nlp/text2speech/hf_text2speech.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/nlp/text2speech/openai_text2speech.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/nlp/text2speech/piper_text2speech.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/nlp/text2speech/text2speech.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/nlp/utils.py +0 -0
- {besser_agentic_framework-4.4.0/baf/test → besser_agentic_framework-4.4.2/baf/platforms}/__init__.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/a2a/__init__.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/a2a/a2a_platform.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/a2a/agent_card.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/a2a/agent_registry.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/a2a/client.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/a2a/error_handler.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/a2a/message_router.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/a2a/server.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/a2a/task_protocol.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/github/__init__.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/github/github_actions.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/github/github_objects.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/github/github_platform.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/gitlab/__init__.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/gitlab/gitlab_actions.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/gitlab/gitlab_objects.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/gitlab/gitlab_platform.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/payload.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/platform.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/telegram/__init__.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/telegram/telegram_platform.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/websocket/__init__.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/websocket/streamlit_ui/__init__.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/websocket/streamlit_ui/audio_queue.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/websocket/streamlit_ui/chat_interface_style.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/websocket/streamlit_ui/initialization.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/websocket/streamlit_ui/login.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/websocket/streamlit_ui/message_input.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/websocket/streamlit_ui/profile_selector.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/websocket/streamlit_ui/reasoning.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/websocket/streamlit_ui/session_management.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/websocket/streamlit_ui/sidebar.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/websocket/streamlit_ui/streamlit_ui.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/websocket/streamlit_ui/user_db.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/websocket/streamlit_ui/vars.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/platforms/websocket/streamlit_ui/websocket_callbacks.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/reasoning/__init__.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/reasoning/skill.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/reasoning/tool.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/reasoning/workspace.py +0 -0
- {besser_agentic_framework-4.4.0/baf/test/components → besser_agentic_framework-4.4.2/baf/test}/__init__.py +0 -0
- {besser_agentic_framework-4.4.0/baf/test/dependencies → besser_agentic_framework-4.4.2/baf/test/components}/__init__.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/components/conftest.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/components/test_core_agent.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/components/test_core_intent_entity.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/components/test_core_message.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/components/test_core_processor.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/components/test_core_property.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/components/test_core_session.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/components/test_core_state.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/components/test_core_transition.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/components/test_library_events.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/components/test_nlp_configurations.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/components/test_nlp_engine.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/components/test_nlp_preprocessing.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/components/test_platforms.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/components/test_workflows.py +0 -0
- {besser_agentic_framework-4.4.0/baf/test/examples → besser_agentic_framework-4.4.2/baf/test/dependencies}/__init__.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/dependencies/conftest.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/dependencies/test_core.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/dependencies/test_docs.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/dependencies/test_extras.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/dependencies/test_framework.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/dependencies/test_llms.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/dependencies/test_tensorflow.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/dependencies/test_torch.py +0 -0
- {besser_agentic_framework-4.4.0/baf/test/examples/multiagent → besser_agentic_framework-4.4.2/baf/test/examples}/__init__.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/examples/a2a_multiagent.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/examples/api_speech2text_agent.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/examples/github_agent.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/examples/gitlab_agent.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/examples/greetings_agent.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/examples/llm_agent.py +0 -0
- {besser_agentic_framework-4.4.0/baf/utils → besser_agentic_framework-4.4.2/baf/test/examples/multiagent}/__init__.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/examples/multiagent/coder_agent.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/examples/multiagent/main_agent.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/examples/multiagent/reviewer_agent.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/examples/reasoning_agent.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/examples/speech2speech_agent.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/examples/speech2text_agent.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/examples/stargazer_agent.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/examples/telegram_agent.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/examples/text2speech_agent.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/examples/weather_agent.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/test/examples/web_crawl_agent.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/baf/utils/web_crawl.py +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/besser_agentic_framework.egg-info/dependency_links.txt +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/besser_agentic_framework.egg-info/top_level.txt +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/pyproject.toml +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/requirements/requirements-docs.txt +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/requirements/requirements-llms.txt +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/requirements/requirements-tensorflow.txt +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/requirements/requirements-torch.txt +0 -0
- {besser_agentic_framework-4.4.0 → besser_agentic_framework-4.4.2}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: besser-agentic-framework
|
|
3
|
-
Version: 4.4.
|
|
3
|
+
Version: 4.4.2
|
|
4
4
|
Summary: BESSER Agentic Framework (BAF)
|
|
5
5
|
Author: Luxembourg Institute of Science and Technology
|
|
6
6
|
License: MIT
|
|
@@ -23,7 +23,7 @@ Requires-Dist: numpy<3,>=2.1; python_version >= "3.13"
|
|
|
23
23
|
Requires-Dist: pandas==2.3.3
|
|
24
24
|
Requires-Dist: python-telegram-bot==21.0
|
|
25
25
|
Requires-Dist: psycopg2-binary>=2.9.10
|
|
26
|
-
Requires-Dist: pydantic
|
|
26
|
+
Requires-Dist: pydantic>=2.6.3
|
|
27
27
|
Requires-Dist: pyvis==0.3.2
|
|
28
28
|
Requires-Dist: PyYAML==6.0.2
|
|
29
29
|
Requires-Dist: requests==2.31.0
|
|
@@ -51,6 +51,7 @@ Requires-Dist: langchain-community==0.2.7; python_version < "3.13" and extra ==
|
|
|
51
51
|
Requires-Dist: langchain==0.3.10; python_version >= "3.13" and extra == "extras"
|
|
52
52
|
Requires-Dist: langchain-community==0.3.10; python_version >= "3.13" and extra == "extras"
|
|
53
53
|
Requires-Dist: pypdf==4.3.1; extra == "extras"
|
|
54
|
+
Requires-Dist: python-docx==1.2.0; extra == "extras"
|
|
54
55
|
Requires-Dist: tiktoken==0.9.0; extra == "extras"
|
|
55
56
|
Provides-Extra: llms
|
|
56
57
|
Requires-Dist: openai==1.93.0; extra == "llms"
|
|
@@ -83,6 +84,7 @@ Requires-Dist: langchain-community==0.2.7; python_version < "3.13" and extra ==
|
|
|
83
84
|
Requires-Dist: langchain==0.3.10; python_version >= "3.13" and extra == "all"
|
|
84
85
|
Requires-Dist: langchain-community==0.3.10; python_version >= "3.13" and extra == "all"
|
|
85
86
|
Requires-Dist: pypdf==4.3.1; extra == "all"
|
|
87
|
+
Requires-Dist: python-docx==1.2.0; extra == "all"
|
|
86
88
|
Requires-Dist: tiktoken==0.9.0; extra == "all"
|
|
87
89
|
Requires-Dist: openai==1.93.0; extra == "all"
|
|
88
90
|
Requires-Dist: replicate==0.23.1; extra == "all"
|
|
@@ -0,0 +1,398 @@
|
|
|
1
|
+
"""Deserialization helpers: JSON string → GUIModel."""
|
|
2
|
+
import json
|
|
3
|
+
from types import SimpleNamespace
|
|
4
|
+
|
|
5
|
+
from baf.exceptions.logger import logger
|
|
6
|
+
|
|
7
|
+
try:
|
|
8
|
+
from besser.BUML.metamodel.gui.graphical_ui import (
|
|
9
|
+
GUIModel, Module, Screen,
|
|
10
|
+
ViewElement, ViewContainer, ViewComponent,
|
|
11
|
+
Button, Text, Image, InputField, Form, Menu, MenuItem,
|
|
12
|
+
DataList, EmbeddedContent, Link,
|
|
13
|
+
)
|
|
14
|
+
from besser.BUML.metamodel.gui.style import Styling, Size, Position, Color, Layout
|
|
15
|
+
from besser.BUML.metamodel.gui.dashboard import (
|
|
16
|
+
LineChart, BarChart, PieChart, RadarChart, RadialBarChart,
|
|
17
|
+
Table, MetricCard, AgentComponent, Series,
|
|
18
|
+
Column, FieldColumn, LookupColumn, ExpressionColumn,
|
|
19
|
+
)
|
|
20
|
+
except ImportError:
|
|
21
|
+
logger.warning("besser dependencies in gui_deserializer.py could not be imported. You can install them with "
|
|
22
|
+
"'pip install --no-deps besser'")
|
|
23
|
+
|
|
24
|
+
# ─── Known parameter names for each style class ─────────────────────────────
|
|
25
|
+
|
|
26
|
+
_SIZE_PROPS = frozenset({
|
|
27
|
+
'width', 'height', 'padding', 'margin', 'font_size', 'line_height', 'icon_size', 'unit_size',
|
|
28
|
+
'font_weight', 'font_family', 'font_style', 'text_decoration', 'text_transform',
|
|
29
|
+
'letter_spacing', 'word_spacing', 'white_space', 'word_break',
|
|
30
|
+
'min_width', 'max_width', 'min_height', 'max_height',
|
|
31
|
+
'padding_top', 'padding_right', 'padding_bottom', 'padding_left',
|
|
32
|
+
'margin_top', 'margin_right', 'margin_bottom', 'margin_left',
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
_POSITION_PROPS = frozenset({
|
|
36
|
+
'p_type', 'top', 'left', 'right', 'bottom', 'alignment', 'z_index', 'display',
|
|
37
|
+
'overflow', 'overflow_x', 'overflow_y', 'visibility', 'cursor',
|
|
38
|
+
'box_sizing', 'transform', 'transition', 'animation', 'filter',
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
_COLOR_PROPS = frozenset({
|
|
42
|
+
'background_color', 'text_color', 'border_color', 'line_color', 'grid_color', 'axis_color',
|
|
43
|
+
'bar_color', 'label_color', 'fill_color', 'opacity', 'color_palette', 'primary_color',
|
|
44
|
+
'border_radius', 'border_width', 'border_style', 'border',
|
|
45
|
+
'border_top', 'border_right', 'border_bottom', 'border_left',
|
|
46
|
+
'box_shadow', 'text_shadow',
|
|
47
|
+
'background_image', 'background_size', 'background_position', 'background_repeat',
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
_LAYOUT_PROPS = frozenset({
|
|
51
|
+
'layout_type', 'orientation', 'padding', 'margin', 'gap', 'alignment', 'wrap',
|
|
52
|
+
'flex_direction', 'justify_content', 'align_items', 'flex_wrap',
|
|
53
|
+
'grid_template_columns', 'grid_template_rows', 'grid_gap', 'justify_items',
|
|
54
|
+
'flex', 'flex_grow', 'flex_shrink', 'flex_basis', 'order', 'align_self',
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
_CATEGORY_KEYS = frozenset({'size', 'position', 'color', 'layout'})
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def _normalize_styling_dict(d: dict) -> dict:
|
|
61
|
+
"""Normalize a styling dict from either nested or flat (LLM-generated) format.
|
|
62
|
+
|
|
63
|
+
LLMs often produce flat styling like ``{"background_color": "#fff", "padding": "10px"}``
|
|
64
|
+
instead of the expected nested format. This function detects that pattern and
|
|
65
|
+
groups properties into the correct ``size`` / ``color`` / ``position`` / ``layout``
|
|
66
|
+
sub-objects so the rest of the deserializer can handle them uniformly.
|
|
67
|
+
"""
|
|
68
|
+
if not d or any(k in d for k in _CATEGORY_KEYS):
|
|
69
|
+
return d # already nested (or empty)
|
|
70
|
+
|
|
71
|
+
size_props, position_props, color_props, layout_props = {}, {}, {}, {}
|
|
72
|
+
for k, v in d.items():
|
|
73
|
+
if k in _SIZE_PROPS:
|
|
74
|
+
size_props[k] = v
|
|
75
|
+
elif k in _POSITION_PROPS:
|
|
76
|
+
position_props[k] = v
|
|
77
|
+
elif k in _COLOR_PROPS:
|
|
78
|
+
color_props[k] = v
|
|
79
|
+
elif k in _LAYOUT_PROPS:
|
|
80
|
+
layout_props[k] = v
|
|
81
|
+
|
|
82
|
+
result = {}
|
|
83
|
+
if size_props:
|
|
84
|
+
result['size'] = size_props
|
|
85
|
+
if position_props:
|
|
86
|
+
result['position'] = position_props
|
|
87
|
+
if color_props:
|
|
88
|
+
result['color'] = color_props
|
|
89
|
+
if layout_props:
|
|
90
|
+
result['layout'] = layout_props
|
|
91
|
+
return result if result else d
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def _deserialize_layout(d: dict) -> "Layout | None":
|
|
95
|
+
if not d:
|
|
96
|
+
return None
|
|
97
|
+
return Layout(**{k: v for k, v in d.items() if k in _LAYOUT_PROPS})
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def _deserialize_styling(d: dict) -> "Styling | None":
|
|
101
|
+
if not d:
|
|
102
|
+
return None
|
|
103
|
+
d = _normalize_styling_dict(d)
|
|
104
|
+
size = Size(**{k: v for k, v in d["size"].items() if k in _SIZE_PROPS}) if d.get("size") else None
|
|
105
|
+
position = Position(**{k: v for k, v in d["position"].items() if k in _POSITION_PROPS}) if d.get("position") else None
|
|
106
|
+
color = Color(**{k: v for k, v in d["color"].items() if k in _COLOR_PROPS}) if d.get("color") else None
|
|
107
|
+
layout = _deserialize_layout(d.get("layout"))
|
|
108
|
+
return Styling(size=size, position=position, color=color, layout=layout)
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def _deserialize_series(d: dict) -> Series:
|
|
112
|
+
return Series(
|
|
113
|
+
name=d["name"],
|
|
114
|
+
label=d.get("label"),
|
|
115
|
+
data_binding=None,
|
|
116
|
+
styling=_deserialize_styling(d.get("styling")),
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
def _deserialize_column(d: dict) -> Column:
|
|
121
|
+
t = d.get("type", "Column")
|
|
122
|
+
label = d.get("label", "")
|
|
123
|
+
if t == "FieldColumn":
|
|
124
|
+
return FieldColumn(label=label, field=SimpleNamespace(name=d.get("field", "")))
|
|
125
|
+
if t == "LookupColumn":
|
|
126
|
+
return LookupColumn(
|
|
127
|
+
label=label,
|
|
128
|
+
path=SimpleNamespace(name=d.get("path", "")),
|
|
129
|
+
field=SimpleNamespace(name=d.get("field", "")),
|
|
130
|
+
)
|
|
131
|
+
if t == "ExpressionColumn":
|
|
132
|
+
return ExpressionColumn(label=label, expression=d.get("expression", ""))
|
|
133
|
+
return Column(label=label)
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
def _deserialize_view_element(d: dict) -> ViewElement:
|
|
137
|
+
t = d.get("type", "ViewComponent")
|
|
138
|
+
base = {
|
|
139
|
+
"name": d["name"],
|
|
140
|
+
"description": d.get("description", ""),
|
|
141
|
+
"styling": _deserialize_styling(d.get("styling")),
|
|
142
|
+
}
|
|
143
|
+
for opt in ("component_id", "tag_name", "css_classes", "custom_attributes"):
|
|
144
|
+
if d.get(opt) is not None:
|
|
145
|
+
base[opt] = d[opt]
|
|
146
|
+
if d.get("display_order") is not None:
|
|
147
|
+
base["display_order"] = d["display_order"]
|
|
148
|
+
|
|
149
|
+
series_list = [_deserialize_series(s) for s in d.get("series", [])]
|
|
150
|
+
|
|
151
|
+
if t == "AgentComponent":
|
|
152
|
+
return AgentComponent(
|
|
153
|
+
agent_name=d.get("agent_name"),
|
|
154
|
+
agent_title=d.get("agent_title"),
|
|
155
|
+
**base,
|
|
156
|
+
)
|
|
157
|
+
|
|
158
|
+
if t == "LineChart":
|
|
159
|
+
el = LineChart(
|
|
160
|
+
line_width=d.get("line_width", 2),
|
|
161
|
+
show_grid=d.get("show_grid", True),
|
|
162
|
+
show_legend=d.get("show_legend", True),
|
|
163
|
+
show_tooltip=d.get("show_tooltip", True),
|
|
164
|
+
curve_type=d.get("curve_type", "monotone"),
|
|
165
|
+
animate=d.get("animate", True),
|
|
166
|
+
legend_position=d.get("legend_position", "top"),
|
|
167
|
+
grid_color=d.get("grid_color"),
|
|
168
|
+
dot_size=d.get("dot_size", 4),
|
|
169
|
+
title=d.get("title"),
|
|
170
|
+
primary_color=d.get("primary_color"),
|
|
171
|
+
**base,
|
|
172
|
+
)
|
|
173
|
+
el.series = series_list
|
|
174
|
+
return el
|
|
175
|
+
|
|
176
|
+
if t == "BarChart":
|
|
177
|
+
el = BarChart(
|
|
178
|
+
bar_width=d.get("bar_width", 20),
|
|
179
|
+
orientation=d.get("orientation", "vertical"),
|
|
180
|
+
show_grid=d.get("show_grid", True),
|
|
181
|
+
show_legend=d.get("show_legend", True),
|
|
182
|
+
show_tooltip=d.get("show_tooltip", True),
|
|
183
|
+
stacked=d.get("stacked", False),
|
|
184
|
+
animate=d.get("animate", True),
|
|
185
|
+
legend_position=d.get("legend_position", "top"),
|
|
186
|
+
grid_color=d.get("grid_color"),
|
|
187
|
+
bar_gap=d.get("bar_gap", 4),
|
|
188
|
+
title=d.get("title"),
|
|
189
|
+
primary_color=d.get("primary_color"),
|
|
190
|
+
**base,
|
|
191
|
+
)
|
|
192
|
+
el.series = series_list
|
|
193
|
+
return el
|
|
194
|
+
|
|
195
|
+
if t == "PieChart":
|
|
196
|
+
el = PieChart(
|
|
197
|
+
show_legend=d.get("show_legend", True),
|
|
198
|
+
legend_position=d.get("legend_position", "top"),
|
|
199
|
+
show_labels=d.get("show_labels", True),
|
|
200
|
+
label_position=d.get("label_position", "outside"),
|
|
201
|
+
padding_angle=d.get("padding_angle", 0),
|
|
202
|
+
inner_radius=d.get("inner_radius", 0),
|
|
203
|
+
outer_radius=d.get("outer_radius", 80),
|
|
204
|
+
start_angle=d.get("start_angle", 0),
|
|
205
|
+
end_angle=d.get("end_angle", 360),
|
|
206
|
+
title=d.get("title"),
|
|
207
|
+
primary_color=d.get("primary_color"),
|
|
208
|
+
**base,
|
|
209
|
+
)
|
|
210
|
+
el.series = series_list
|
|
211
|
+
return el
|
|
212
|
+
|
|
213
|
+
if t == "RadarChart":
|
|
214
|
+
el = RadarChart(
|
|
215
|
+
show_grid=d.get("show_grid", True),
|
|
216
|
+
show_tooltip=d.get("show_tooltip", True),
|
|
217
|
+
show_radius_axis=d.get("show_radius_axis", True),
|
|
218
|
+
show_legend=d.get("show_legend", True),
|
|
219
|
+
legend_position=d.get("legend_position", "top"),
|
|
220
|
+
dot_size=d.get("dot_size", 3),
|
|
221
|
+
grid_type=d.get("grid_type", "polygon"),
|
|
222
|
+
stroke_width=d.get("stroke_width", 2),
|
|
223
|
+
title=d.get("title"),
|
|
224
|
+
primary_color=d.get("primary_color"),
|
|
225
|
+
**base,
|
|
226
|
+
)
|
|
227
|
+
el.series = series_list
|
|
228
|
+
return el
|
|
229
|
+
|
|
230
|
+
if t == "RadialBarChart":
|
|
231
|
+
el = RadialBarChart(
|
|
232
|
+
start_angle=d.get("start_angle", 0),
|
|
233
|
+
end_angle=d.get("end_angle", 360),
|
|
234
|
+
inner_radius=d.get("inner_radius", 30),
|
|
235
|
+
outer_radius=d.get("outer_radius", 80),
|
|
236
|
+
show_legend=d.get("show_legend", True),
|
|
237
|
+
legend_position=d.get("legend_position", "top"),
|
|
238
|
+
show_tooltip=d.get("show_tooltip", True),
|
|
239
|
+
title=d.get("title"),
|
|
240
|
+
primary_color=d.get("primary_color"),
|
|
241
|
+
**base,
|
|
242
|
+
)
|
|
243
|
+
el.series = series_list
|
|
244
|
+
return el
|
|
245
|
+
|
|
246
|
+
if t == "Table":
|
|
247
|
+
return Table(
|
|
248
|
+
show_header=d.get("show_header", True),
|
|
249
|
+
striped_rows=d.get("striped_rows", False),
|
|
250
|
+
show_pagination=d.get("show_pagination", False),
|
|
251
|
+
rows_per_page=d.get("rows_per_page", 5),
|
|
252
|
+
title=d.get("title"),
|
|
253
|
+
primary_color=d.get("primary_color"),
|
|
254
|
+
columns=[_deserialize_column(c) for c in d.get("columns", [])],
|
|
255
|
+
action_buttons=d.get("action_buttons", False),
|
|
256
|
+
**base,
|
|
257
|
+
)
|
|
258
|
+
|
|
259
|
+
if t == "MetricCard":
|
|
260
|
+
return MetricCard(
|
|
261
|
+
metric_title=d.get("metric_title", "Metric Title"),
|
|
262
|
+
format=d.get("format", "number"),
|
|
263
|
+
value_color=d.get("value_color", "#2c3e50"),
|
|
264
|
+
value_size=d.get("value_size", 32),
|
|
265
|
+
show_trend=d.get("show_trend", True),
|
|
266
|
+
positive_color=d.get("positive_color", "#27ae60"),
|
|
267
|
+
negative_color=d.get("negative_color", "#e74c3c"),
|
|
268
|
+
title=d.get("title"),
|
|
269
|
+
primary_color=d.get("primary_color"),
|
|
270
|
+
**base,
|
|
271
|
+
)
|
|
272
|
+
|
|
273
|
+
if t == "Button":
|
|
274
|
+
return Button(
|
|
275
|
+
label=d.get("label", ""),
|
|
276
|
+
buttonType=d.get("buttonType", "Raised Button"),
|
|
277
|
+
actionType=d.get("actionType", "navigate"),
|
|
278
|
+
confirmation_required=d.get("confirmation_required", False),
|
|
279
|
+
confirmation_message=d.get("confirmation_message"),
|
|
280
|
+
**base,
|
|
281
|
+
)
|
|
282
|
+
|
|
283
|
+
if t == "Text":
|
|
284
|
+
return Text(
|
|
285
|
+
content=d.get("content", ""),
|
|
286
|
+
**base,
|
|
287
|
+
)
|
|
288
|
+
|
|
289
|
+
if t == "Link":
|
|
290
|
+
return Link(
|
|
291
|
+
label=d.get("label", ""),
|
|
292
|
+
url=d.get("url"),
|
|
293
|
+
target=d.get("target"),
|
|
294
|
+
rel=d.get("rel"),
|
|
295
|
+
**base,
|
|
296
|
+
)
|
|
297
|
+
|
|
298
|
+
if t == "Image":
|
|
299
|
+
return Image(
|
|
300
|
+
source=d.get("source"),
|
|
301
|
+
**base,
|
|
302
|
+
)
|
|
303
|
+
|
|
304
|
+
if t == "InputField":
|
|
305
|
+
return InputField(
|
|
306
|
+
field_type=d.get("field_type", "text"),
|
|
307
|
+
validationRules=d.get("validationRules"),
|
|
308
|
+
**base,
|
|
309
|
+
)
|
|
310
|
+
|
|
311
|
+
if t == "Form":
|
|
312
|
+
return Form(
|
|
313
|
+
inputFields=set(_deserialize_view_element(f) for f in d.get("inputFields", [])),
|
|
314
|
+
**base,
|
|
315
|
+
)
|
|
316
|
+
|
|
317
|
+
if t == "Menu":
|
|
318
|
+
menu_items = set(
|
|
319
|
+
MenuItem(
|
|
320
|
+
label=mi.get("label", ""),
|
|
321
|
+
url=mi.get("url"),
|
|
322
|
+
target=mi.get("target"),
|
|
323
|
+
rel=mi.get("rel"),
|
|
324
|
+
)
|
|
325
|
+
for mi in d.get("menuItems", [])
|
|
326
|
+
)
|
|
327
|
+
return Menu(menuItems=menu_items, **base)
|
|
328
|
+
|
|
329
|
+
if t == "DataList":
|
|
330
|
+
return DataList(list_sources=set(), **base)
|
|
331
|
+
|
|
332
|
+
if t == "EmbeddedContent":
|
|
333
|
+
return EmbeddedContent(
|
|
334
|
+
source=d.get("source", ""),
|
|
335
|
+
content_type=d.get("content_type", ""),
|
|
336
|
+
extra_props=d.get("extra_props"),
|
|
337
|
+
**base,
|
|
338
|
+
)
|
|
339
|
+
|
|
340
|
+
if t == "ViewContainer":
|
|
341
|
+
return ViewContainer(
|
|
342
|
+
view_elements=set(_deserialize_view_element(c) for c in d.get("view_elements", [])),
|
|
343
|
+
layout=_deserialize_layout(d.get("layout")),
|
|
344
|
+
**base,
|
|
345
|
+
)
|
|
346
|
+
|
|
347
|
+
# Fallback: generic ViewComponent
|
|
348
|
+
return ViewComponent(**base)
|
|
349
|
+
|
|
350
|
+
|
|
351
|
+
def _deserialize_screen(d: dict) -> Screen:
|
|
352
|
+
base = {
|
|
353
|
+
"name": d["name"],
|
|
354
|
+
"description": d.get("description", ""),
|
|
355
|
+
"view_elements": set(_deserialize_view_element(el) for el in d.get("view_elements", [])),
|
|
356
|
+
"x_dpi": d.get("x_dpi", ""),
|
|
357
|
+
"y_dpi": d.get("y_dpi", ""),
|
|
358
|
+
"screen_size": d.get("screen_size", "Medium"),
|
|
359
|
+
"is_main_page": d.get("is_main_page", False),
|
|
360
|
+
"layout": _deserialize_layout(d.get("layout")),
|
|
361
|
+
"styling": _deserialize_styling(d.get("styling")),
|
|
362
|
+
"route_path": d.get("route_path"),
|
|
363
|
+
}
|
|
364
|
+
for opt in ("component_id", "tag_name", "css_classes", "custom_attributes", "display_order"):
|
|
365
|
+
if d.get(opt) is not None:
|
|
366
|
+
base[opt] = d[opt]
|
|
367
|
+
return Screen(**base)
|
|
368
|
+
|
|
369
|
+
|
|
370
|
+
def json_to_gui(json_str: str) -> GUIModel:
|
|
371
|
+
"""Deserialize a JSON string produced by :func:`gui_to_json` back into a :class:`GUIModel`.
|
|
372
|
+
|
|
373
|
+
Args:
|
|
374
|
+
json_str: JSON string representing the GUI model.
|
|
375
|
+
|
|
376
|
+
Returns:
|
|
377
|
+
A reconstructed :class:`GUIModel` instance.
|
|
378
|
+
"""
|
|
379
|
+
data = json.loads(json_str)
|
|
380
|
+
modules = set()
|
|
381
|
+
for m in data.get("modules", []):
|
|
382
|
+
screens = set(_deserialize_screen(s) for s in m.get("screens", []))
|
|
383
|
+
modules.add(Module(name=m["name"], screens=screens))
|
|
384
|
+
gui_kwargs = dict(
|
|
385
|
+
name=data["name"],
|
|
386
|
+
package=data.get("package", ""),
|
|
387
|
+
versionCode=data.get("versionCode", 1),
|
|
388
|
+
versionName=data.get("versionName", "1.0"),
|
|
389
|
+
modules=modules,
|
|
390
|
+
description=data.get("description", ""),
|
|
391
|
+
)
|
|
392
|
+
style_entries = data.get("style_entries")
|
|
393
|
+
if style_entries is not None:
|
|
394
|
+
try:
|
|
395
|
+
return GUIModel(**gui_kwargs, style_entries=style_entries)
|
|
396
|
+
except TypeError:
|
|
397
|
+
pass
|
|
398
|
+
return GUIModel(**gui_kwargs)
|