AbstractRuntime 0.4.26__tar.gz → 0.4.28__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.
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/CHANGELOG.md +36 -1
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/PKG-INFO +25 -9
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/README.md +19 -3
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/README.md +2 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/api.md +30 -7
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/architecture.md +7 -3
- abstractruntime-0.4.28/docs/artifacts.md +149 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/README.md +4 -1
- abstractruntime-0.4.28/docs/backlog/completed/0041_runtime_hardware_extras_avoid_nonpermissive_document_stacks.md +41 -0
- abstractruntime-0.4.28/docs/backlog/completed/0042_core_vision_upscale_and_parameter_surface.md +80 -0
- abstractruntime-0.4.28/docs/backlog/completed/0043_runtime_vision_adapter_and_batch_surface.md +67 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/faq.md +1 -1
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/getting-started.md +2 -2
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/integrations/abstractcore.md +55 -5
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/troubleshooting.md +2 -2
- abstractruntime-0.4.28/llms-full.txt +4213 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/llms.txt +8 -5
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/pyproject.toml +6 -6
- abstractruntime-0.4.28/release-notes.md +20 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/__init__.py +4 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/core/runtime.py +24 -0
- abstractruntime-0.4.28/src/abstractruntime/documents/__init__.py +5 -0
- abstractruntime-0.4.28/src/abstractruntime/documents/pdf.py +369 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/history_bundle.py +224 -25
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/discovery_facade.py +33 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/discovery_queries.py +169 -5
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/effect_handlers.py +39 -5
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/factory.py +4 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/llm_client.py +1426 -145
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/media_subprocess.py +168 -25
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/output_specs.py +2 -2
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/run_facade.py +24 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/workspace_scoped_tools.py +88 -91
- abstractruntime-0.4.28/src/abstractruntime/storage/artifacts.py +2008 -0
- abstractruntime-0.4.28/src/abstractruntime/utils/__init__.py +31 -0
- abstractruntime-0.4.28/src/abstractruntime/utils/file_filters.py +189 -0
- abstractruntime-0.4.28/src/abstractruntime/utils/workspace_paths.py +200 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/adapters/effect_adapter.py +6 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/compiler.py +69 -3
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/visual/builtins.py +69 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/visual/executor.py +751 -29
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_abstractcore_discovery_facade.py +273 -1
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_abstractcore_run_facade.py +199 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_artifacts.py +225 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_llm_call_response_schema_normalization.py +28 -1
- abstractruntime-0.4.28/tests/test_llm_client_system_context.py +620 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_media_artifact_resolution.py +1 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_model_residency_control_plane.py +3 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_multimodal_abstractcore_integration.py +1104 -88
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_packaging_extras.py +18 -3
- abstractruntime-0.4.28/tests/test_provider_endpoint_profile_resolution.py +283 -0
- abstractruntime-0.4.28/tests/test_run_history_bundle.py +462 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_runtime_llm_call_grounding_in_ledger.py +4 -2
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_session_attachments_registry_and_open_tool.py +4 -8
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visual_agent_output_context_includes_messages.py +70 -0
- abstractruntime-0.4.28/tests/test_visualflow_capability_routes_and_thinking.py +202 -0
- abstractruntime-0.4.28/tests/test_visualflow_edit_json_schema_node.py +105 -0
- abstractruntime-0.4.28/tests/test_visualflow_file_nodes_workspace.py +501 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visualflow_llm_call_multimodal_output.py +61 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visualflow_media_nodes.py +127 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visualflow_prompt_only.py +49 -0
- abstractruntime-0.4.28/tests/test_visualflow_schema_enum_switch.py +391 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visualflow_string_contains_replace.py +11 -1
- abstractruntime-0.4.28/tests/test_workspace_policy_mount_virtual_paths.py +137 -0
- abstractruntime-0.4.26/llms-full.txt +0 -428
- abstractruntime-0.4.26/release-notes.md +0 -6
- abstractruntime-0.4.26/src/abstractruntime/storage/artifacts.py +0 -674
- abstractruntime-0.4.26/tests/test_llm_client_system_context.py +0 -275
- abstractruntime-0.4.26/tests/test_provider_endpoint_profile_resolution.py +0 -130
- abstractruntime-0.4.26/tests/test_run_history_bundle.py +0 -178
- abstractruntime-0.4.26/tests/test_workspace_policy_mount_virtual_paths.py +0 -56
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/.github/workflows/ci.yml +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/.github/workflows/release.yml +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/.gitignore +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/ACKNOWLEDGMENTS.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/CODE_OF_CONDUCT.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/CONTRIBUTING.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/LICENSE +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/ROADMAP.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/SECURITY.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/adr/0001_layered_coupling_with_abstractcore.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/adr/0002_execution_modes_local_remote_hybrid.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/adr/0003_provenance_tamper_evident_hash_chain.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/adr/0004_runtime_owns_run_scoped_media_execution_truth.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/adr/0005_runtime_owns_abstractcore_host_discovery_queries.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/adr/0006_runtime_owns_durable_abstractcore_bloc_prompt_cache.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/adr/0007_runtime_relays_core_owned_model_residency_truth.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/adr/README.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/001_runtime_kernel.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/002_persistence_and_ledger.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/0030_runtime_host_facades_for_comms_telegram_and_tool_specs.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/0032_runtime_durable_outbound_comms_truth.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/0033_runtime_host_local_prompt_cache_export_import_surface.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/0035_model_residency_provider_truth_for_local_http_clients.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/0037_visualflow_generate_music_node_compiler_parity.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/0039_runtime_music_structure_prompt_bool_contract.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/003_wait_primitives.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/0040_task_agnostic_local_residency_listing.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/004_scheduler_driver.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/005_abstractcore_integration.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/006_snapshots_bookmarks.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/007_provenance_hash_chain.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/009_artifact_store.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/010_examples_and_composition.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/011_subworkflow_support.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/012_run_store_query_and_scheduler_support.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/013_effect_retries_and_idempotency.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/016_runtime_aware_parameters.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/019_runtime_host_facade_for_core_operator_surfaces.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/020_runtime_gateway_install_boundary.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/021_runtime_gateway_env_namespace_cleanup.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/022_model_residency_control_plane.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/023_truthful_local_media_residency_boundaries.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/024_runtime_owned_run_scoped_media_execution.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/026_runtime_host_discovery_facade_for_core_catalogs.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/027_runtime_durable_bloc_prompt_cache_facade.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/028_runtime_bloc_kv_lifecycle_and_pruning.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/completed/029_runtime_music_generation_and_discovery_via_abstractcore.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/deprecated/001_integrations_abstractcore.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/deprecated/001_runtime_kernel.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/deprecated/002_persistence_and_ledger.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/deprecated/002_snapshots_bookmarks.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/deprecated/0034_agent_runtime_convenience_constructor.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/deprecated/003_provenance_ledger_chain.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/deprecated/003_wait_resume_and_scheduler.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/deprecated/004_effect_handlers_and_integrations.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/deprecated/004_tests.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/deprecated/005_docs_updates.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/deprecated/005_examples_and_composition.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/deprecated/006_ai_fingerprint_and_provenance.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/deprecated/DEPRECATED_README.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/deprecated/README.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/deprecated/abstractruntime_docs_final_02a7373b.plan.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/planned/008_signatures_and_keys.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/planned/014_remote_tool_worker_executor.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/planned/017_limit_warnings_and_observability.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/planned/018_workspace_access_policy_for_media_and_tools.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/planned/025_runtime_retention_and_purge_contract.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/proposed/0031_runtime_tool_spec_adapters_for_gateway_and_mcp.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/proposed/0036_local_media_residency_bridge_to_core_residency.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/backlog/proposed/0038_core_server_pool_residency_affinity.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/evidence.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/limits.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/manual_testing.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/mcp-worker.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/proposal.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/provenance.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/snapshots.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/tools-comms.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/docs/workflow-bundles.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/emails.config.example.yaml +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/examples/01_hello_world.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/examples/02_ask_user.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/examples/03_wait_until.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/examples/04_multi_step.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/examples/05_persistence.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/examples/06_llm_integration.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/examples/07_react_agent.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/examples/README.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/mkdocs.yml +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/pytest.ini +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/core/__init__.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/core/config.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/core/event_keys.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/core/models.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/core/policy.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/core/run_lifecycle.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/core/spec.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/core/vars.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/evidence/__init__.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/evidence/recorder.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/identity/__init__.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/identity/fingerprint.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/__init__.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/__init__.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/comms_facade.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/constants.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/default_tools.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/embeddings_client.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/host_facade.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/logging.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/mcp_worker.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/observability.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/session_attachments.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/summarizer.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/telegram_facade.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractcore/tool_executor.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractmemory/__init__.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/integrations/abstractmemory/effect_handlers.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/memory/__init__.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/memory/active_context.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/memory/active_memory.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/memory/compaction.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/memory/kg_packets.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/memory/memact_composer.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/memory/recall_levels.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/memory/token_budget.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/rendering/__init__.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/rendering/agent_trace_report.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/rendering/json_stringify.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/scheduler/__init__.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/scheduler/convenience.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/scheduler/registry.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/scheduler/scheduler.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/storage/__init__.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/storage/base.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/storage/commands.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/storage/in_memory.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/storage/json_files.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/storage/ledger_chain.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/storage/observable.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/storage/offloading.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/storage/snapshots.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/storage/sqlite.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/__init__.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/adapters/__init__.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/adapters/agent_adapter.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/adapters/context_adapter.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/adapters/control_adapter.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/adapters/event_adapter.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/adapters/function_adapter.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/adapters/memact_adapter.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/adapters/subflow_adapter.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/adapters/variable_adapter.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/flow.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/visual/__init__.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/visual/agent_ids.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/visual/code_executor.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/visual/execution_metrics.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/visual/models.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/visualflow_compiler/visual/multi_entry_lowering.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/workflow_bundle/__init__.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/workflow_bundle/models.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/workflow_bundle/packer.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/workflow_bundle/reader.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/src/abstractruntime/workflow_bundle/registry.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/README.md +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/conftest.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_abstractcore_comms_facade.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_abstractcore_host_facade.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_abstractcore_telegram_facade.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_active_context_policy.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_active_memory.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_answer_user_effect.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_chat_summarizer_integration.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_command_store.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_compaction_helpers.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_control_adapter_while.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_default_tools_comms_gating.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_default_tools_include_skim_files.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_default_tools_include_skim_folders.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_default_tools_search_files_executor.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_durable_toolsets.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_e2e_tool_calls_idempotency_lmstudio.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_emit_event_without_workflow_registry.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_evidence_recorder.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_factory_timeouts_default_to_abstractcore_config.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_integration_abstractcore.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_integrations_abstractcore.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_json_file_run_store_children_index.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_jsonl_ledger_recovery.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_kg_learn_and_recall_contract.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_ledger_chain.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_ledger_subscription.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_llm_call_media_artifact_refs.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_llm_call_media_artifact_refs_persist_across_restart.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_llm_call_media_uses_source_path_label.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_llm_call_requires_prompt.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_llm_call_structured_output_fallback.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_llm_call_truncation_retry_contract.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_llm_call_use_context_appends_turn.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_llm_call_verbatim_payload_capture.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_llm_client_media_artifacts.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_llm_client_tool_call_parsing.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_local_runtime_timeout_kwarg_policy.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_mcp_remote_tool_executor.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_mcp_worker_logging.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_mcp_worker_security.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_mcp_worker_stdio.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_memact_composer_from_kg_result.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_memory_kg_assert_attributes_defaults.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_memory_kg_packets.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_memory_kg_predicate_aliasing.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_memory_kg_query_packetization_restart.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_memory_kg_query_recall_level_policy.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_memory_kg_semantic_query_ranking.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_memory_note_effect.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_memory_query_effect.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_memory_query_rich_filters.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_memory_scope_and_rehydrate_effect.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_memory_tag_effect.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_mlx_generation_serialization.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_offloading.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_pause_resume.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_prompt_cache_export_import.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_prompt_cache_modules.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_queryable_run_store.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_read_file_fallback_to_session_attachments.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_real_integration.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_recall_levels_policy.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_remote_llm_client.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_rendering_agent_trace_report.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_rendering_json_stringify.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_retry_idempotency.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_runtime_config_max_output_tokens_fallback.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_runtime_effect_invocation_trace.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_runtime_install_boundary.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_runtime_node_traces.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_runtime_start_seeds_tool_support.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_scheduler.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_snapshots.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_sqlite_ledger_store.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_start_subworkflow_async_wait.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_start_subworkflow_inherit_context_merges_messages.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_start_subworkflow_workspace_inheritance.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_storage_deletion.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_structured_output_schema_enum.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_subworkflow.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_terminal_effect_completion.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_terminal_resume_appends_ledger_completion.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_tick_completion_includes_output_in_ledger.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_tool_approval_executor.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_tool_approval_resume_executes.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_tool_calls_idempotency_keys.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_tool_executor_argument_sanitization.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_tool_executor_error_output_detection.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_tool_executor_filename_alias.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_tool_executor_kwarg_canonicalization.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_tool_executor_read_file_aliases.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_tool_executor_timeout.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_tool_wait_allowlist_safety.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_trace_context_propagation.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_vars_query_effect.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visual_agent_tool_observations_persist_across_restart.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visual_agent_use_context_inherits_attachments.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visual_agent_use_context_persists_tool_observations.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visual_agent_use_context_persists_turn.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visual_llm_call_schema_ref_resolution.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visual_memact_compose_node.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visual_memory_kg_query_outputs_propagate.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visual_memory_kg_resolve_outputs_propagate.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visual_multi_entry_loop_overrides.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visualflow_add_message_builtin.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visualflow_add_message_node_appends_to_active_context.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visualflow_call_tool_node.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visualflow_compiler_basic.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visualflow_context_and_builder_nodes.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visualflow_get_element_node.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visualflow_get_random_element_node.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visualflow_has_tools_builtin.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visualflow_llm_call_context_attachments_map_to_media.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visualflow_make_object_node.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visualflow_memory_effect_nodes.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visualflow_memory_source_pins.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visualflow_random_nodes.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_visualflow_tool_parameters_node.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_wait_event_prompt_metadata.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_workflow_bundle_registry.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_workspace_policy_allowlist_mode.py +0 -0
- {abstractruntime-0.4.26 → abstractruntime-0.4.28}/tests/test_workspace_policy_tool_calls_persist_across_restart.py +0 -0
|
@@ -7,6 +7,39 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.4.28] - 2026-06-06
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- VisualFlow `read_pdf` and `write_pdf` document nodes. `read_pdf` extracts PDF text/metadata with `pypdf`; `write_pdf` renders text or Markdown-style content to real PDF bytes with `reportlab` while keeping run state JSON-safe.
|
|
14
|
+
- Runtime discovery now exposes installed compatible vision adapters through `list_vision_adapters(...)`.
|
|
15
|
+
- Runtime's local/remote image and video media helpers now preserve task-specific batch generation controls (`count` / `n`, `seeds`) and ordered `lora_adapters`, and VisualFlow media nodes now lower those fields for image generation, image edit, text-to-video, and image-to-video.
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
- Runtime's base dependency path no longer selects AbstractCore's media extra or direct PyMuPDF/PyMuPDF4LLM/PyMuPDF-layout packages for VisualFlow PDF support.
|
|
19
|
+
- Raised the AbstractCore dependency floor to `abstractcore>=2.13.37`, matching the released Core/Vision adapter, batch-generation, and media-parameter contract used by Runtime's base and hardware profiles.
|
|
20
|
+
- Forwarded newer Core/Vision controls such as `guidance_2`, `flow_shift`, and image-upscaler parameters through generated-media execution.
|
|
21
|
+
- The per-turn `<runtime_metadata>` prompt envelope is now temporal-only by default (`local_datetime` plus a country-free `display`). Full grounding remains in result metadata (`runtime_grounding`); operators can opt fields back into the prompt with `ABSTRACTRUNTIME_GROUNDING_PROMPT_FIELDS` (comma-separated subset of `local_datetime,timezone,country,user,display`).
|
|
22
|
+
- When the runtime injects a `<runtime_metadata>` envelope into the user turn, it now also appends a stable "RUNTIME GROUNDING" contract to the system prompt explaining that the envelope is machine context, not a user language/locale preference.
|
|
23
|
+
|
|
24
|
+
### Fixed
|
|
25
|
+
- Markdown-to-PDF rendering now handles ATX heading levels 1 through 6, preventing deeper headings such as `####` from appearing as literal paragraph text in generated PDFs.
|
|
26
|
+
- VisualFlow LLM Call and Agent structured outputs now expose the parsed object on the `data` output while preserving the existing textual `response` output.
|
|
27
|
+
- VisualFlow LLM Call nodes now preserve inline `resp_schema` / `response_schema` constraints when provider and model are left on Auto, so Gateway/Core default routing still receives a structured-output `response_model`.
|
|
28
|
+
- VisualFlow `answer_user` lowering now always emits a string `message` payload, preventing connected-but-null message inputs from creating invalid `ANSWER_USER` effects.
|
|
29
|
+
- Structured-output field descriptions from JSON Schema now survive Runtime's Pydantic response-model conversion, so providers receive the same guidance authored in Flow.
|
|
30
|
+
- Local subprocess media execution now supports task-compatible image edit and image upscaling inputs under the same durable image/video contract as in-process Runtime media calls.
|
|
31
|
+
- Runtime now ships its own workspace-path and file-filter helper modules instead of importing unreleased AbstractCore internals, so published installs and release CI use the same supported dependency surface.
|
|
32
|
+
|
|
33
|
+
## [0.4.27] - 2026-06-03
|
|
34
|
+
|
|
35
|
+
### Changed
|
|
36
|
+
- Raised the AbstractCore dependency floor to `abstractcore>=2.13.32` so Runtime hosts inherit provider endpoint profiles, route-specific multimodal defaults, and updated audio-understanding model metadata.
|
|
37
|
+
- Updated AbstractCore discovery integration to expose Gateway/Core capability defaults, provider endpoint profiles, and route-specific media catalogs to thin clients.
|
|
38
|
+
|
|
39
|
+
### Fixed
|
|
40
|
+
- LLM and generated-media execution now resolves Gateway/Core default provider and model selections when VisualFlow nodes leave provider/model on Auto.
|
|
41
|
+
- Media artifact resolution and VisualFlow generated-media calls now preserve uploaded artifacts and progress callbacks across Runtime/AbstractCore boundaries.
|
|
42
|
+
|
|
10
43
|
## [0.4.26] - 2026-05-31
|
|
11
44
|
|
|
12
45
|
### Changed
|
|
@@ -579,7 +612,9 @@ AbstractRuntime is the durable execution substrate designed to pair with Abstrac
|
|
|
579
612
|
|
|
580
613
|
Initial development version with basic proof-of-concept features.
|
|
581
614
|
|
|
582
|
-
[Unreleased]: https://github.com/lpalbou/abstractruntime/compare/v0.4.
|
|
615
|
+
[Unreleased]: https://github.com/lpalbou/abstractruntime/compare/v0.4.28...HEAD
|
|
616
|
+
[0.4.28]: https://github.com/lpalbou/abstractruntime/compare/v0.4.27...v0.4.28
|
|
617
|
+
[0.4.27]: https://github.com/lpalbou/abstractruntime/compare/v0.4.26...v0.4.27
|
|
583
618
|
[0.4.26]: https://github.com/lpalbou/abstractruntime/compare/v0.4.25...v0.4.26
|
|
584
619
|
[0.4.25]: https://github.com/lpalbou/abstractruntime/compare/v0.4.24...v0.4.25
|
|
585
620
|
[0.4.24]: https://github.com/lpalbou/abstractruntime/compare/v0.4.23...v0.4.24
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: AbstractRuntime
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.28
|
|
4
4
|
Summary: AbstractRuntime: a durable graph runner designed to pair with AbstractCore.
|
|
5
5
|
Project-URL: AbstractCore (website), https://www.abstractcore.ai/
|
|
6
6
|
Project-URL: AbstractRuntime (GitHub), https://github.com/lpalbou/abstractruntime
|
|
@@ -20,7 +20,7 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.12
|
|
21
21
|
Classifier: Programming Language :: Python :: 3.13
|
|
22
22
|
Requires-Python: >=3.10
|
|
23
|
-
Requires-Dist: abstractcore[audio,
|
|
23
|
+
Requires-Dist: abstractcore[audio,music,remote,tools,vision,voice]>=2.13.37
|
|
24
24
|
Requires-Dist: abstractmemory>=0.2.6
|
|
25
25
|
Requires-Dist: abstractsemantics>=0.0.3
|
|
26
26
|
Requires-Dist: anyio<5.0.0,>=4.12.1
|
|
@@ -28,19 +28,19 @@ Requires-Dist: httpx<1.0.0,>=0.28.1
|
|
|
28
28
|
Requires-Dist: openai<2.0.0,>=1.109.1
|
|
29
29
|
Requires-Dist: pandas<3.0.0,>=1.0.0
|
|
30
30
|
Requires-Dist: pillow<13.0.0,>=10.0.0
|
|
31
|
-
Requires-Dist:
|
|
32
|
-
Requires-Dist: pymupdf4llm<1.0.0,>=0.0.20
|
|
31
|
+
Requires-Dist: pypdf<7.0.0,>=6.0.0
|
|
33
32
|
Requires-Dist: python-pptx<2.0.0,>=1.0.2
|
|
33
|
+
Requires-Dist: reportlab<5.0.0,>=4.0.0
|
|
34
34
|
Requires-Dist: unstructured[docx,odt,pptx,rtf,xlsx]<0.19.0,>=0.18.32
|
|
35
35
|
Provides-Extra: apple
|
|
36
|
-
Requires-Dist: abstractcore[all-apple]>=2.13.
|
|
36
|
+
Requires-Dist: abstractcore[all-apple]>=2.13.37; extra == 'apple'
|
|
37
37
|
Requires-Dist: setuptools<82.0.0,>=80.10.2; extra == 'apple'
|
|
38
38
|
Provides-Extra: docs
|
|
39
39
|
Requires-Dist: mkdocs-material>=9.0.0; extra == 'docs'
|
|
40
40
|
Requires-Dist: mkdocs>=1.6.0; extra == 'docs'
|
|
41
41
|
Requires-Dist: pymdown-extensions>=10.0; extra == 'docs'
|
|
42
42
|
Provides-Extra: gpu
|
|
43
|
-
Requires-Dist: abstractcore[all-gpu]>=2.13.
|
|
43
|
+
Requires-Dist: abstractcore[all-gpu]>=2.13.37; extra == 'gpu'
|
|
44
44
|
Requires-Dist: setuptools<82.0.0,>=80.10.2; extra == 'gpu'
|
|
45
45
|
Provides-Extra: test
|
|
46
46
|
Requires-Dist: pytest>=7.0.0; extra == 'test'
|
|
@@ -52,7 +52,7 @@ Description-Content-Type: text/markdown
|
|
|
52
52
|
|
|
53
53
|
It is designed for long-running workflows that must survive restarts and explicitly model blocking (human input, timers, external events, subworkflows) without keeping Python stacks alive.
|
|
54
54
|
|
|
55
|
-
**Version:** 0.4.
|
|
55
|
+
**Version:** 0.4.28 • **Python:** 3.10+
|
|
56
56
|
|
|
57
57
|
**Status:** pre-1.0 (API may evolve). For production use, pin versions and follow `CHANGELOG.md`.
|
|
58
58
|
|
|
@@ -80,13 +80,18 @@ Remote-light runtime:
|
|
|
80
80
|
pip install abstractruntime
|
|
81
81
|
```
|
|
82
82
|
|
|
83
|
-
The base install includes AbstractCore 2.13.
|
|
84
|
-
tool,
|
|
83
|
+
The base install includes AbstractCore 2.13.37 or newer with remote provider,
|
|
84
|
+
tool, vision, voice, audio, and music integration, plus the
|
|
85
85
|
`abstractruntime-mcp-worker` entry point. It keeps inference remote/light by
|
|
86
86
|
default: local engines such as MLX, vLLM, HuggingFace/Torch, Diffusers, and
|
|
87
87
|
sentence-transformer embeddings are not selected unless you choose a hardware
|
|
88
88
|
profile or another package-specific local extra.
|
|
89
89
|
|
|
90
|
+
VisualFlow PDF document nodes use permissive dependencies in Runtime's base
|
|
91
|
+
install: `Read PDF` extracts text and metadata with `pypdf`, and `Write PDF`
|
|
92
|
+
renders text or Markdown-style report content to real PDF bytes with
|
|
93
|
+
`reportlab`.
|
|
94
|
+
|
|
90
95
|
Native Python hardware profiles add local inferencer stacks:
|
|
91
96
|
|
|
92
97
|
```bash
|
|
@@ -159,6 +164,17 @@ Drivers + distribution:
|
|
|
159
164
|
- scheduler: `create_scheduled_runtime()` (`src/abstractruntime/scheduler/*`)
|
|
160
165
|
- VisualFlow compiler + WorkflowBundles (`src/abstractruntime/visualflow_compiler/*`, `src/abstractruntime/workflow_bundle/*`)
|
|
161
166
|
- VisualFlow multi-entry execution lowering for fan-in routes and per-entry input overrides (`docs/workflow-bundles.md`)
|
|
167
|
+
- VisualFlow LLM Call and Agent nodes propagate Core generation params such as
|
|
168
|
+
`thinking` through Runtime effects. Provider Models nodes can apply Core
|
|
169
|
+
`capability_route` filters so run-time model discovery matches Gateway/Flow
|
|
170
|
+
authoring.
|
|
171
|
+
- VisualFlow image/video nodes and Runtime media helpers preserve task-specific
|
|
172
|
+
Core media controls, including `count`/`n`, `seeds`, ordered
|
|
173
|
+
`lora_adapters`, and video `flow_shift`, while keeping provider/model/task
|
|
174
|
+
truth in AbstractCore and AbstractVision.
|
|
175
|
+
- VisualFlow structured LLM/Agent results preserve `response` as text and expose
|
|
176
|
+
the schema-conformant object on `data`, so Break Object and Switch can consume
|
|
177
|
+
fields without reparsing the response string.
|
|
162
178
|
- run history export: `export_run_history_bundle(...)` (`src/abstractruntime/history_bundle.py`)
|
|
163
179
|
|
|
164
180
|
Runtime-owned integrations:
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
It is designed for long-running workflows that must survive restarts and explicitly model blocking (human input, timers, external events, subworkflows) without keeping Python stacks alive.
|
|
6
6
|
|
|
7
|
-
**Version:** 0.4.
|
|
7
|
+
**Version:** 0.4.28 • **Python:** 3.10+
|
|
8
8
|
|
|
9
9
|
**Status:** pre-1.0 (API may evolve). For production use, pin versions and follow `CHANGELOG.md`.
|
|
10
10
|
|
|
@@ -32,13 +32,18 @@ Remote-light runtime:
|
|
|
32
32
|
pip install abstractruntime
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
The base install includes AbstractCore 2.13.
|
|
36
|
-
tool,
|
|
35
|
+
The base install includes AbstractCore 2.13.37 or newer with remote provider,
|
|
36
|
+
tool, vision, voice, audio, and music integration, plus the
|
|
37
37
|
`abstractruntime-mcp-worker` entry point. It keeps inference remote/light by
|
|
38
38
|
default: local engines such as MLX, vLLM, HuggingFace/Torch, Diffusers, and
|
|
39
39
|
sentence-transformer embeddings are not selected unless you choose a hardware
|
|
40
40
|
profile or another package-specific local extra.
|
|
41
41
|
|
|
42
|
+
VisualFlow PDF document nodes use permissive dependencies in Runtime's base
|
|
43
|
+
install: `Read PDF` extracts text and metadata with `pypdf`, and `Write PDF`
|
|
44
|
+
renders text or Markdown-style report content to real PDF bytes with
|
|
45
|
+
`reportlab`.
|
|
46
|
+
|
|
42
47
|
Native Python hardware profiles add local inferencer stacks:
|
|
43
48
|
|
|
44
49
|
```bash
|
|
@@ -111,6 +116,17 @@ Drivers + distribution:
|
|
|
111
116
|
- scheduler: `create_scheduled_runtime()` (`src/abstractruntime/scheduler/*`)
|
|
112
117
|
- VisualFlow compiler + WorkflowBundles (`src/abstractruntime/visualflow_compiler/*`, `src/abstractruntime/workflow_bundle/*`)
|
|
113
118
|
- VisualFlow multi-entry execution lowering for fan-in routes and per-entry input overrides (`docs/workflow-bundles.md`)
|
|
119
|
+
- VisualFlow LLM Call and Agent nodes propagate Core generation params such as
|
|
120
|
+
`thinking` through Runtime effects. Provider Models nodes can apply Core
|
|
121
|
+
`capability_route` filters so run-time model discovery matches Gateway/Flow
|
|
122
|
+
authoring.
|
|
123
|
+
- VisualFlow image/video nodes and Runtime media helpers preserve task-specific
|
|
124
|
+
Core media controls, including `count`/`n`, `seeds`, ordered
|
|
125
|
+
`lora_adapters`, and video `flow_shift`, while keeping provider/model/task
|
|
126
|
+
truth in AbstractCore and AbstractVision.
|
|
127
|
+
- VisualFlow structured LLM/Agent results preserve `response` as text and expose
|
|
128
|
+
the schema-conformant object on `data`, so Break Object and Switch can consume
|
|
129
|
+
fields without reparsing the response string.
|
|
114
130
|
- run history export: `export_run_history_bundle(...)` (`src/abstractruntime/history_bundle.py`)
|
|
115
131
|
|
|
116
132
|
Runtime-owned integrations:
|
|
@@ -26,8 +26,10 @@ In this repo, the AbstractCore wiring lives under `src/abstractruntime/integrati
|
|
|
26
26
|
- `faq.md` — common questions (recommended)
|
|
27
27
|
- `troubleshooting.md` — symptom-oriented setup, runtime, and integration fixes
|
|
28
28
|
- `manual_testing.md` — manual smoke tests and how to run the test suite
|
|
29
|
+
- `artifacts.md` — Runtime artifact identity, descriptors, provenance, catalog search, and access stats
|
|
29
30
|
- `integrations/abstractcore.md` — wiring `LLM_CALL` / `TOOL_CALLS`, cached sessions, durable bloc prompt-cache control, media inputs, generated media outputs, video progress events, and tool approval waits via AbstractCore
|
|
30
31
|
- `tools-comms.md` — enabling the optional comms toolset (email/WhatsApp/Telegram)
|
|
32
|
+
- `api.md#workflowbundles-flow-and-visualflow-distribution` — VisualFlow compiler APIs, media nodes, and PDF document nodes (`read_pdf` / `write_pdf`)
|
|
31
33
|
|
|
32
34
|
## Features (reference)
|
|
33
35
|
|
|
@@ -117,11 +117,17 @@ These APIs are exported at the package root (see `src/abstractruntime/__init__.p
|
|
|
117
117
|
## Artifacts (store by reference)
|
|
118
118
|
|
|
119
119
|
Implementation: `src/abstractruntime/storage/artifacts.py`.
|
|
120
|
+
Deep dive: `artifacts.md`.
|
|
120
121
|
|
|
121
122
|
Key types:
|
|
122
123
|
- `ArtifactStore` (interface), `InMemoryArtifactStore`, `FileArtifactStore`
|
|
123
124
|
- helpers: `artifact_ref(...)`, `resolve_artifact(...)`, `is_artifact_ref(...)`
|
|
124
125
|
|
|
126
|
+
The store keeps payload bytes out of run state and persists structured metadata:
|
|
127
|
+
- `ArtifactDescriptor` is the Runtime-owned descriptor used by Gateway and Observer. It separates `semantic_kind` such as `voice`, `music`, `sound`, or `image` from `render_kind` such as `audio`, `markdown`, `html`, or `json`, and can carry workflow/node/turn links, media facts, generation/provenance data, source refs, security, and action links.
|
|
128
|
+
- `ArtifactAccessStats` records explicit metadata/content/preview/download/export actions when HTTP or UI layers call `record_access(...)`. Plain `load(...)` and `get_metadata(...)` remain side-effect free.
|
|
129
|
+
- `search(...)`, `count(...)`, `facet_counts(...)`, and `stats(...)` provide metadata queries for host control planes. `FileArtifactStore` serves these from a repairable SQLite catalog when possible, including exact `total`, `total_bytes`, and requested facet counts without forcing Gateway/Observer to load every matching artifact.
|
|
130
|
+
|
|
125
131
|
Artifacts are used by:
|
|
126
132
|
- offloading wrappers (`src/abstractruntime/storage/offloading.py`)
|
|
127
133
|
- evidence capture (`docs/evidence.md`, `src/abstractruntime/evidence/recorder.py`)
|
|
@@ -156,9 +162,23 @@ VisualFlow compiler helpers are available from `abstractruntime.visualflow_compi
|
|
|
156
162
|
- `visual_to_flow(...)` lowers VisualFlow into the internal Flow IR.
|
|
157
163
|
- `compile_visualflow(...)` and `compile_visualflow_tree(...)` compile VisualFlow JSON into executable `WorkflowSpec` objects.
|
|
158
164
|
|
|
159
|
-
VisualFlow authoring note (media nodes):
|
|
160
|
-
- Runtime recognizes first-class VisualFlow media nodes such as `generate_image`, `edit_image`, `image_to_image`, `generate_video`, `text_to_video`, `image_to_video`, `generate_voice`, `generate_music`, `transcribe_audio`, and `listen_voice`.
|
|
165
|
+
VisualFlow authoring note (media and document nodes):
|
|
166
|
+
- Runtime recognizes first-class VisualFlow media nodes such as `generate_image`, `edit_image`, `image_to_image`, `upscale_image`, `image_upscale`, `generate_video`, `text_to_video`, `image_to_video`, `generate_voice`, `generate_music`, `transcribe_audio`, and `listen_voice`.
|
|
161
167
|
- Generated-media and transcription nodes lower to a durable `EffectType.LLM_CALL` with an `output` selector (for example `{"modality":"music","task":"music_generation"}`), while `listen_voice` lowers to `WAIT_EVENT`. Hosts should persist the authoring node type rather than pre-lowering to `llm_call`.
|
|
168
|
+
- Runtime also recognizes file/document nodes. `read_file` and `write_file`
|
|
169
|
+
handle UTF-8 text/JSON workspace paths. In Gateway-hosted runs, those paths
|
|
170
|
+
follow the shared canonical contract: `rel/path` for the main workspace root
|
|
171
|
+
and `mount_alias/rel/path` for approved mounts. `read_pdf` extracts text and
|
|
172
|
+
metadata from PDF paths with `pypdf`; `write_pdf` renders text or
|
|
173
|
+
Markdown-style content to real PDF bytes with `reportlab`; `list_folder_files`
|
|
174
|
+
enumerates workspace-scoped folders with family/extension filters;
|
|
175
|
+
`import_workspace_file` snapshots a workspace file into a durable artifact;
|
|
176
|
+
`read_artifact` projects saved file content back out as text/JSON/bounded
|
|
177
|
+
binary metadata; and `export_artifact` writes a durable artifact back to a
|
|
178
|
+
workspace path. PDF bytes are written to the workspace path and only
|
|
179
|
+
JSON-safe metadata/path values are stored in run state. In local Runtime-only
|
|
180
|
+
runs with no workspace scope, relative file-node paths still fall back to the
|
|
181
|
+
process working directory.
|
|
162
182
|
|
|
163
183
|
Public bundle APIs are exported from `src/abstractruntime/workflow_bundle/__init__.py` and re-exported in `src/abstractruntime/__init__.py`:
|
|
164
184
|
- open: `open_workflow_bundle(...)`
|
|
@@ -180,7 +200,7 @@ This produces a portable record of a run’s state + ledger + artifacts suitable
|
|
|
180
200
|
|
|
181
201
|
### AbstractCore (LLM + tools)
|
|
182
202
|
|
|
183
|
-
Requires: `pip install abstractruntime` (AbstractCore 2.13.
|
|
203
|
+
Requires: `pip install abstractruntime` (AbstractCore 2.13.37 or newer is part of the base install).
|
|
184
204
|
|
|
185
205
|
Implementation: `src/abstractruntime/integrations/abstractcore/*`.
|
|
186
206
|
|
|
@@ -193,11 +213,14 @@ Entry points:
|
|
|
193
213
|
- public durable run facade: `AbstractCoreRunFacade`, `get_abstractcore_run_facade(...)` (`src/abstractruntime/integrations/abstractcore/run_facade.py`)
|
|
194
214
|
- effect handler wiring: `build_effect_handlers(...)` (`src/abstractruntime/integrations/abstractcore/effect_handlers.py`)
|
|
195
215
|
- tool executors: `MappingToolExecutor`, `AbstractCoreToolExecutor`, `PassthroughToolExecutor`, `ApprovalToolExecutor`, `ToolApprovalPolicy` (`src/abstractruntime/integrations/abstractcore/tool_executor.py`)
|
|
196
|
-
- discovery-facade delegation is implemented by the configured AbstractCore LLM clients in `src/abstractruntime/integrations/abstractcore/llm_client.py` (`list_providers`, `list_provider_models`, `get_voice_catalog`, `list_tts_models`, `list_stt_models`, `list_music_providers`, `list_music_models`, `list_vision_provider_models`, `list_cached_vision_models`)
|
|
216
|
+
- discovery-facade delegation is implemented by the configured AbstractCore LLM clients in `src/abstractruntime/integrations/abstractcore/llm_client.py` (`list_providers`, `list_provider_models`, `get_voice_catalog`, `list_tts_models`, `list_stt_models`, `list_music_providers`, `list_music_models`, `list_vision_provider_models`, `list_cached_vision_models`, `list_vision_adapters`)
|
|
197
217
|
- host-facade client delegation is implemented by the configured AbstractCore LLM clients in `src/abstractruntime/integrations/abstractcore/llm_client.py` (`get_prompt_cache_capabilities`, `get_prompt_cache_stats`, `prompt_cache_set`, `prompt_cache_update`, `prompt_cache_fork`, `prompt_cache_clear`, `prompt_cache_prepare_modules`, `upsert_text_bloc`, `get_bloc_record`, `list_blocs`, `get_bloc_kv_manifest`, `ensure_bloc_kv_artifact`, `load_bloc_kv_artifact`, `list_bloc_kv_artifacts`, `delete_bloc_kv_artifact`, `prune_bloc_kv_artifacts`, `delete_bloc`, `get_model_residency_capabilities`, `list_model_residency`, `load_model_residency`, `unload_model_residency`)
|
|
198
218
|
- host-local prompt-cache export/import admin also lives on the host facade and client delegation layer (`list_prompt_cache_exports`, `prompt_cache_export`, `prompt_cache_import`) and is intentionally local-only
|
|
199
219
|
- host-facade email helpers delegate to Runtime's host-local comms facade/export layer (`list_email_accounts`, `list_emails`, `read_email`, `send_email`)
|
|
200
|
-
- run-facade helpers create and resume durable child runs for existing runs (`execute_llm_call`, `execute_tool_calls`, `resume_tool_calls`, `generate_image`, `edit_image`, `generate_video`, `image_to_video`, `generate_voice`, `generate_music`, `transcribe_audio`, `send_email`, `send_telegram_message`)
|
|
220
|
+
- run-facade helpers create and resume durable child runs for existing runs (`execute_llm_call`, `execute_tool_calls`, `resume_tool_calls`, `generate_image`, `edit_image`, `upscale_image`, `generate_video`, `image_to_video`, `generate_voice`, `generate_music`, `transcribe_audio`, `send_email`, `send_telegram_message`)
|
|
221
|
+
- task-specific image/video helpers preserve batch and adapter controls such as
|
|
222
|
+
`count`/`n`, `seeds`, ordered `lora_adapters`, and video `flow_shift`; local
|
|
223
|
+
subprocess isolation stays within the same public contract.
|
|
201
224
|
|
|
202
225
|
`LLM_CALL` payloads are JSON-safe effect payloads. Common fields:
|
|
203
226
|
- `prompt`, `messages`, `system_prompt`, and convenience `text`
|
|
@@ -208,11 +231,11 @@ Entry points:
|
|
|
208
231
|
Multimodal support:
|
|
209
232
|
- common remote-light AbstractCore media, vision, voice, audio, and music dependencies are part of the base Runtime install
|
|
210
233
|
- local clients call AbstractCore's unified `generate(..., media=..., output=...)`
|
|
211
|
-
- remote and hybrid clients support AbstractCore Server chat media content arrays plus image generation, image edits, text-to-video, image-to-video, speech, music generation, and transcription endpoints; pass an output-specific `model` for remote media provider routing, otherwise the server endpoint can use its configured capability default
|
|
234
|
+
- remote and hybrid clients support AbstractCore Server chat media content arrays plus image generation, image edits, image upscaling, text-to-video, image-to-video, speech, music generation, and transcription endpoints; pass an output-specific `model` for remote media provider routing, otherwise the server endpoint can use its configured capability default
|
|
212
235
|
- remote transcription requires one audio media item that resolves to a local file path or artifact-backed temporary file
|
|
213
236
|
- generated image/video/voice/music/audio bytes require a runtime `ArtifactStore`; the result contains `artifact_id` / `artifact_ref` instead of inline bytes
|
|
214
237
|
- media-only normalized results expose `runtime_provider` / `runtime_model` separately from `media_provider` / `media_model`
|
|
215
|
-
- optional local media residency failures complete with `status_hint="warning"` and `degraded=true`; unsupported local media warmup for `image_generation`, `video_generation`, `text_to_video`, `image_to_video`, `tts`, `stt`, and `music_generation` reports `requires_long_lived_server=true`, and generated image/video tasks also report `execution_mode="local_one_shot_subprocess"`
|
|
238
|
+
- optional local media residency failures complete with `status_hint="warning"` and `degraded=true`; unsupported local media warmup for `image_generation`, `image_upscale`, `video_generation`, `text_to_video`, `image_to_video`, `tts`, `stt`, and `music_generation` reports `requires_long_lived_server=true`, and generated image/video tasks also report `execution_mode="local_one_shot_subprocess"`
|
|
216
239
|
- Gateway/hosts remain responsible for explicit Core server URLs, Core server auth headers, provider/model defaults, selected local-inference profiles, and translation of Gateway-owned env/config into explicit Runtime inputs; Runtime persists only JSON-safe routing metadata and artifact refs
|
|
217
240
|
|
|
218
241
|
Prompt cache / cached sessions:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# AbstractRuntime — Architecture
|
|
2
2
|
|
|
3
|
-
> Updated: 2026-
|
|
4
|
-
> Version: 0.4.
|
|
3
|
+
> Updated: 2026-06-13
|
|
4
|
+
> Version: 0.4.28
|
|
5
5
|
> Scope: this describes **what is implemented in this repository**.
|
|
6
6
|
|
|
7
7
|
AbstractRuntime is a **durable workflow runtime**: it executes workflow graphs as a persisted state machine with explicit waits (user, time, events, jobs, subworkflows). A run can pause for hours/days and resume **without** keeping Python stacks/coroutines alive.
|
|
@@ -38,7 +38,7 @@ The boundary is intentionally narrow:
|
|
|
38
38
|
- Provider sessions and prompt-cache objects are not runtime state. Runtime may carry stable cache keys, while AbstractCore clients/servers manage warm caches.
|
|
39
39
|
- Hosts should use Runtime-owned AbstractCore facades for discovery snapshots, prompt-cache/model-residency control operations, and durable run-scoped media/comms child runs instead of reaching through private runtime attachments or importing Core internals directly.
|
|
40
40
|
- Local execution can use richer AbstractCore capability plugins. Remote and hybrid execution map the common media cases to AbstractCore Server endpoints and OpenAI-compatible content arrays, while hybrid keeps tool execution local.
|
|
41
|
-
- Gateway and other hosts compose Runtime with the desired memory and local-inference profile. Runtime's base package includes the AbstractMemory contract, AbstractCore remote/tool
|
|
41
|
+
- Gateway and other hosts compose Runtime with the desired memory and local-inference profile. Runtime's base package includes the AbstractMemory contract, AbstractCore remote/tool capability integration, Runtime-owned permissive PDF read/write support, and the MCP worker entry point, but not backend extras such as LanceDB, Core media document stacks, or local inferencer stacks. Hosts choose storage, embeddings, readiness policy, and whether to add `abstractruntime[apple]` or `abstractruntime[gpu]`.
|
|
42
42
|
- Remote and hybrid clients use explicit Core server URLs and auth headers supplied by the host. Runtime does not read Gateway auth environment variables for provider/model/auth decisions or treat Gateway bearer tokens as Core server/provider credentials.
|
|
43
43
|
|
|
44
44
|
This keeps the runtime usable by `../abstractgateway` and application layers such as `../abstractflow`, `../abstractassistant`, `../abstractobserver`, and `../abstractcode` without embedding provider-specific model logic in the durable kernel.
|
|
@@ -213,6 +213,10 @@ The scheduler is an in-process driver loop that resumes due waits and can delive
|
|
|
213
213
|
AbstractRuntime includes a compiler and a portable bundle format:
|
|
214
214
|
- VisualFlow compiler: `src/abstractruntime/visualflow_compiler/*` (VisualFlow JSON -> `WorkflowSpec`)
|
|
215
215
|
- Multi-entry VisualFlow authoring routes are lowered into internal `join_exec` and `path_mux` nodes when a target has multiple incoming `exec-in` edges plus per-route input overrides. This keeps authoring JSON clean while making runtime behavior explicit and restart-safe. See `workflow-bundles.md` for the concrete metadata shape.
|
|
216
|
+
- VisualFlow document nodes include `read_pdf` and `write_pdf`. They use
|
|
217
|
+
workspace-scoped paths, keep PDF bytes out of checkpoints, and store only
|
|
218
|
+
JSON-safe extracted text, metadata, hashes, content types, and file paths in
|
|
219
|
+
node outputs.
|
|
216
220
|
- WorkflowBundles (`.flow`): `src/abstractruntime/workflow_bundle/*` (manifest + flows + assets)
|
|
217
221
|
- pack/unpack helpers: `pack_workflow_bundle(...)`, `open_workflow_bundle(...)`
|
|
218
222
|
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# Runtime artifacts
|
|
2
|
+
|
|
3
|
+
AbstractRuntime stores large payloads as artifacts so run state, ledger records,
|
|
4
|
+
and workflow outputs remain JSON-safe. Artifacts are the durable record for
|
|
5
|
+
files, generated media, tool evidence, exported history bundles, and other
|
|
6
|
+
payloads that should be referenced by id rather than embedded inline.
|
|
7
|
+
|
|
8
|
+
The implementation lives in `src/abstractruntime/storage/artifacts.py`.
|
|
9
|
+
|
|
10
|
+
## File-like vocabulary boundary
|
|
11
|
+
|
|
12
|
+
Runtime artifacts are not the same thing as live filesystem paths:
|
|
13
|
+
|
|
14
|
+
- `Artifact`: a Runtime-owned durable payload safe to persist, search, reuse,
|
|
15
|
+
and pass between runs by reference.
|
|
16
|
+
- `Workspace File` / `Workspace Folder`: a server-side path capability under
|
|
17
|
+
Gateway/runtime workspace policy. These are path values, not durable payloads.
|
|
18
|
+
- `Local File` / `Local Folder`: a client-side intake source. In hosted/browser
|
|
19
|
+
mode they should be uploaded and normalized into artifacts before durable
|
|
20
|
+
execution.
|
|
21
|
+
|
|
22
|
+
Gateway/Flow product copy may say `Server File` / `Server Folder` when users
|
|
23
|
+
choose an origin, but Runtime stays anchored on artifact refs versus
|
|
24
|
+
workspace-scoped paths.
|
|
25
|
+
|
|
26
|
+
## Artifact identity
|
|
27
|
+
|
|
28
|
+
An artifact has a stable `artifact_id`, a `blob_id` for content deduplication
|
|
29
|
+
when the backend supports it, and a `run_id` scope. JSON state and Gateway APIs
|
|
30
|
+
pass artifacts with refs such as:
|
|
31
|
+
|
|
32
|
+
```json
|
|
33
|
+
{
|
|
34
|
+
"$artifact": "a7050ebc5c8330...",
|
|
35
|
+
"artifact_id": "a7050ebc5c8330...",
|
|
36
|
+
"run_id": "9e19bd6a-ba07-4c2e-86c6-94ec7ca0a373",
|
|
37
|
+
"content_type": "audio/wav",
|
|
38
|
+
"size_bytes": 5293012
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
The ref is a pointer, not authorization. Hosts such as AbstractGateway are
|
|
43
|
+
responsible for deciding which principal may list or read an artifact.
|
|
44
|
+
|
|
45
|
+
## Stored metadata
|
|
46
|
+
|
|
47
|
+
Runtime stores two metadata layers:
|
|
48
|
+
|
|
49
|
+
- `tags`: string fields for compatibility and simple lookups.
|
|
50
|
+
- `metadata`: structured JSON for producer-specific details.
|
|
51
|
+
- `descriptor`: a Runtime-owned `ArtifactDescriptor` that normalizes the fields
|
|
52
|
+
Gateway and Observer should use.
|
|
53
|
+
|
|
54
|
+
The descriptor separates display format from semantic meaning:
|
|
55
|
+
|
|
56
|
+
- `render_kind`: how the artifact should be rendered, such as `image`, `audio`,
|
|
57
|
+
`video`, `markdown`, `html`, `json`, `text`, or `document`.
|
|
58
|
+
- `semantic_kind`: what the artifact represents, such as `voice`, `music`,
|
|
59
|
+
`sound`, `transcript`, `evidence`, `workflow_snapshot`, or `image`.
|
|
60
|
+
- `classification_source`: whether the classification came from the producer,
|
|
61
|
+
runtime tags, MIME inference, or legacy fallback.
|
|
62
|
+
|
|
63
|
+
The descriptor can also carry `session_id`, `workflow_id`, `node_id`, `turn_id`,
|
|
64
|
+
`ledger_cursor`, `producer`, `generation`, `media`, `source_refs`, `links`,
|
|
65
|
+
`security`, and action metadata. Producer metadata may be sparse; consumers
|
|
66
|
+
should show missing fields as unavailable rather than guessing.
|
|
67
|
+
|
|
68
|
+
## Generated media provenance
|
|
69
|
+
|
|
70
|
+
When generated media is produced through the Runtime AbstractCore integration
|
|
71
|
+
with output selectors, Runtime stores descriptor and metadata alongside the
|
|
72
|
+
bytes. Current generated outputs include image, video, voice/TTS, music, sound
|
|
73
|
+
or audio outputs, and transcription-style text outputs where the host route
|
|
74
|
+
stores a transcript artifact.
|
|
75
|
+
|
|
76
|
+
Generated-media descriptors record available producer facts:
|
|
77
|
+
|
|
78
|
+
- package/capability route, provider, model, backend, and runtime provider/model
|
|
79
|
+
when they differ;
|
|
80
|
+
- prompt or TTS text, requested format, output index, negative prompt, and
|
|
81
|
+
redacted generation parameters;
|
|
82
|
+
- source artifact refs for edit, image-to-video, cloned/reference voice, or
|
|
83
|
+
other source-media flows when provided;
|
|
84
|
+
- measured media facts such as duration, sample rate, dimensions, channels, or
|
|
85
|
+
frame counts when the store can inspect the bytes.
|
|
86
|
+
|
|
87
|
+
Runtime redacts obvious secret fields and bounds large metadata values. It does
|
|
88
|
+
not store raw provider requests as indexed descriptor fields.
|
|
89
|
+
|
|
90
|
+
Gateway or package producers that store artifacts outside the main Runtime
|
|
91
|
+
generated-media path should use `build_artifact_descriptor_payload(...)` from
|
|
92
|
+
`abstractruntime.storage.artifacts`. That helper applies the Runtime descriptor
|
|
93
|
+
schema, bounded secret-key redaction, and prompt/text sensitivity labels without
|
|
94
|
+
making Gateway invent a parallel descriptor contract.
|
|
95
|
+
|
|
96
|
+
## Catalog and search
|
|
97
|
+
|
|
98
|
+
`InMemoryArtifactStore` and `FileArtifactStore` support:
|
|
99
|
+
|
|
100
|
+
- `store(...)`, `load(...)`, and `get_metadata(...)`;
|
|
101
|
+
- `update_metadata(...)` for descriptor or structured metadata enrichment;
|
|
102
|
+
- `search(...)` for bounded pages;
|
|
103
|
+
- `count(...)`, `facet_counts(...)`, and `stats(...)` for exact totals and
|
|
104
|
+
filter chips;
|
|
105
|
+
- `record_access(...)` for explicit metadata/content/preview/download/export
|
|
106
|
+
counters.
|
|
107
|
+
|
|
108
|
+
`FileArtifactStore` maintains a repairable SQLite catalog for descriptor fields,
|
|
109
|
+
time filters, exact counts, byte totals, and facets. The catalog is an index of
|
|
110
|
+
Runtime-owned artifact metadata; the payload bytes and metadata files remain the
|
|
111
|
+
source of truth.
|
|
112
|
+
|
|
113
|
+
Plain `load(...)` and `get_metadata(...)` are side-effect free. UI and HTTP
|
|
114
|
+
layers that want access statistics must call `record_access(...)` or use Gateway
|
|
115
|
+
content routes that label the action.
|
|
116
|
+
|
|
117
|
+
## Gateway and Observer
|
|
118
|
+
|
|
119
|
+
AbstractGateway exposes Runtime artifacts through bounded HTTP APIs. Search
|
|
120
|
+
responses include `artifact_envelope_v1`, which projects Runtime descriptors,
|
|
121
|
+
media facts, access stats, and action links while preserving legacy row fields.
|
|
122
|
+
Gateway only forwards descriptor action links that are relative Gateway/UI
|
|
123
|
+
links; arbitrary external provider URLs should be represented as trace
|
|
124
|
+
availability or Gateway-owned trace records instead.
|
|
125
|
+
|
|
126
|
+
AbstractObserver renders Gateway envelopes. It should not infer canonical
|
|
127
|
+
artifact meaning from filenames or raw content except as a visible legacy
|
|
128
|
+
fallback. Use the Runtime tab for artifact inventory and the Observe tab for the
|
|
129
|
+
workflow/ledger narrative.
|
|
130
|
+
|
|
131
|
+
## Retrieval boundaries
|
|
132
|
+
|
|
133
|
+
Artifact search answers questions about stored files and media by metadata,
|
|
134
|
+
scope, type, time, producer, and links back to runs. It is not a semantic memory
|
|
135
|
+
search system.
|
|
136
|
+
|
|
137
|
+
- Use the ledger for "what happened in this workflow?"
|
|
138
|
+
- Use artifact search for "what files/media exist and how were they produced?"
|
|
139
|
+
- Use AbstractMemory/KG retrieval for "what knowledge or relationships were
|
|
140
|
+
learned?"
|
|
141
|
+
- Use Gateway audit/provider links for system-level request traces when the
|
|
142
|
+
envelope reports them.
|
|
143
|
+
|
|
144
|
+
## Limits
|
|
145
|
+
|
|
146
|
+
Legacy artifacts may only have MIME type and tags. Runtime projects them with
|
|
147
|
+
fallback descriptor fields so clients can still list and preview them, but
|
|
148
|
+
producer-level prompt/model/source provenance is only available for artifacts
|
|
149
|
+
created through descriptor-aware paths.
|
|
@@ -14,7 +14,7 @@ If you are new to the project, start with `../README.md` and `../architecture.md
|
|
|
14
14
|
|
|
15
15
|
- Planned: 5
|
|
16
16
|
- Proposed: 3
|
|
17
|
-
- Completed:
|
|
17
|
+
- Completed: 33
|
|
18
18
|
- Deprecated: 13
|
|
19
19
|
- Recurrent: 0
|
|
20
20
|
|
|
@@ -70,6 +70,9 @@ If you are new to the project, start with `../README.md` and `../architecture.md
|
|
|
70
70
|
| 0037 | `completed/0037_visualflow_generate_music_node_compiler_parity.md` |
|
|
71
71
|
| 0039 | `completed/0039_runtime_music_structure_prompt_bool_contract.md` |
|
|
72
72
|
| 0040 | `completed/0040_task_agnostic_local_residency_listing.md` |
|
|
73
|
+
| 0041 | `completed/0041_runtime_hardware_extras_avoid_nonpermissive_document_stacks.md` |
|
|
74
|
+
| 0042 | `completed/0042_core_vision_upscale_and_parameter_surface.md` |
|
|
75
|
+
| 0043 | `completed/0043_runtime_vision_adapter_and_batch_surface.md` |
|
|
73
76
|
|
|
74
77
|
## Planned
|
|
75
78
|
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Completed: Runtime hardware extras avoid nonpermissive document stacks
|
|
2
|
+
|
|
3
|
+
## Metadata
|
|
4
|
+
- Created: 2026-06-05
|
|
5
|
+
- Status: Completed
|
|
6
|
+
- Completed: 2026-06-06
|
|
7
|
+
|
|
8
|
+
## ADR status
|
|
9
|
+
- Governing ADRs: root `docs/adr/0029-permissive-dependency-and-licensing-policy.md`, root `docs/adr/0033-install-profiles-config-entrypoints-and-server-boundaries.md`
|
|
10
|
+
- ADR impact: None. This completes the Runtime-side enforcement of the existing permissive dependency and install-profile policies.
|
|
11
|
+
|
|
12
|
+
## Context
|
|
13
|
+
Runtime's base VisualFlow PDF nodes use permissive dependencies:
|
|
14
|
+
|
|
15
|
+
- `pypdf` for PDF text and metadata extraction;
|
|
16
|
+
- `reportlab` for PDF writing.
|
|
17
|
+
|
|
18
|
+
The remaining risk was that Runtime `apple` and `gpu` extras delegated to Core aggregate profiles that previously pulled PyMuPDF-family packages. Core item `0805` moved the default Core PDF route to `pypdf` and isolated PyMuPDF-family packages behind the explicit `pdf-pymupdf-commercial` extra.
|
|
19
|
+
|
|
20
|
+
## What changed
|
|
21
|
+
- Runtime remains versioned with mandatory `pypdf` and `reportlab` base dependencies, so light, Apple, and GPU installs all receive PDF read/write support.
|
|
22
|
+
- Runtime packaging tests now assert PyMuPDF-family packages are absent from the Runtime base, `apple`, and `gpu` profile definitions.
|
|
23
|
+
- Runtime packaging tests also inspect the sibling Core `all-apple` and `all-gpu` profiles in the monorepo and assert they contain `pypdf` but not PyMuPDF-family packages.
|
|
24
|
+
- The attachment/open test now creates a PDF through Runtime's ReportLab writer instead of PyMuPDF, proving the default route parses PDFs without the optional commercial backend.
|
|
25
|
+
|
|
26
|
+
## Current code pointers
|
|
27
|
+
- `pyproject.toml`
|
|
28
|
+
- `src/abstractruntime/documents/pdf.py`
|
|
29
|
+
- `tests/test_packaging_extras.py`
|
|
30
|
+
- `tests/test_visualflow_file_nodes_workspace.py`
|
|
31
|
+
- `tests/test_session_attachments_registry_and_open_tool.py`
|
|
32
|
+
|
|
33
|
+
## Validation
|
|
34
|
+
- `python -m pytest tests/test_visualflow_file_nodes_workspace.py tests/test_session_attachments_registry_and_open_tool.py::test_open_attachment_pdf_extracts_text_when_media_stack_available tests/test_packaging_extras.py -q`
|
|
35
|
+
- Result: 6 passed.
|
|
36
|
+
|
|
37
|
+
## Completion report
|
|
38
|
+
Runtime hardware profile PDF dependency inheritance is now aligned with the permissive default policy. PyMuPDF remains possible only through Core's explicit opt-in extra; Runtime does not install it by default in base, Apple, or GPU profiles.
|
|
39
|
+
|
|
40
|
+
## Residual follow-up
|
|
41
|
+
Core item `0806_pdf_images_tables_and_extraction_strategy.md` tracks richer image/table/OCR support. That work must keep capability reporting truthful and must not reintroduce PyMuPDF-family packages into default install profiles.
|
abstractruntime-0.4.28/docs/backlog/completed/0042_core_vision_upscale_and_parameter_surface.md
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# 0042 Core Vision Upscale and Parameter Surface
|
|
2
|
+
|
|
3
|
+
## Metadata
|
|
4
|
+
- Created: 2026-06-07
|
|
5
|
+
- Completed: 2026-06-07
|
|
6
|
+
- Status: Completed
|
|
7
|
+
- Owner: AbstractRuntime
|
|
8
|
+
- Origin: follow-up to AbstractCore and AbstractVision releases that added richer Vision/Core models, image upscaling, and generation controls.
|
|
9
|
+
|
|
10
|
+
## ADR Status
|
|
11
|
+
- Governing ADRs:
|
|
12
|
+
- `docs/adr/0004_runtime_owns_run_scoped_media_execution_truth.md`
|
|
13
|
+
- `docs/adr/0005_runtime_owns_abstractcore_host_discovery_queries.md`
|
|
14
|
+
- `docs/adr/0007_runtime_relays_core_owned_model_residency_truth.md`
|
|
15
|
+
- ADR impact: none. This work applies the existing Runtime-owned execution and discovery boundary to the newly exposed Core/Vision surface.
|
|
16
|
+
|
|
17
|
+
## Current Code Reality
|
|
18
|
+
|
|
19
|
+
- Runtime already exposes durable run-facade helpers for image generation, image edit, text-to-video, image-to-video, TTS, music, and STT.
|
|
20
|
+
- Runtime discovery already relays Core/Vision provider-model catalogs, but its local Vision task allowlist only accepts `text_to_image`, `image_to_image`, `text_to_video`, and `image_to_video`.
|
|
21
|
+
- Remote generated-media routing handles Core image generation/edit and video generation/edit endpoints, including async video progress, but it has no `image_upscale` route.
|
|
22
|
+
- VisualFlow media-node lowering forwards common image/video parameters, but not the newer Core/Vision controls such as `guidance_2` or image upscaler parameters.
|
|
23
|
+
- Runtime model residency support reports media tasks, but does not yet include image upscaling.
|
|
24
|
+
|
|
25
|
+
## Architecture Review
|
|
26
|
+
|
|
27
|
+
Alternatives considered:
|
|
28
|
+
|
|
29
|
+
1. **Duplicate Core's model and task registry in Runtime.**
|
|
30
|
+
- Rejected because Core owns model capabilities and provider residency truth. Runtime should relay and route, not become a second registry.
|
|
31
|
+
2. **Let Gateway call Core's new upscaler endpoint directly.**
|
|
32
|
+
- Rejected for run-scoped media work because ADR 0004 requires Runtime-owned child-run history and artifact provenance.
|
|
33
|
+
3. **Add a generic untyped Core pass-through media endpoint.**
|
|
34
|
+
- Deferred. It would be flexible, but it would make thin-client contracts weaker and harder to validate.
|
|
35
|
+
4. **Extend Runtime's existing media abstractions with `image_upscale` and pass through named Core/Vision controls.**
|
|
36
|
+
- Recommended. It keeps the boundary simple, preserves child-run durability, and avoids registry duplication.
|
|
37
|
+
|
|
38
|
+
## Goal
|
|
39
|
+
|
|
40
|
+
Make Runtime support the richer AbstractCore/Vision media surface without guessing model truth:
|
|
41
|
+
|
|
42
|
+
- relay `image_upscale` in Vision discovery;
|
|
43
|
+
- execute image upscaling through Runtime-owned child runs and Core remote/local integration paths;
|
|
44
|
+
- pass through new generation controls such as `guidance_2` and upscaler controls;
|
|
45
|
+
- expose truthful residency/task support for image upscaling;
|
|
46
|
+
- keep progress callbacks as ledger `abstract.progress` events and never persist callbacks.
|
|
47
|
+
|
|
48
|
+
## Acceptance Criteria
|
|
49
|
+
|
|
50
|
+
- `AbstractCoreRunFacade` exposes a durable `upscale_image(...)` helper.
|
|
51
|
+
- Remote Core execution routes `output={"modality":"image","task":"image_upscale"}` to `/v1/images/upscale` or `/{provider}/v1/images/upscale`.
|
|
52
|
+
- Local Core execution can route an upscaling output spec through the existing multimodal provider path.
|
|
53
|
+
- Runtime discovery accepts `task=image_upscale` for Vision provider-model catalogs and cached model filters.
|
|
54
|
+
- Runtime VisualFlow compilation/lowering recognizes an `upscale_image` / `image_upscale` node shape and forwards upscaler parameters.
|
|
55
|
+
- `guidance_2` is forwarded for image/video generation and edit paths where supplied.
|
|
56
|
+
- Model-residency task reporting includes `image_upscale`.
|
|
57
|
+
- Focused tests prove request payloads, artifact storage, discovery filters, and progress callback behavior.
|
|
58
|
+
|
|
59
|
+
## Review Checklist
|
|
60
|
+
|
|
61
|
+
- No direct Gateway/Core bypass is introduced.
|
|
62
|
+
- No model capability or provider residency truth is inferred in Runtime.
|
|
63
|
+
- Generated media outputs remain artifact-backed and run-scoped.
|
|
64
|
+
- Callback objects are not serialized into run vars, effect payloads, or artifacts.
|
|
65
|
+
- Existing image/video/music/STT tests remain green.
|
|
66
|
+
|
|
67
|
+
## Implementation Summary
|
|
68
|
+
|
|
69
|
+
- Added `image_upscale` to Runtime's Core Vision discovery task allowlist and model-residency capability descriptors.
|
|
70
|
+
- Added `AbstractCoreRunFacade.upscale_image(...)`, preserving parent/child run ownership and artifact provenance.
|
|
71
|
+
- Routed remote `output={"modality":"image","task":"image_upscale"}` calls to AbstractCore Server image upscaling endpoints, including the async job/progress path when a progress callback is active.
|
|
72
|
+
- Forwarded newer Core/Vision parameters including `guidance_2` for image/video generation/edit paths and upscaler controls for image upscaling.
|
|
73
|
+
- Added VisualFlow compiler/executor recognition for `upscale_image` / `image_upscale` nodes.
|
|
74
|
+
- Updated Runtime docs, FAQ, troubleshooting, and AI-readable indexes for the new Core floor and media surface.
|
|
75
|
+
|
|
76
|
+
## Validation
|
|
77
|
+
|
|
78
|
+
- `PYTHONPATH=src:../abstractcore python -m compileall -q src/abstractruntime/integrations/abstractcore src/abstractruntime/visualflow_compiler src/abstractruntime/core/runtime.py`
|
|
79
|
+
- `PYTHONPATH=src:../abstractcore pytest -q tests/test_packaging_extras.py tests/test_visualflow_media_nodes.py tests/test_model_residency_control_plane.py::test_model_residency_capabilities_describe_core_backed_truth_by_task tests/test_abstractcore_run_facade.py::test_run_facade_upscale_image_creates_durable_child_run_with_media tests/test_multimodal_abstractcore_integration.py::test_remote_image_upscale_uses_abstractcore_images_upscale_endpoint_and_stores_artifact tests/test_multimodal_abstractcore_integration.py::test_remote_image_upscale_with_progress_uses_core_job_endpoint tests/test_abstractcore_discovery_facade.py::test_local_vision_provider_models_accept_image_upscale_task_from_cache`
|
|
80
|
+
- Result: `23 passed in 0.29s`
|