kailash 0.9.6__tar.gz → 0.9.8__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.
- {kailash-0.9.6/src/kailash.egg-info → kailash-0.9.8}/PKG-INFO +1 -1
- {kailash-0.9.6 → kailash-0.9.8}/pyproject.toml +1 -1
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/__init__.py +1 -1
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/ai/iterative_llm_agent.py +70 -9
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/base.py +58 -5
- {kailash-0.9.6 → kailash-0.9.8/src/kailash.egg-info}/PKG-INFO +1 -1
- {kailash-0.9.6 → kailash-0.9.8}/LICENSE +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/MANIFEST.in +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/README.md +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/setup.cfg +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/setup.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/__main__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/access_control/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/access_control/managers.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/access_control/rule_evaluators.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/access_control.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/access_control_abac.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/adapters/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/adapters/mcp_platform_adapter.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/analysis/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/analysis/conditional_branch_analyzer.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/api/auth.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/api/custom_nodes.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/api/custom_nodes_secure.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/api/gateway.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/api/mcp_integration.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/api/studio.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/api/workflow_api.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/channels/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/channels/api_channel.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/channels/base.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/channels/cli_channel.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/channels/event_router.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/channels/mcp_channel.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/channels/session.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/cli/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/cli/commands.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/cli/validate_imports.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/cli/validation_audit.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/client/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/client/enhanced_client.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/config/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/config/database_config.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/core/actors/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/core/actors/adaptive_pool_controller.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/core/actors/connection_actor.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/core/actors/supervisor.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/core/ml/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/core/ml/query_patterns.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/core/monitoring/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/core/monitoring/connection_metrics.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/core/optimization/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/core/resilience/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/core/resilience/bulkhead.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/core/resilience/circuit_breaker.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/core/resilience/health_monitor.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/database/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/database/execution_pipeline.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/edge/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/edge/compliance.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/edge/consistency.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/edge/coordination/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/edge/coordination/global_ordering.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/edge/coordination/leader_election.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/edge/coordination/partition_detector.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/edge/coordination/raft.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/edge/discovery.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/edge/location.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/edge/migration/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/edge/migration/edge_migration_service.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/edge/migration/edge_migrator.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/edge/monitoring/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/edge/monitoring/edge_monitor.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/edge/prediction/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/edge/prediction/predictive_warmer.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/edge/resource/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/edge/resource/cloud_integration.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/edge/resource/cost_optimizer.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/edge/resource/docker_integration.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/edge/resource/kubernetes_integration.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/edge/resource/platform_integration.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/edge/resource/predictive_scaler.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/edge/resource/resource_analyzer.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/edge/resource/resource_pools.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/gateway/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/gateway/api.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/gateway/enhanced_gateway.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/gateway/resource_resolver.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/gateway/security.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/integrations/dataflow_edge.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/manifest.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/mcp_server/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/mcp_server/advanced_features.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/mcp_server/ai_registry_server.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/mcp_server/auth.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/mcp_server/client.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/mcp_server/client_new.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/mcp_server/discovery.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/mcp_server/errors.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/mcp_server/oauth.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/mcp_server/protocol.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/mcp_server/registry_integration.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/mcp_server/server.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/mcp_server/servers/ai_registry.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/mcp_server/subscriptions.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/mcp_server/transports.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/mcp_server/utils/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/mcp_server/utils/cache.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/mcp_server/utils/config.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/mcp_server/utils/formatters.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/mcp_server/utils/metrics.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/middleware/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/middleware/auth/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/middleware/auth/access_control.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/middleware/auth/auth_manager.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/middleware/auth/exceptions.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/middleware/auth/jwt_auth.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/middleware/auth/models.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/middleware/auth/utils.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/middleware/communication/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/middleware/communication/ai_chat.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/middleware/communication/api_gateway.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/middleware/communication/events.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/middleware/communication/realtime.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/middleware/core/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/middleware/core/agent_ui.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/middleware/core/schema.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/middleware/core/workflows.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/middleware/database/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/middleware/database/base.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/middleware/database/base_models.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/middleware/database/enums.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/middleware/database/migrations.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/middleware/database/models.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/middleware/database/repositories.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/middleware/database/session_manager.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/middleware/gateway/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/middleware/gateway/checkpoint_manager.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/middleware/gateway/deduplicator.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/middleware/gateway/durable_gateway.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/middleware/gateway/durable_request.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/middleware/gateway/event_store.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/middleware/gateway/storage_backends.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/middleware/mcp/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/middleware/mcp/client_integration.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/middleware/mcp/enhanced_server.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/monitoring/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/monitoring/alerts.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/monitoring/metrics.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/admin/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/admin/audit_log.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/admin/permission_check.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/admin/role_management.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/admin/schema.sql +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/admin/schema_manager.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/admin/security_event.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/admin/tenant_isolation.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/admin/transaction_utils.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/admin/user_management.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/ai/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/ai/a2a.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/ai/a2a_backup.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/ai/agents.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/ai/ai_providers.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/ai/embedding_generator.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/ai/hybrid_search.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/ai/intelligent_agent_orchestrator.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/ai/llm_agent.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/ai/models.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/ai/self_organizing.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/ai/semantic_memory.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/ai/streaming_analytics.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/ai/vision_utils.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/alerts/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/alerts/base.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/alerts/discord.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/api/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/api/auth.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/api/graphql.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/api/http.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/api/monitoring.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/api/rate_limiting.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/api/rest.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/api/security.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/auth/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/auth/directory_integration.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/auth/enterprise_auth_provider.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/auth/mfa.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/auth/risk_assessment.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/auth/session_management.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/auth/sso.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/base_async.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/base_cycle_aware.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/base_with_acl.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/cache/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/cache/cache.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/cache/cache_invalidation.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/cache/redis_pool_manager.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/code/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/code/async_python.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/code/python.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/compliance/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/compliance/data_retention.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/compliance/gdpr.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/data/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/data/async_connection.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/data/async_sql.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/data/async_vector.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/data/bulk_operations.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/data/directory.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/data/event_generation.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/data/file_discovery.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/data/optimistic_locking.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/data/query_builder.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/data/query_cache.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/data/query_pipeline.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/data/query_router.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/data/readers.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/data/redis.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/data/retrieval.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/data/sharepoint_graph.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/data/sources.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/data/sql.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/data/streaming.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/data/vector_db.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/data/workflow_connection_pool.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/data/writers.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/edge/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/edge/base.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/edge/cloud_node.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/edge/coordination.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/edge/docker_node.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/edge/edge_data.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/edge/edge_migration_node.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/edge/edge_monitoring_node.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/edge/edge_state.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/edge/edge_warming_node.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/edge/kubernetes_node.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/edge/platform_node.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/edge/resource_analyzer_node.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/edge/resource_optimizer_node.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/edge/resource_scaler_node.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/enterprise/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/enterprise/audit_logger.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/enterprise/batch_processor.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/enterprise/data_lineage.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/enterprise/mcp_executor.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/enterprise/service_discovery.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/enterprise/tenant_assignment.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/governance.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/logic/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/logic/async_operations.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/logic/convergence.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/logic/intelligent_merge.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/logic/loop.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/logic/operations.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/logic/workflow.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/mixins/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/mixins/event_emitter.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/mixins/mcp.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/mixins/security.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/mixins.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/monitoring/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/monitoring/connection_dashboard.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/monitoring/deadlock_detector.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/monitoring/health_check.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/monitoring/log_processor.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/monitoring/metrics_collector.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/monitoring/performance_anomaly.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/monitoring/performance_benchmark.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/monitoring/race_condition_detector.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/monitoring/transaction_metrics.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/monitoring/transaction_monitor.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/ports.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/rag/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/rag/advanced.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/rag/agentic.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/rag/conversational.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/rag/evaluation.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/rag/federated.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/rag/graph.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/rag/multimodal.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/rag/optimized.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/rag/privacy.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/rag/query_processing.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/rag/realtime.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/rag/registry.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/rag/router.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/rag/similarity.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/rag/strategies.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/rag/workflows.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/security/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/security/abac_evaluator.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/security/audit_log.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/security/behavior_analysis.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/security/credential_manager.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/security/rotating_credentials.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/security/security_event.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/security/threat_detection.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/system/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/system/command_parser.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/testing/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/testing/credential_testing.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/transaction/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/transaction/distributed_transaction_manager.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/transaction/saga_coordinator.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/transaction/saga_state_storage.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/transaction/saga_step.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/transaction/transaction_context.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/transaction/two_phase_commit.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/transform/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/transform/chunkers.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/transform/formatters.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/transform/processors.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/validation/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/validation/test_executor.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/validation/validation_nodes.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/nodes/validation.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/planning/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/planning/dynamic_execution_planner.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/resources/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/resources/factory.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/resources/health.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/resources/reference.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/resources/registry.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/runtime/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/runtime/access_controlled.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/runtime/async_local.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/runtime/compatibility_reporter.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/runtime/docker.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/runtime/hierarchical_switch_executor.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/runtime/local.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/runtime/parallel.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/runtime/parallel_cyclic.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/runtime/parameter_injection.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/runtime/parameter_injector.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/runtime/performance_monitor.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/runtime/runner.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/runtime/secret_provider.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/runtime/testing.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/runtime/validation/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/runtime/validation/connection_context.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/runtime/validation/enhanced_error_formatter.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/runtime/validation/error_categorizer.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/runtime/validation/import_validator.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/runtime/validation/metrics.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/runtime/validation/performance.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/runtime/validation/suggestion_engine.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/sdk_exceptions.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/security.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/servers/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/servers/durable_workflow_server.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/servers/enterprise_workflow_server.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/servers/gateway.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/servers/workflow_server.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/testing/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/testing/async_test_case.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/testing/async_utils.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/testing/fixtures.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/testing/mock_registry.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/tracking/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/tracking/manager.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/tracking/metrics_collector.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/tracking/models.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/tracking/storage/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/tracking/storage/base.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/tracking/storage/database.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/tracking/storage/filesystem.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/utils/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/utils/data_paths.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/utils/data_validation.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/utils/export.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/utils/migrations/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/utils/migrations/generator.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/utils/migrations/models.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/utils/migrations/runner.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/utils/resource_manager.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/utils/secure_logging.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/utils/templates.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/visualization/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/visualization/api.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/visualization/dashboard.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/visualization/performance.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/visualization/reports.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/workflow/__init__.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/workflow/async_builder.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/workflow/async_patterns.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/workflow/builder.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/workflow/contracts.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/workflow/convergence.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/workflow/cycle_analyzer.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/workflow/cycle_builder.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/workflow/cycle_config.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/workflow/cycle_debugger.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/workflow/cycle_exceptions.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/workflow/cycle_profiler.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/workflow/cycle_state.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/workflow/cyclic_runner.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/workflow/edge_infrastructure.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/workflow/graph.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/workflow/input_handling.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/workflow/mermaid_visualizer.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/workflow/migration.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/workflow/mock_registry.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/workflow/resilience.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/workflow/runner.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/workflow/safety.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/workflow/state.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/workflow/templates.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/workflow/type_inference.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/workflow/validation.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash/workflow/visualization.py +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash.egg-info/SOURCES.txt +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash.egg-info/dependency_links.txt +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash.egg-info/entry_points.txt +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash.egg-info/not-zip-safe +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash.egg-info/requires.txt +0 -0
- {kailash-0.9.6 → kailash-0.9.8}/src/kailash.egg-info/top_level.txt +0 -0
@@ -727,26 +727,38 @@ class IterativeLLMAgentNode(LLMAgentNode):
|
|
727
727
|
elif isinstance(tool, dict):
|
728
728
|
plan["selected_tools"].append(tool.get("name", "unknown"))
|
729
729
|
|
730
|
-
# Create execution steps
|
730
|
+
# Create execution steps based on query and available tools
|
731
731
|
if "analyze" in user_query.lower():
|
732
|
+
# For analysis queries, create multi-step plan
|
732
733
|
plan["execution_steps"] = [
|
733
734
|
{
|
734
735
|
"step": 1,
|
735
736
|
"action": "gather_data",
|
736
|
-
"tools":
|
737
|
+
"tools": (
|
738
|
+
plan["selected_tools"][:1] if plan["selected_tools"] else []
|
739
|
+
),
|
737
740
|
},
|
738
741
|
{
|
739
742
|
"step": 2,
|
740
743
|
"action": "perform_analysis",
|
741
|
-
"tools":
|
744
|
+
"tools": (
|
745
|
+
plan["selected_tools"][1:2]
|
746
|
+
if len(plan["selected_tools"]) > 1
|
747
|
+
else []
|
748
|
+
),
|
742
749
|
},
|
743
750
|
{
|
744
751
|
"step": 3,
|
745
752
|
"action": "generate_insights",
|
746
|
-
"tools":
|
753
|
+
"tools": (
|
754
|
+
plan["selected_tools"][2:3]
|
755
|
+
if len(plan["selected_tools"]) > 2
|
756
|
+
else []
|
757
|
+
),
|
747
758
|
},
|
748
759
|
]
|
749
760
|
else:
|
761
|
+
# For other queries, single step execution
|
750
762
|
plan["execution_steps"] = [
|
751
763
|
{"step": 1, "action": "execute_query", "tools": plan["selected_tools"]}
|
752
764
|
]
|
@@ -959,11 +971,60 @@ class IterativeLLMAgentNode(LLMAgentNode):
|
|
959
971
|
self.logger.error(f"Tool execution failed for {tool_name}: {e}")
|
960
972
|
|
961
973
|
# Combine all tool outputs
|
962
|
-
|
963
|
-
"\n".join(tool_results)
|
964
|
-
|
965
|
-
|
966
|
-
|
974
|
+
if tool_results:
|
975
|
+
step_result["output"] = "\n".join(tool_results)
|
976
|
+
else:
|
977
|
+
# No tools were executed - fall back to LLM for this action
|
978
|
+
self.logger.info(
|
979
|
+
f"No MCP tools available for action: {action}, using LLM fallback"
|
980
|
+
)
|
981
|
+
|
982
|
+
# Extract user query from kwargs
|
983
|
+
messages = kwargs.get("messages", [])
|
984
|
+
user_query = ""
|
985
|
+
for msg in reversed(messages):
|
986
|
+
if msg.get("role") == "user":
|
987
|
+
user_query = msg.get("content", "")
|
988
|
+
break
|
989
|
+
|
990
|
+
# Create a prompt for the LLM to handle this action
|
991
|
+
action_prompt = f"Please {action} for the following request: {user_query}"
|
992
|
+
llm_messages = [
|
993
|
+
{
|
994
|
+
"role": "system",
|
995
|
+
"content": kwargs.get(
|
996
|
+
"system_prompt", "You are a helpful AI assistant."
|
997
|
+
),
|
998
|
+
},
|
999
|
+
{"role": "user", "content": action_prompt},
|
1000
|
+
]
|
1001
|
+
|
1002
|
+
# Use parent's LLM capabilities
|
1003
|
+
try:
|
1004
|
+
llm_kwargs = {
|
1005
|
+
"provider": kwargs.get("provider", "openai"),
|
1006
|
+
"model": kwargs.get("model", "gpt-4"),
|
1007
|
+
"messages": llm_messages,
|
1008
|
+
"temperature": kwargs.get("temperature", 0.7),
|
1009
|
+
"max_tokens": kwargs.get("max_tokens", 1000),
|
1010
|
+
}
|
1011
|
+
|
1012
|
+
llm_response = super().run(**llm_kwargs)
|
1013
|
+
|
1014
|
+
if llm_response.get("success") and llm_response.get("response"):
|
1015
|
+
content = llm_response["response"].get("content", "")
|
1016
|
+
step_result["output"] = f"LLM Response for {action}: {content}"
|
1017
|
+
step_result["success"] = True
|
1018
|
+
else:
|
1019
|
+
step_result["output"] = (
|
1020
|
+
f"Failed to execute {action}: {llm_response.get('error', 'Unknown error')}"
|
1021
|
+
)
|
1022
|
+
step_result["success"] = False
|
1023
|
+
except Exception as e:
|
1024
|
+
self.logger.error(f"LLM fallback failed for action {action}: {e}")
|
1025
|
+
step_result["output"] = f"Error executing {action}: {str(e)}"
|
1026
|
+
step_result["success"] = False
|
1027
|
+
|
967
1028
|
step_result["duration"] = time.time() - start_time
|
968
1029
|
|
969
1030
|
# Mark as failed if no tools executed successfully
|
@@ -216,17 +216,58 @@ class Node(ABC):
|
|
216
216
|
)
|
217
217
|
self.logger = logging.getLogger(f"kailash.nodes.{self.id}")
|
218
218
|
|
219
|
-
# Filter out internal fields from config
|
220
|
-
|
219
|
+
# Filter out internal fields from config with comprehensive parameter handling
|
220
|
+
# Get parameter definitions once and cache for both filtering and validation
|
221
|
+
try:
|
222
|
+
if not hasattr(self, "_temp_param_definitions"):
|
223
|
+
self._temp_param_definitions = self.get_parameters()
|
224
|
+
defined_params = set(self._temp_param_definitions.keys())
|
225
|
+
except Exception as e:
|
226
|
+
# If get_parameters() fails, log but continue with safe defaults
|
227
|
+
self.logger.debug(
|
228
|
+
f"Could not get parameter definitions during init: {e}"
|
229
|
+
)
|
230
|
+
defined_params = set()
|
231
|
+
self._temp_param_definitions = {}
|
232
|
+
|
233
|
+
# Comprehensive parameter filtering: handle ALL potential conflicts
|
234
|
+
# Fields that are always internal (never user parameters)
|
235
|
+
always_internal = {"metadata"}
|
236
|
+
|
237
|
+
# Fields that can be either internal or user parameters
|
238
|
+
potentially_user_params = {
|
221
239
|
"id",
|
222
240
|
"name",
|
223
241
|
"description",
|
224
242
|
"version",
|
225
243
|
"author",
|
226
244
|
"tags",
|
227
|
-
"metadata",
|
228
245
|
}
|
229
|
-
|
246
|
+
|
247
|
+
# Build dynamic filter list based on user-defined parameters
|
248
|
+
internal_fields = always_internal.copy()
|
249
|
+
for field in potentially_user_params:
|
250
|
+
if field not in defined_params:
|
251
|
+
# Field is not user-defined, so treat as internal field
|
252
|
+
internal_fields.add(field)
|
253
|
+
# If field IS user-defined, don't add to internal_fields (preserve it)
|
254
|
+
|
255
|
+
# Also filter any field that starts with metadata prefix or other internal patterns
|
256
|
+
# This handles cases like 'metadata_name', 'metadata_*', etc.
|
257
|
+
def is_internal_field(field_name: str) -> bool:
|
258
|
+
# Check if it's in our explicit internal fields list
|
259
|
+
if field_name in internal_fields:
|
260
|
+
return True
|
261
|
+
# Check for metadata-related field patterns
|
262
|
+
if field_name.startswith("metadata_"):
|
263
|
+
return True
|
264
|
+
# Check for other internal patterns
|
265
|
+
if field_name.startswith("_"): # Private fields
|
266
|
+
return True
|
267
|
+
return False
|
268
|
+
|
269
|
+
# Apply comprehensive filtering
|
270
|
+
self.config = {k: v for k, v in kwargs.items() if not is_internal_field(k)}
|
230
271
|
|
231
272
|
# Parameter resolution cache - initialize before validation
|
232
273
|
cache_size = int(
|
@@ -554,11 +595,23 @@ class Node(ABC):
|
|
554
595
|
return bool(re.match(r"^\$\{[^}]+\}$", value))
|
555
596
|
|
556
597
|
def _get_cached_parameters(self) -> dict[str, NodeParameter]:
|
557
|
-
"""Get cached parameter definitions.
|
598
|
+
"""Get cached parameter definitions with optimal performance.
|
599
|
+
|
600
|
+
Uses parameters cached during initialization to avoid duplicate get_parameters() calls.
|
558
601
|
|
559
602
|
Returns:
|
560
603
|
Dictionary of parameter definitions, cached for performance
|
561
604
|
"""
|
605
|
+
# First check if we have parameters cached from initialization
|
606
|
+
if hasattr(self, "_temp_param_definitions") and self._temp_param_definitions:
|
607
|
+
# Use cached parameters from init and clean up temporary cache
|
608
|
+
if self._cached_params is None:
|
609
|
+
self._cached_params = self._temp_param_definitions
|
610
|
+
# Clean up temporary cache to free memory
|
611
|
+
delattr(self, "_temp_param_definitions")
|
612
|
+
return self._cached_params
|
613
|
+
|
614
|
+
# Fallback to original behavior if no cached parameters from init
|
562
615
|
if self._cached_params is None:
|
563
616
|
try:
|
564
617
|
self._cached_params = self.get_parameters()
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|