flowcept 0.9.16__tar.gz → 0.9.18__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.
- {flowcept-0.9.16 → flowcept-0.9.18}/.github/workflows/create-release-n-publish.yml +2 -2
- {flowcept-0.9.16 → flowcept-0.9.18}/.github/workflows/run-llm-tests.yml +1 -1
- {flowcept-0.9.16 → flowcept-0.9.18}/.github/workflows/run-tests-all-dbs.yml +1 -1
- {flowcept-0.9.16 → flowcept-0.9.18}/.github/workflows/run-tests-kafka.yml +1 -1
- {flowcept-0.9.16 → flowcept-0.9.18}/.github/workflows/run-tests-py313.yml +1 -1
- {flowcept-0.9.16 → flowcept-0.9.18}/.github/workflows/run-tests-simple.yml +1 -1
- {flowcept-0.9.16 → flowcept-0.9.18}/.github/workflows/run-tests.yml +1 -1
- {flowcept-0.9.16 → flowcept-0.9.18}/.github/workflows/run_examples.sh +2 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/.gitignore +1 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/Makefile +1 -1
- {flowcept-0.9.16 → flowcept-0.9.18}/PKG-INFO +10 -2
- {flowcept-0.9.16 → flowcept-0.9.18}/README.md +2 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/docs/index.rst +18 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/docs/prov_query.rst +2 -2
- {flowcept-0.9.16 → flowcept-0.9.18}/docs/publications/README.md +33 -15
- {flowcept-0.9.16 → flowcept-0.9.18}/examples/llm_complex/llm_main_example.py +18 -3
- {flowcept-0.9.16 → flowcept-0.9.18}/examples/llm_complex/llm_test_runner.py +1 -1
- {flowcept-0.9.16 → flowcept-0.9.18}/pyproject.toml +4 -3
- {flowcept-0.9.16 → flowcept-0.9.18}/resources/sample_settings.yaml +2 -1
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/agents/agents_utils.py +42 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/agents/flowcept_agent.py +4 -1
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/agents/flowcept_ctx_manager.py +99 -36
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/agents/gui/gui_utils.py +21 -3
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/agents/prompts/general_prompts.py +1 -1
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/agents/prompts/in_memory_query_prompts.py +158 -45
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/agents/tools/general_tools.py +20 -3
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/agents/tools/in_memory_queries/in_memory_queries_tools.py +14 -31
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/commons/daos/docdb_dao/lmdb_dao.py +48 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/commons/daos/mq_dao/mq_dao_kafka.py +2 -2
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/commons/daos/mq_dao/mq_dao_redis.py +33 -2
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/commons/flowcept_dataclasses/task_object.py +4 -1
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/configs.py +4 -1
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/flowcept_api/flowcept_controller.py +5 -1
- flowcept-0.9.18/src/flowcept/flowceptor/adapters/mlflow/interception_event_handler.py +50 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/flowceptor/adapters/mlflow/mlflow_interceptor.py +22 -7
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/flowceptor/adapters/tensorboard/tensorboard_interceptor.py +7 -1
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/flowceptor/consumers/agent/base_agent_context_manager.py +7 -8
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/instrumentation/flowcept_task.py +147 -51
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/instrumentation/task_capture.py +10 -1
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/version.py +1 -1
- {flowcept-0.9.16 → flowcept-0.9.18}/tests/adapters/test_file_observer.py +14 -7
- {flowcept-0.9.16 → flowcept-0.9.18}/tests/adapters/test_mlflow.py +42 -6
- flowcept-0.9.18/tests/agent/agent_tests.py +21 -0
- flowcept-0.9.18/tests/conftest.py +16 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/tests/instrumentation_tests/flowcept_explicit_tasks.py +43 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/tests/instrumentation_tests/flowcept_task_decorator_test.py +31 -2
- flowcept-0.9.18/tests/misc_tests/__init__.py +0 -0
- flowcept-0.9.16/src/flowcept/flowceptor/adapters/mlflow/interception_event_handler.py +0 -16
- {flowcept-0.9.16 → flowcept-0.9.18}/.github/workflows/checks.yml +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/.github/workflows/run-tests-in-container.yml +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/.github/workflows/version_bumper.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/.readthedocs.yaml +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/CONTRIBUTING.md +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/LICENSE +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/deployment/Dockerfile +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/deployment/compose-grafana.yml +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/deployment/compose-kafka.yml +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/deployment/compose-mofka.yml +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/deployment/compose-mongo.yml +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/deployment/compose.yml +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/docs/api-reference.rst +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/docs/architecture.rst +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/docs/cli-reference.rst +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/docs/conf.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/docs/contributing.rst +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/docs/img/PROV-AGENT.svg +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/docs/img/architecture-diagram.png +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/docs/img/flowcept-logo-dark.png +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/docs/img/flowcept-logo.png +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/docs/large_data.rst +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/docs/prov_capture.rst +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/docs/prov_storage.rst +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/docs/quick_start.rst +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/docs/schemas.rst +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/docs/setup.rst +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/docs/task_schema.rst +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/docs/telemetry_capture.rst +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/docs/workflow_schema.rst +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/examples/agents/a2a/README.md +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/examples/agents/a2a/agent1.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/examples/agents/a2a/agent2.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/examples/agents/aec_agent_context_manager.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/examples/agents/aec_agent_mock.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/examples/agents/aec_prompts.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/examples/agents/opt_driver_mock.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/examples/consumers/ping_pong_example.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/examples/consumers/simple_consumer.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/examples/consumers/simple_publisher.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/examples/convergence_loop_example.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/examples/dask_example.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/examples/distributed_consumer_example.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/examples/instrumented_loop_example.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/examples/instrumented_simple_example.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/examples/llm_complex/README.md +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/examples/llm_complex/custom_provenance_id_mapping.yaml +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/examples/llm_complex/llm_dataprep.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/examples/llm_complex/llm_model.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/examples/llm_tutorial/README.md +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/examples/llm_tutorial/analysis.ipynb +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/examples/llm_tutorial/llm_dataprep.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/examples/llm_tutorial/llm_model.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/examples/llm_tutorial/llm_train_campaign.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/examples/mlflow_example.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/examples/mqtt_example.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/examples/single_layer_perceptron_example.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/examples/start_here.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/examples/tensorboard_example.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/examples/unmanaged/main.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/examples/unmanaged/simple_task.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/notebooks/analytics.ipynb +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/notebooks/dask.ipynb +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/notebooks/dask_from_CLI.ipynb +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/notebooks/mlflow.ipynb +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/notebooks/reset_dask_nb_exec_counts.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/notebooks/tensorboard.ipynb +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/resources/mofka/bedrock_setup.sh +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/resources/mofka/consumer.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/resources/mofka/mofka-requirements.yaml +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/resources/mofka/mofka_config.json +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/resources/ontology/catalog-v001.xml +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/resources/ontology/prov_agent.owl +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/resources/simple_redis_consumer.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/__init__.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/agents/__init__.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/agents/agent_client.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/agents/dynamic_schema_tracker.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/agents/gui/__init__.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/agents/gui/agent_gui.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/agents/gui/audio_utils.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/agents/llms/__init__.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/agents/llms/claude_gcp.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/agents/llms/gemini25.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/agents/prompts/__init__.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/agents/tools/__init__.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/agents/tools/in_memory_queries/__init__.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/agents/tools/in_memory_queries/pandas_agent_utils.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/analytics/__init__.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/analytics/analytics_utils.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/analytics/data_augmentation.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/analytics/plot.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/cli.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/commons/__init__.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/commons/autoflush_buffer.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/commons/daos/__init__.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/commons/daos/docdb_dao/__init__.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/commons/daos/docdb_dao/docdb_dao_base.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/commons/daos/docdb_dao/mongodb_dao.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/commons/daos/keyvalue_dao.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/commons/daos/mq_dao/__init__.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/commons/daos/mq_dao/mq_dao_base.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/commons/daos/mq_dao/mq_dao_mofka.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/commons/daos/redis_conn.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/commons/flowcept_dataclasses/__init__.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/commons/flowcept_dataclasses/base_settings_dataclasses.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/commons/flowcept_dataclasses/telemetry.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/commons/flowcept_dataclasses/workflow_object.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/commons/flowcept_logger.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/commons/query_utils.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/commons/settings_factory.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/commons/task_data_preprocess.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/commons/utils.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/commons/vocabulary.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/flowcept_api/__init__.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/flowcept_api/db_api.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/flowcept_api/task_query_api.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/flowcept_webserver/__init__.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/flowcept_webserver/app.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/flowcept_webserver/resources/__init__.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/flowcept_webserver/resources/query_rsrc.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/flowcept_webserver/resources/task_messages_rsrc.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/flowceptor/__init__.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/flowceptor/adapters/__init__.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/flowceptor/adapters/base_interceptor.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/flowceptor/adapters/brokers/__init__.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/flowceptor/adapters/brokers/mqtt_interceptor.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/flowceptor/adapters/dask/__init__.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/flowceptor/adapters/dask/dask_dataclasses.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/flowceptor/adapters/dask/dask_interceptor.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/flowceptor/adapters/dask/dask_plugins.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/flowceptor/adapters/instrumentation_interceptor.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/flowceptor/adapters/interceptor_state_manager.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/flowceptor/adapters/mlflow/__init__.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/flowceptor/adapters/mlflow/mlflow_dao.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/flowceptor/adapters/mlflow/mlflow_dataclasses.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/flowceptor/adapters/tensorboard/__init__.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/flowceptor/adapters/tensorboard/tensorboard_dataclasses.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/flowceptor/consumers/__init__.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/flowceptor/consumers/agent/__init__.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/flowceptor/consumers/base_consumer.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/flowceptor/consumers/consumer_utils.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/flowceptor/consumers/document_inserter.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/flowceptor/telemetry_capture.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/instrumentation/__init__.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/instrumentation/flowcept_agent_task.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/instrumentation/flowcept_decorator.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/instrumentation/flowcept_loop.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/src/flowcept/instrumentation/flowcept_torch.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/tests/__init__.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/tests/adapters/__init__.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/tests/adapters/dask_test_utils.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/tests/adapters/test_broker.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/tests/adapters/test_dask.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/tests/adapters/test_dask_with_context_mgmt.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/tests/adapters/test_tensorboard.py +0 -0
- {flowcept-0.9.16/tests/api → flowcept-0.9.18/tests/agent}/__init__.py +0 -0
- {flowcept-0.9.16/tests/doc_db_inserter → flowcept-0.9.18/tests/api}/__init__.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/tests/api/db_api_test.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/tests/api/flowcept_api_test.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/tests/api/sample_data.json +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/tests/api/sample_data_with_telemetry_and_rai.json +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/tests/api/task_query_api_test.py +0 -0
- {flowcept-0.9.16/tests/instrumentation_tests → flowcept-0.9.18/tests/doc_db_inserter}/__init__.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/tests/doc_db_inserter/doc_db_inserter_test.py +0 -0
- {flowcept-0.9.16/tests/instrumentation_tests/ml_tests → flowcept-0.9.18/tests/instrumentation_tests}/__init__.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/tests/instrumentation_tests/flowcept_loop_test.py +0 -0
- {flowcept-0.9.16/tests/misc_tests → flowcept-0.9.18/tests/instrumentation_tests/ml_tests}/__init__.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/tests/instrumentation_tests/ml_tests/dl_trainer.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/tests/instrumentation_tests/ml_tests/ml_decorator_dask_test.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/tests/instrumentation_tests/ml_tests/ml_decorator_test.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/tests/misc_tests/log_test.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/tests/misc_tests/singleton_test.py +0 -0
- {flowcept-0.9.16 → flowcept-0.9.18}/tests/misc_tests/telemetry_test.py +0 -0
|
@@ -68,7 +68,9 @@ run_test() {
|
|
|
68
68
|
echo "Ok, ran $test_path."
|
|
69
69
|
if grep -iq "error" output.log; then
|
|
70
70
|
echo "Test $test_path failed! See output.log for details."
|
|
71
|
+
echo "[BEGIN] Content of output.log"
|
|
71
72
|
cat output.log
|
|
73
|
+
echo "[END] Content of output.log"
|
|
72
74
|
exit 1
|
|
73
75
|
fi
|
|
74
76
|
|
|
@@ -115,7 +115,7 @@ services-stop-mofka:
|
|
|
115
115
|
# Run unit tests using pytest
|
|
116
116
|
.PHONY: tests
|
|
117
117
|
tests:
|
|
118
|
-
pytest --ignore=tests/adapters/test_tensorboard.py
|
|
118
|
+
pytest --timeout=300 --ignore=tests/adapters/test_tensorboard.py
|
|
119
119
|
|
|
120
120
|
.PHONY: tests-notebooks
|
|
121
121
|
tests-notebooks:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: flowcept
|
|
3
|
-
Version: 0.9.
|
|
3
|
+
Version: 0.9.18
|
|
4
4
|
Summary: Capture and query workflow provenance data using data observability
|
|
5
5
|
Author: Oak Ridge National Laboratory
|
|
6
6
|
License-Expression: MIT
|
|
@@ -9,7 +9,7 @@ Keywords: agentic-ai,agentic-workflows,ai,big-data,dask,data-analytics,data-inte
|
|
|
9
9
|
Classifier: License :: OSI Approved :: MIT License
|
|
10
10
|
Classifier: Operating System :: OS Independent
|
|
11
11
|
Classifier: Programming Language :: Python :: 3
|
|
12
|
-
Requires-Python: >=3.
|
|
12
|
+
Requires-Python: >=3.11
|
|
13
13
|
Requires-Dist: msgpack
|
|
14
14
|
Requires-Dist: numpy
|
|
15
15
|
Requires-Dist: omegaconf
|
|
@@ -41,6 +41,7 @@ Requires-Dist: pyarrow; extra == 'all'
|
|
|
41
41
|
Requires-Dist: pymongo; extra == 'all'
|
|
42
42
|
Requires-Dist: pymupdf; extra == 'all'
|
|
43
43
|
Requires-Dist: pytest; extra == 'all'
|
|
44
|
+
Requires-Dist: pytest-timeout; extra == 'all'
|
|
44
45
|
Requires-Dist: pyyaml; extra == 'all'
|
|
45
46
|
Requires-Dist: redis; extra == 'all'
|
|
46
47
|
Requires-Dist: requests; extra == 'all'
|
|
@@ -50,6 +51,7 @@ Requires-Dist: seaborn; extra == 'all'
|
|
|
50
51
|
Requires-Dist: sphinx; extra == 'all'
|
|
51
52
|
Requires-Dist: sqlalchemy; extra == 'all'
|
|
52
53
|
Requires-Dist: streamlit; extra == 'all'
|
|
54
|
+
Requires-Dist: tabulate; extra == 'all'
|
|
53
55
|
Requires-Dist: tbparse; extra == 'all'
|
|
54
56
|
Requires-Dist: tensorboard; extra == 'all'
|
|
55
57
|
Requires-Dist: tensorflow; extra == 'all'
|
|
@@ -69,6 +71,7 @@ Requires-Dist: jupyterlab; extra == 'dev'
|
|
|
69
71
|
Requires-Dist: nbmake; extra == 'dev'
|
|
70
72
|
Requires-Dist: pika; extra == 'dev'
|
|
71
73
|
Requires-Dist: pytest; extra == 'dev'
|
|
74
|
+
Requires-Dist: pytest-timeout; extra == 'dev'
|
|
72
75
|
Requires-Dist: pyyaml; extra == 'dev'
|
|
73
76
|
Requires-Dist: ruff; extra == 'dev'
|
|
74
77
|
Requires-Dist: sphinx; extra == 'dev'
|
|
@@ -94,6 +97,7 @@ Requires-Dist: matplotlib; extra == 'llm-agent'
|
|
|
94
97
|
Requires-Dist: mcp[cli]; extra == 'llm-agent'
|
|
95
98
|
Requires-Dist: pymupdf; extra == 'llm-agent'
|
|
96
99
|
Requires-Dist: streamlit; extra == 'llm-agent'
|
|
100
|
+
Requires-Dist: tabulate; extra == 'llm-agent'
|
|
97
101
|
Provides-Extra: llm-agent-audio
|
|
98
102
|
Requires-Dist: gtts; extra == 'llm-agent-audio'
|
|
99
103
|
Requires-Dist: langchain-community; extra == 'llm-agent-audio'
|
|
@@ -105,6 +109,7 @@ Requires-Dist: pymupdf; extra == 'llm-agent-audio'
|
|
|
105
109
|
Requires-Dist: speechrecognition; extra == 'llm-agent-audio'
|
|
106
110
|
Requires-Dist: streamlit; extra == 'llm-agent-audio'
|
|
107
111
|
Requires-Dist: streamlit-mic-recorder; extra == 'llm-agent-audio'
|
|
112
|
+
Requires-Dist: tabulate; extra == 'llm-agent-audio'
|
|
108
113
|
Provides-Extra: llm-google
|
|
109
114
|
Requires-Dist: google-genai; extra == 'llm-google'
|
|
110
115
|
Requires-Dist: langchain-community; extra == 'llm-google'
|
|
@@ -113,6 +118,7 @@ Requires-Dist: matplotlib; extra == 'llm-google'
|
|
|
113
118
|
Requires-Dist: mcp[cli]; extra == 'llm-google'
|
|
114
119
|
Requires-Dist: pymupdf; extra == 'llm-google'
|
|
115
120
|
Requires-Dist: streamlit; extra == 'llm-google'
|
|
121
|
+
Requires-Dist: tabulate; extra == 'llm-google'
|
|
116
122
|
Provides-Extra: lmdb
|
|
117
123
|
Requires-Dist: lmdb; extra == 'lmdb'
|
|
118
124
|
Provides-Extra: ml-dev
|
|
@@ -169,6 +175,7 @@ Flowcept captures and queries workflow provenance at runtime with minimal code c
|
|
|
169
175
|
|
|
170
176
|
|
|
171
177
|
[](https://flowcept.readthedocs.io/)
|
|
178
|
+
[](https://workflowscommunity.slack.com/archives/C06L5GYJKQS)
|
|
172
179
|
[](https://github.com/ORNL/flowcept/actions/workflows/create-release-n-publish.yml)
|
|
173
180
|
[](https://pypi.org/project/flowcept)
|
|
174
181
|
[](https://github.com/ORNL/flowcept/actions/workflows/run-tests.yml)
|
|
@@ -179,6 +186,7 @@ Flowcept captures and queries workflow provenance at runtime with minimal code c
|
|
|
179
186
|
|
|
180
187
|
|
|
181
188
|
<h4 align="center">
|
|
189
|
+
<a href="https://flowcept.org">Website</a> •
|
|
182
190
|
<a href="https://flowcept.readthedocs.io/">Documentation</a> •
|
|
183
191
|
<a href="./docs/publications">Publications</a>
|
|
184
192
|
</h4>
|
|
@@ -20,6 +20,7 @@ Flowcept captures and queries workflow provenance at runtime with minimal code c
|
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
[](https://flowcept.readthedocs.io/)
|
|
23
|
+
[](https://workflowscommunity.slack.com/archives/C06L5GYJKQS)
|
|
23
24
|
[](https://github.com/ORNL/flowcept/actions/workflows/create-release-n-publish.yml)
|
|
24
25
|
[](https://pypi.org/project/flowcept)
|
|
25
26
|
[](https://github.com/ORNL/flowcept/actions/workflows/run-tests.yml)
|
|
@@ -30,6 +31,7 @@ Flowcept captures and queries workflow provenance at runtime with minimal code c
|
|
|
30
31
|
|
|
31
32
|
|
|
32
33
|
<h4 align="center">
|
|
34
|
+
<a href="https://flowcept.org">Website</a> •
|
|
33
35
|
<a href="https://flowcept.readthedocs.io/">Documentation</a> •
|
|
34
36
|
<a href="./docs/publications">Publications</a>
|
|
35
37
|
</h4>
|
|
@@ -18,6 +18,12 @@ Flowcept
|
|
|
18
18
|
html[data-theme="auto"] .logo-light { display: none; }
|
|
19
19
|
html[data-theme="auto"] .logo-dark { display: inline; }
|
|
20
20
|
}
|
|
21
|
+
|
|
22
|
+
.hero { text-align: center; margin: 1.25rem 0 0.25rem; }
|
|
23
|
+
.hero h1 { font-size: 2rem; line-height: 1.2; margin: 0; }
|
|
24
|
+
.tagline { text-align: center; font-size: 1.05rem; max-width: 60rem; margin: 0.25rem auto 1.25rem; }
|
|
25
|
+
|
|
26
|
+
|
|
21
27
|
</style>
|
|
22
28
|
|
|
23
29
|
<p align="center">
|
|
@@ -32,6 +38,18 @@ Flowcept
|
|
|
32
38
|
:align: center
|
|
33
39
|
:width: 120px
|
|
34
40
|
|
|
41
|
+
.. raw:: html
|
|
42
|
+
|
|
43
|
+
<div class="hero">
|
|
44
|
+
<h4>Lightweight Distributed Workflow Provenance</h4>
|
|
45
|
+
</div>
|
|
46
|
+
<p class=\\"tagline\\">
|
|
47
|
+
Flowcept captures and queries workflow provenance at runtime with minimal code changes and low overhead.
|
|
48
|
+
It unifies data from diverse tools and workflows across the Edge–Cloud–HPC continuum and provides ML-aware capture,
|
|
49
|
+
MCP agents provenance, telemetry, extensible adapters, and flexible storage.
|
|
50
|
+
</p>
|
|
51
|
+
|
|
52
|
+
|
|
35
53
|
.. toctree::
|
|
36
54
|
:maxdepth: 2
|
|
37
55
|
:caption: Contents:
|
|
@@ -142,8 +142,8 @@ Deleting a buffer file
|
|
|
142
142
|
.. code-block:: python
|
|
143
143
|
|
|
144
144
|
from flowcept import Flowcept
|
|
145
|
-
Flowcept.delete_buffer_file()
|
|
146
|
-
Flowcept.delete_buffer_file(
|
|
145
|
+
Flowcept.delete_buffer_file() # deletes default path from settings
|
|
146
|
+
Flowcept.delete_buffer_file("my_buffer.jsonl")
|
|
147
147
|
|
|
148
148
|
Notes
|
|
149
149
|
^^^^^
|
|
@@ -7,48 +7,66 @@ Bibtex is available below.
|
|
|
7
7
|
|
|
8
8
|
**Towards Lightweight Data Integration using Multi-workflow Provenance and Data Observability**
|
|
9
9
|
R. Souza, T. J. Skluzacek, S. R. Wilkinson, M. Ziatdinov, and R. Ferreira da Silva,
|
|
10
|
-
*IEEE International Conference on e-Science*, Limassol, Cyprus, 2023.
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
*IEEE International Conference on e-Science*, Limassol, Cyprus, 2023. <br/>
|
|
11
|
+
**About**: Introduces Flowcept’s lightweight runtime provenance and data observability architecture and shows minimal-intrusion capture across heterogeneous workflows. <br/>
|
|
12
|
+
[[doi]](https://doi.org/10.1109/e-Science58273.2023.10254822)
|
|
13
|
+
[[pdf]](https://arxiv.org/pdf/2308.09004.pdf)
|
|
14
14
|
---
|
|
15
15
|
|
|
16
16
|
**PROV-AGENT: Unified Provenance for Tracking AI Agent Interactions in Agentic Workflows**
|
|
17
17
|
R. Souza, A. Gueroudji, S. DeWitt, D. Rosendo, T. Ghosal, R. Ross, P. Balaprakash, and R. Ferreira da Silva,
|
|
18
|
-
*IEEE International Conference on e-Science*, Chicago, USA., 2025.
|
|
19
|
-
|
|
18
|
+
*IEEE International Conference on e-Science*, Chicago, USA., 2025. <br/>
|
|
19
|
+
**About**: Defines agentic provenance and a unified provenance model and tooling to capture, link, and query AI-agent interactions within agentic workflows. </br>
|
|
20
|
+
[[doi]](https://doi.org/10.1109/eScience65000.2025.00093)
|
|
21
|
+
[[pdf]](https://arxiv.org/pdf/2508.02866)
|
|
22
|
+
[[html]](https://arxiv.org/html/2508.02866v3) <br/>
|
|
23
|
+
|
|
20
24
|
|
|
21
25
|
---
|
|
22
26
|
|
|
23
27
|
**Workflow Provenance in the Computing Continuum for Responsible, Trustworthy, and Energy-Efficient AI**
|
|
24
28
|
R. Souza, S. Caino-Lores, M. Coletti, T. J. Skluzacek, A. Costan, F. Suter, M. Mattoso, and R. Ferreira da Silva,
|
|
25
|
-
*IEEE International Conference on e-Science*, Osaka, Japan, 2024.
|
|
26
|
-
|
|
27
|
-
|
|
29
|
+
*IEEE International Conference on e-Science*, Osaka, Japan, 2024. <br/>
|
|
30
|
+
**About**: Explains how end-to-end provenance across edge, cloud, and HPC supports responsible, trustworthy, and energy-aware AI workflows. <br/>
|
|
31
|
+
[[doi]](https://doi.org/10.1109/e-Science62913.2024.10678731)
|
|
32
|
+
[[pdf]](https://hal.science/hal-04902079v1/document) <br/>
|
|
33
|
+
|
|
28
34
|
|
|
29
35
|
---
|
|
30
36
|
|
|
31
37
|
**LLM Agents for Interactive Workflow Provenance: Reference Architecture and Evaluation Methodology**
|
|
32
38
|
R. Souza, T. Poteet, B. Etz, D. Rosendo, A. Gueroudji, W. Shin, P. Balaprakash, and R. Ferreira da Silva,
|
|
33
39
|
*Workflows in Support of Large-Scale Science (WORKS) co-located with the ACM/IEEE International Conference for High Performance Computing, Networking, Storage, and Analysis (SC)*, St. Louis, USA, 2025.
|
|
34
|
-
|
|
40
|
+
**About**: Presents a reference architecture and evaluation method for LLM agents that query and act on large-scale provenance databases. </br>
|
|
41
|
+
[[doi]](https://doi.org/10.1145/3731599.3767582)
|
|
42
|
+
[[pdf]](https://arxiv.org/pdf/2509.13978)
|
|
43
|
+
[[html]](https://arxiv.org/html/2509.13978)
|
|
35
44
|
|
|
36
45
|
|
|
46
|
+
---
|
|
47
|
+
|
|
37
48
|
### Papers that used Flowcept
|
|
38
49
|
|
|
39
50
|
|
|
40
51
|
**Toward a Persistent Event-Streaming System for High-Performance Computing Applications**
|
|
41
52
|
M. Dorier, A. Gueroudji, V. Hayot-Sasson, H. Nguyen, S. Ockerman, R. Souza, T. Bicer, H. Pan, P. Carns, K. Chard, and others
|
|
42
|
-
*Frontiers in High Performance Computing*, 2025.
|
|
43
|
-
|
|
44
|
-
|
|
53
|
+
*Frontiers in High Performance Computing*, 2025. <br/>
|
|
54
|
+
**About**: Demonstrates Flowcept generating high-volume provenance that is persistently streamed with Mofka for HPC applications. <br/>
|
|
55
|
+
[[doi]](https://doi.org/10.3389/fhpcp.2025.1638203)
|
|
56
|
+
[[pdf]](https://web.cels.anl.gov/~woz/papers/Mofka_2025.pdf)
|
|
57
|
+
[[html]](https://www.frontiersin.org/journals/high-performance-computing/articles/10.3389/fhpcp.2025.1638203/full)
|
|
58
|
+
<br/>
|
|
59
|
+
|
|
45
60
|
|
|
46
61
|
---
|
|
47
62
|
|
|
48
63
|
**AI Agents for Enabling Autonomous Experiments at ORNL’s HPC and Manufacturing User Facilities**
|
|
49
64
|
D. Rosendo, S. DeWitt, R. Souza, P. Austria, T. Ghosal, M. McDonnell, R. Miller, T. Skluzacek, J. Haley, B. Turcksin, and others
|
|
50
|
-
*Extreme-Scale Experiment-in-the-Loop Computing (XLOOP) co-located with the ACM/IEEE International Conference for High Performance Computing, Networking, Storage, and Analysis (SC)*, 2025.
|
|
51
|
-
|
|
65
|
+
*Extreme-Scale Experiment-in-the-Loop Computing (XLOOP) co-located with the ACM/IEEE International Conference for High Performance Computing, Networking, Storage, and Analysis (SC)*, 2025. <br/>
|
|
66
|
+
**About**: Leverages Flowcept’s agentic provenance to coordinate multi-agent experiments and connect agents with HPC simulations through a shared provenance stream. <br/>
|
|
67
|
+
[[doi]](https://doi.org/10.1145/3731599.3767592)
|
|
68
|
+
[[pdf]](https://rafaelsilva.com/files/publications/rosendo2025xloop.pdf)
|
|
69
|
+
[[html]](https://camps.aptaracorp.com/ACM_PMS/PMS/ACM/SCWORKSHOPS25/253/0b09762d-8e84-11f0-957d-16ffd757ba29/OUT/scworkshops25-253.html)
|
|
52
70
|
|
|
53
71
|
---
|
|
54
72
|
|
|
@@ -123,6 +123,13 @@ def search_workflow(ntokens, dataset_ref, train_data_path, val_data_path, test_d
|
|
|
123
123
|
|
|
124
124
|
def start_dask(scheduler_file=None, start_dask_cluster=False, with_flowcept=True):
|
|
125
125
|
from distributed import Client
|
|
126
|
+
try:
|
|
127
|
+
# Downgrading eventual dask comm errors in the logs
|
|
128
|
+
import logging
|
|
129
|
+
logging.getLogger("distributed.worker").setLevel(logging.WARNING)
|
|
130
|
+
logging.getLogger("distributed.comm").setLevel(logging.WARNING)
|
|
131
|
+
except:
|
|
132
|
+
pass
|
|
126
133
|
|
|
127
134
|
if start_dask_cluster:
|
|
128
135
|
import subprocess
|
|
@@ -196,9 +203,17 @@ def close_dask(client, cluster, scheduler_file=None, start_dask_cluster=False, _
|
|
|
196
203
|
print("Flowcept consumer closed.")
|
|
197
204
|
else:
|
|
198
205
|
print("Closing dask...")
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
206
|
+
try:
|
|
207
|
+
client.close()
|
|
208
|
+
cluster.close()
|
|
209
|
+
print("Dask closed.")
|
|
210
|
+
except Exception as e:
|
|
211
|
+
print(f"Some exception when closing dask: {e}")
|
|
212
|
+
try:
|
|
213
|
+
import logging
|
|
214
|
+
logging.getLogger("distributed.worker").setLevel(logging.WARNING)
|
|
215
|
+
except:
|
|
216
|
+
pass
|
|
202
217
|
if _flowcept:
|
|
203
218
|
print("Now closing flowcept consumer...")
|
|
204
219
|
_flowcept.stop()
|
|
@@ -67,7 +67,7 @@ def all():
|
|
|
67
67
|
try:
|
|
68
68
|
success = run_test(max_runs=3, config=config)
|
|
69
69
|
if not success:
|
|
70
|
-
write_log(str(i) + "--> " + str(config))
|
|
70
|
+
write_log("GOT ERROR! " + str(i) + "--> " + str(config))
|
|
71
71
|
sys.exit(1)
|
|
72
72
|
except Exception as e:
|
|
73
73
|
write_exception(f"\n\n!!!!!!##### ERROR for combination {config}\n", e)
|
|
@@ -5,7 +5,7 @@ build-backend = "hatchling.build"
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "flowcept"
|
|
7
7
|
dynamic = ["version"]
|
|
8
|
-
requires-python = ">=3.
|
|
8
|
+
requires-python = ">=3.11"
|
|
9
9
|
|
|
10
10
|
authors = [{name = "Oak Ridge National Laboratory"}]
|
|
11
11
|
description = "Capture and query workflow provenance data using data observability"
|
|
@@ -65,7 +65,7 @@ mlflow = ["mlflow-skinny", "SQLAlchemy", "alembic", "watchdog", "cryptography"]
|
|
|
65
65
|
nvidia = ["nvidia-ml-py"]
|
|
66
66
|
mqtt = ["paho-mqtt"]
|
|
67
67
|
tensorboard = ["tensorboard", "tensorflow", "tbparse"]
|
|
68
|
-
llm_agent = ["mcp[cli]", "langchain_community", "langchain_openai", "streamlit", "PyMuPDF", "matplotlib"]
|
|
68
|
+
llm_agent = ["mcp[cli]", "langchain_community", "langchain_openai", "streamlit", "PyMuPDF", "matplotlib", "tabulate"]
|
|
69
69
|
llm_google = ["flowcept[llm_agent]", "google-genai"]
|
|
70
70
|
llm_agent_audio = ["flowcept[llm_agent]", "streamlit-mic-recorder", "SpeechRecognition", "pydub", "gTTS"]
|
|
71
71
|
# System dependency (required for pydub)
|
|
@@ -80,8 +80,9 @@ dev = [
|
|
|
80
80
|
"nbmake",
|
|
81
81
|
"pika",
|
|
82
82
|
"pytest",
|
|
83
|
+
"pytest-timeout",
|
|
83
84
|
"ruff",
|
|
84
|
-
"pyyaml"
|
|
85
|
+
"pyyaml"
|
|
85
86
|
]
|
|
86
87
|
# Torch and some other ml-specific libs, only used for dev purposes, require the following specific versions.
|
|
87
88
|
ml_dev = [
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
flowcept_version: 0.9.
|
|
1
|
+
flowcept_version: 0.9.18 # Version of the Flowcept package. This setting file is compatible with this version.
|
|
2
2
|
|
|
3
3
|
project:
|
|
4
4
|
debug: true # Toggle debug mode. This will add a property `debug: true` to all saved data, making it easier to retrieve/delete them later.
|
|
@@ -94,6 +94,7 @@ agent:
|
|
|
94
94
|
service_provider: '?'
|
|
95
95
|
model_kwargs: {}
|
|
96
96
|
audio_enabled: false
|
|
97
|
+
debug: true
|
|
97
98
|
|
|
98
99
|
databases:
|
|
99
100
|
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import os
|
|
2
|
+
import re
|
|
3
|
+
import unicodedata
|
|
2
4
|
from typing import Union, Dict
|
|
3
5
|
|
|
4
6
|
from flowcept.flowceptor.consumers.agent.base_agent_context_manager import BaseAgentContextManager
|
|
@@ -194,3 +196,43 @@ def build_llm_model(
|
|
|
194
196
|
if tool_task:
|
|
195
197
|
llm.parent_task_id = tool_task.task_id
|
|
196
198
|
return llm
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
def normalize_message(user_msg: str) -> str:
|
|
202
|
+
"""
|
|
203
|
+
Normalize a user message into a canonical, comparison-friendly form.
|
|
204
|
+
|
|
205
|
+
The function standardizes text by trimming whitespace, applying Unicode
|
|
206
|
+
normalization, normalizing dash characters, collapsing repeated whitespace,
|
|
207
|
+
removing trailing punctuation that does not affect semantics, and converting
|
|
208
|
+
the result to lowercase.
|
|
209
|
+
|
|
210
|
+
Parameters
|
|
211
|
+
----------
|
|
212
|
+
user_msg : str
|
|
213
|
+
Raw user input message.
|
|
214
|
+
|
|
215
|
+
Returns
|
|
216
|
+
-------
|
|
217
|
+
str
|
|
218
|
+
Normalized message suitable for matching, comparison, or hashing.
|
|
219
|
+
"""
|
|
220
|
+
# 1) Strip leading/trailing whitespace
|
|
221
|
+
user_msg = user_msg.strip()
|
|
222
|
+
|
|
223
|
+
# 2) Unicode normalize to avoid weird characters (like fancy quotes, dashes)
|
|
224
|
+
user_msg = unicodedata.normalize("NFKC", user_msg)
|
|
225
|
+
|
|
226
|
+
# 3) Normalize dashes commonly used in chemistry (C–H, C—H, etc.)
|
|
227
|
+
user_msg = user_msg.replace("–", "-").replace("—", "-")
|
|
228
|
+
|
|
229
|
+
# 4) Collapse multiple spaces / newlines into a single space
|
|
230
|
+
user_msg = re.sub(r"\s+", " ", user_msg)
|
|
231
|
+
|
|
232
|
+
# 5) Remove trailing punctuation that doesn't change semantics
|
|
233
|
+
# e.g., "?", "!", "." at the VERY end
|
|
234
|
+
user_msg = re.sub(r"[?!.\s]+$", "", user_msg)
|
|
235
|
+
|
|
236
|
+
user_msg = user_msg.lower()
|
|
237
|
+
|
|
238
|
+
return user_msg
|
|
@@ -20,11 +20,14 @@ def main():
|
|
|
20
20
|
def run():
|
|
21
21
|
uvicorn.run(mcp_flowcept.streamable_http_app, host=AGENT_HOST, port=AGENT_PORT, lifespan="on")
|
|
22
22
|
|
|
23
|
-
Thread(target=run)
|
|
23
|
+
server_thread = Thread(target=run, daemon=False)
|
|
24
|
+
server_thread.start()
|
|
24
25
|
sleep(2)
|
|
25
26
|
# Wake up tool call
|
|
26
27
|
print(run_tool(check_liveness, host=AGENT_HOST, port=AGENT_PORT)[0])
|
|
27
28
|
|
|
29
|
+
server_thread.join()
|
|
30
|
+
|
|
28
31
|
|
|
29
32
|
if __name__ == "__main__":
|
|
30
33
|
main()
|